diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f747721..8bfb16b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,10 +1,20 @@ { "name": "Python and R Dev Container", - "image": "mewu/data_access:latest", // Use pre-built image -// "build": { -// "dockerfile": "../Dockerfile", -// "context": ".." -// }, + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/rocker-org/devcontainer-features/rstudio-server": {}, + "ghcr.io/rocker-org/devcontainer-features/r-apt:latest": {}, + "ghcr.io/rocker-org/devcontainer-features/r-packages:1": { + "packages": "knitr, markdown, tinytex" + }, + "ghcr.io/devcontainers/features/python:1": { + "version": "3.12", + "installJupyterlab": true + }, + "ghcr.io/rocker-org/devcontainer-features/quarto-cli:1": {}, + "ghcr.io/rocker-org/devcontainer-features/pandoc:1": {}, + "ghcr.io/rocker-org/devcontainer-features/renv-cache:0": {} + }, "customizations": { "vscode": { "extensions": [ @@ -12,27 +22,17 @@ "reditorsupport.r", "quarto.quarto", "ms-toolsai.jupyter" - ], - "settings": { - "python.defaultInterpreterPath": "/opt/venv/bin/python" - } + ] } }, -// "workspaceFolder": "${localWorkspaceFolder}", -// "runArgs": [ -// "--workdir", "/workspaces/${localWorkspaceFolder}" -// ], -// "mounts": [ -// "source=${localWorkspaceFolder},target=/workspaces/${localWorkspaceFolder},type=bind,consistency=cached" -// ], "postCreateCommand": "bash ./.devcontainer/postCreateCommand.sh", - "postStartCommand": "bash ./.devcontainer/postStartCommand.sh", + "postAttachCommand": "bash ./.devcontainer/postAttachCommand.sh", "portsAttributes": { "8888": { "label": "Jupyter Lab" }, "8787": { - "label": "R studio" + "label": "R Studio" } }, "forwardPorts": [8787, 8888] diff --git a/.devcontainer/postAttachCommand.sh b/.devcontainer/postAttachCommand.sh new file mode 100644 index 0000000..2b33bc7 --- /dev/null +++ b/.devcontainer/postAttachCommand.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +echo "Restarting Rstudio server..." +sudo rm -rf /var/run/rstudio-server.id +sleep 1 +rstudio-server start > rstudio_server.log 2>&1 & + +echo "Install quarto tinytex extension" +quarto install tinytex + +pip install jupyterlab jupyter_core +sleep 5 +echo "Setup Jupyter-lab" +# Start Jupyter Lab +if ! pgrep -x "jupyter-lab" > /dev/null; then + echo "Jupyter Lab is not started. Restarting..." + jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='' > jupyter_lab.log 2>&1 & +fi + +echo "Dev environment startup completed!" diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/postCreateCommand.sh index 5249c81..6f2acd3 100644 --- a/.devcontainer/postCreateCommand.sh +++ b/.devcontainer/postCreateCommand.sh @@ -1,22 +1,23 @@ #!/bin/bash -# Activate the Python virtual environment -source /opt/venv/bin/activate +# Install ZeroMQ +sudo apt-get update -y +sudo apt-get install libzmq3-dev -y -# Install Python dependencies -if [ -f "python/requirements.txt" ]; then - pip install -r python/requirements.txt -fi +# Install GDAL +sudo apt-get install gdal-bin libgdal-dev -y -# Install R dependencies -#if [ -f "r/install_packages.R" ]; then -# Rscript r/install_packages.R -#fi +# Install a few common dependencies +sudo apt-get install libharfbuzz-dev libfribidi-dev libfreetype6-dev pkg-config libarchive-dev -y +# Install ffmpeg +sudo apt-get install ffmpeg -y -# This may be done by the user -# Set up renv for R -#if [ -f "r/renv.lock" ]; then -# cd r && R -e 'renv::restore()' -#fi +# Setup bash to allow conda to run +#conda init bash && conda install -y ipykernel -echo "Dev environment setup completed!" +# Allow JupyterLab and IRkernel ro run R workbook +R -e "install.packages('IRkernel')" +R -e "IRkernel::installspec()" + +# change the default working directory for RStudio +echo "session-default-working-dir=/workspaces/data_access_library/" | sudo tee -a /etc/rstudio/rsession.conf diff --git a/.devcontainer/postStartCommand.sh b/.devcontainer/postStartCommand.sh deleted file mode 100644 index 4a95519..0000000 --- a/.devcontainer/postStartCommand.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -# change the default working directory for RStudio -echo "session-default-working-dir=${CODESPACE_VSCODE_FOLDER}" | sudo tee -a /etc/rstudio/rsession.conf - -# Start RStudio Server -echo "Start R studeio Server" -rstudio-server start > rstudio_server.log 2>&1 & -sleep 5 # Give some time for the service to start -if ! pgrep -x "rstudio-server" > /dev/null; then - echo "RStudio Server failed to start. Restarting..." - rstudio-server restart > rstudio_server.log 2>&1 & -fi - -sleep 5 -echo "Setup Jupyter-lab" -# Start Jupyter Lab -jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='' > jupyter_lab.log 2>&1 & -sleep 5 -if ! pgrep -x "jupyter-lab" > /dev/null; then - echo "Jupyter Lab failed to start. Restarting..." - jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='' > jupyter_lab.log 2>&1 & -fi - -echo "Dev environment startup completed!" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cd43f48..6209a8c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -28,54 +28,7 @@ jobs: - name: Run Quarto in Docker container run: | - docker run --rm -v ${{ github.workspace }}:/workspace -w /workspace mewu/data_access:latest bash -c " - - source /opt/venv/bin/activate - echo 'activated virtualenv.' - - chmod +x /workspace/r/install_quarto_extensions.expect - /workspace/r/install_quarto_extensions.expect - quarto list extensions - echo 'Check Quarto status:' - quarto check - echo 'Check R script path:' - which Rscript - - FOLDERS=(python r) - echo 'Folders to process: \${FOLDERS[@]}' - - for FOLDER in \"\${FOLDERS[@]}\"; do - echo \"Searching for .qmd and .ipynb files in /workspace/\$FOLDER...\" - find \"/workspace/\$FOLDER\" \( -name '*.qmd' -o -name '*.ipynb' \) | while read -r file; do - - echo \"Processing file: \$file\" - # Remove the /workspace prefix from the file path - relative_dir=\$(dirname \"\${file#'/workspace/'}\") - - # Install extension to the folder directly - pushd \$relative_dir - /workspace/r/install_quarto_extensions.expect - popd - - target_dir=\"/workspace/gallery/\$relative_dir\" - echo \"Creating target directory: \$target_dir\" - mkdir -p \"\$target_dir\" && echo \"Directory \$target_dir created.\" - - echo \"Attempting to render \$file with execution...\" - if quarto render \"\$file\" --to html --output-dir \"\$target_dir\"; then - echo \"Successfully rendered \$file with execution.\" - else - echo \"Failed to render \$file with execution. Rendering without execution...\" - if quarto render \"\$file\" --to html --no-execute --output-dir \"\$target_dir\"; then - echo \"Successfully rendered \$file without execution.\" - else - echo \"Rendering failed for \$file, even without execution.\" - fi - fi - - done - done" - + docker run --rm -v ${{ github.workspace }}:/workspace -w /workspace mewu/data_access:latest bash -c "chmod +x ./run_quarto_publish.sh && ./run_quarto_publish.sh" - name: Generate Index HTML run: | @@ -101,6 +54,7 @@ jobs: git config --global user.email 'github-actions[bot]@users.noreply.github.com' - name: Deploy to GitHub Pages + if: github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/Dockerfile b/Dockerfile index bf1fe71..f0ebdee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,6 +25,15 @@ RUN apt-get update && apt-get install -y \ libharfbuzz-dev \ libfribidi-dev \ libfreetype6-dev \ + libgl1-mesa-glx \ + libegl1-mesa \ + libxrandr2 \ + libxss1 \ + libxcursor1 \ + libxcomposite1 \ + libasound2 \ + libxi6 \ + libxtst6 \ gdebi-core \ software-properties-common \ ffmpeg \ @@ -56,24 +65,39 @@ RUN /opt/venv/bin/python -m ipykernel install --user --name=venv --display-name RUN wget https://github.com/quarto-dev/quarto-cli/releases/download/v1.5.57/quarto-1.5.57-linux-amd64.deb RUN dpkg -i quarto-1.5.57-linux-amd64.deb -# Expose ports for RStudio (8787) and Jupyter (8888) +# Install Anaconda +# Set environment variable for non-interactive Anaconda install +ENV PATH /opt/conda/bin:$PATH + +# Download and install Anaconda +RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh -O ~/anaconda.sh && \ + /bin/bash ~/anaconda.sh -b -p /opt/conda && \ + rm ~/anaconda.sh && \ + /opt/conda/bin/conda clean -i -t -p -y + +# Update conda to the latest version +RUN conda update -n base -c defaults conda + +# Set the default shell to bash and activate Conda environment +SHELL ["/bin/bash", "-c"] + +# Ensure conda is activated on startup +RUN echo "source /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc WORKDIR /app COPY r /app/r COPY python /app/python -# Install python packages in venv -RUN /opt/venv/bin/pip install -r python/requirements.txt - +# Expose ports for RStudio (8787) and Jupyter (8888) EXPOSE 8787 EXPOSE 8888 -# Install renv globally for all users +# Install essentials globally for all users RUN R -e "install.packages('renv', repos='https://cran.rstudio.com/')" - -# Install R packages -RUN Rscript /app/r/install_packages.R +RUN R -e "install.packages('knitr', repos='https://cran.rstudio.com/')" +RUN R -e "install.packages('rmarkdown', repos='https://cran.rstudio.com/')" +RUN R -e ".libPaths()" # Add /usr/local/bin to the PATH for all users ENV PATH="/usr/local/bin:$PATH" diff --git a/README.md b/README.md index cd78ccb..3884b78 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,60 @@ # Data Access and Analysis Library Demo -This library provides a set of samples for accessing and analyzing data, including Python and R. -It demonstrates the interactive and reproducible code snippets that can be shared with IDM reserachers. -The usage of `devcontainer` to set up a consistent development environment in Github codespaces can help you to get started quickly. +This repository demonstrates some good examples for sharing interactive, reproducible data analysis code across Python and R. +By leveraging devcontainer for consistent development environments and Quarto for technical publishing, +this setup ensures a smooth experience for researchers to share their code and ideas. -## 1. Usage of Devcontainer +Contributors are encouraged to submit code examples using Quarto in `r/samples` or `python/samples` folders. +Our goal is not to provide a comprehensive guide to showcase the possibilities of using Quarto for technical publishing. +But by adding yaml metadata to your codesnippets, it allows publishing the content to Github Pages easily and +others can view the code / results directly in the browser without running the code. + +## 1. Use of Devcontainer The `devcontainer` feature in VS Code allows you to define the development environment using a Docker-based configuration. -This ensures that all contributors to a project have a consistent setup, eliminating the "works only on my machine" problem. +This ensures that all participant in a project has a consistent setup, eliminating the "works only on my machine" problem. By using `devcontainer.json`, you can specify the required dependencies for Python and R, configure the environment, and set up additional tools like Jupyter and Quarto for sharing your work. **How to:** -- TBD + +In this repo, we have a template "Python and R Dev Container" that you can use to create a consistent development environment. +Go to github codespaces and create a new codespace using this template as shown below: +**(This may take 5-10 minutes, and please be aware of codespace [costs](https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts) )** + +![](assets/codespace.png) + +If you choose to clone the repo locally, you can also setup your local container to use the same environment, +follow this [tutorial](https://code.visualstudio.com/docs/devcontainers/tutorial) to set it up. + +If your project requires additional dependencies, you can create a customized `your_devcontainer.json` file. +For more information, check the [VS Code documentation](https://code.visualstudio.com/docs/remote/containers). +There are many features available in the devcontainer that you can leverage, see this [list](https://containers.dev/features). + ## 2. Quarto Examples Using Jupyter Notebook Quarto is an open-source tool for technical publishing that enables you to create interactive, data-driven documents. It is built on top of the R Markdown format and supports Jupyter notebooks as part of its ecosystem. This section provides examples of using Quarto with Jupyter notebooks for Python-based data analysis. -The integration allows you to create rich, interactive documents that blend code, analysis, and markdown. +The integration allows you to create rich, interactive documents that blend code, analysis, and markdown. for more information, go to [Quarto.org](https://quarto.org/). **How to:** -- TBD + +In this repo, we have a sample Jupyter notebook [sir_model_simulation.ipynb](python/samples/sir/sir_model_simulation.ipynb) +that demonstrates how you can insert a yaml at the top of a markdown cell to specify metadata for quarto publishing. +If you are using codespace, a jupyterlab instance is running on port 8888, and you can edit the notebook in the browser or add your own: + +![](assets/jupyter.png) + +It is a good practice to add required dependencies in the [requirements.txt](python/samples/sir/requirements.txt) file +so that your example will be easily reproducible by others. You can also choose to use the magic command `!` or `%` +inside your notebook to install dependent packages. + +```python +!pip install numpy~=2.1 +%pip install matplotlib>=3.9 +``` ## 3. Quarto Examples Using `.qmd` for R @@ -32,4 +64,68 @@ The `.qmd` files serve as an efficient way to write and maintain both the narrat It is very similar to R Markdown but offers additional features and flexibility for publishing. **How to:** -- TBD \ No newline at end of file + +In this repo, we have a sample Quarto document [simple_plot.qmd](r/samples/simple_plot/simple_plot.qmd) that shows how to add metadata and use R code chunks. +If you are using codespace, an Rstudio Server instance is running on port 8787 (username: **rstudio**, password: **rstudio**) +and you can edit the `.qmd` file directly in the browser or add your own: + +![](assets/rstudio_login.png) + +You should handle `install.packages` and `library` commands to install and load the required R packages for reproducibility, or provide +a [install_packages.R](r/samples/simple_plot/install_packages.R) file so that others can reproduce your code easily. + + +## 4. Key Quarto commands + +You can open a terminal window in the codespace and run the following commands to build the quarto document, for example: + +```bash +quarto render your_example.qmd +quarto render your_example.ipynb --to html +``` +Quarto allows you to customize the rendering of documents using both the `quarto render` command and the YAML header within a file. Here's a brief overview: + +### Quarto Render Command Options: +- **Output Format:** You can specify the format (HTML, PDF, DOCX, etc.) by adding the `--to` flag. For example: + ```bash + quarto render file.qmd --to pdf + ``` + This converts your `.qmd` or `.ipynb` file to PDF. + +- **Output Directory:** Control where the output file is saved using `--output-dir`: + ```bash + quarto render file.qmd --output-dir output/ + ``` + +### YAML Header Options: +- **Document Metadata:** Set properties like title, author, and date in the YAML header: + ```yaml + --- + title: "My Report" + author: "Jane Doe" + --- + ``` + +- **Table of Contents (TOC):** Enable and position the table of contents: + ```yaml + --- + toc: true + toc-location: left + --- + ``` + +- **Code Execution:** Control whether code is executed or shown in the final document: + ```yaml + --- + execute: + echo: true + --- + ``` + +These options give you flexibility to control how your documents are rendered, either through the command line or the YAML configuration in your file. + + +## 5. Github Page hosting +All examples checked in to this repo under `r/samples` or `python/samples` +will be published to [Github Pages](https://institutefordiseasemodeling.github.io/data_access_library/). automatically when merged to main branch. + diff --git a/assets/codespace.png b/assets/codespace.png new file mode 100644 index 0000000..7a780fb Binary files /dev/null and b/assets/codespace.png differ diff --git a/assets/jupyter.png b/assets/jupyter.png new file mode 100644 index 0000000..247246b Binary files /dev/null and b/assets/jupyter.png differ diff --git a/assets/rstudio_login.png b/assets/rstudio_login.png new file mode 100644 index 0000000..73d8a69 Binary files /dev/null and b/assets/rstudio_login.png differ diff --git a/python/requirements.txt b/python/samples/sir/requirements.txt similarity index 100% rename from python/requirements.txt rename to python/samples/sir/requirements.txt diff --git a/python/sir_model_simulation.ipynb b/python/samples/sir/sir_model_simulation.ipynb similarity index 99% rename from python/sir_model_simulation.ipynb rename to python/samples/sir/sir_model_simulation.ipynb index 1ecc812..bbf1fe3 100644 --- a/python/sir_model_simulation.ipynb +++ b/python/samples/sir/sir_model_simulation.ipynb @@ -1,8 +1,8 @@ { "cells": [ { - "cell_type": "markdown", - "id": "3503374f-280f-4be6-8fdf-7cbcbfc33cfe", + "cell_type": "raw", + "id": "ea27a3dd-bccc-4bb3-b28f-4c0317b45c97", "metadata": {}, "source": [ "---\n", @@ -46,14 +46,86 @@ "- $\\gamma$ is the recovery rate.\n" ] }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "#| eval: false\n", + "#| echo: false\n", + "#| include: false\n", + "%pip install -r requirements.txt" + ], + "id": "9d67ea2a26799bd6", + "outputs": [], + "execution_count": null + }, { "cell_type": "code", - "execution_count": 3, "id": "88293b16-acc0-439b-8a95-3c6be72fe3c0", "metadata": {}, + "source": [ + "import numpy as np\n", + "from scipy.integrate import odeint\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.animation import FuncAnimation\n", + "from IPython.display import HTML\n", + "\n", + "# %matplotlib inline\n", + "\n", + "# SIR model differential equations.\n", + "def sir_model(y, t, beta, gamma):\n", + " S, I, R = y\n", + " dS_dt = -beta * S * I\n", + " dI_dt = beta * S * I - gamma * I\n", + " dR_dt = gamma * I\n", + " return [dS_dt, dI_dt, dR_dt]\n", + "\n", + "# Initial conditions: 99% susceptible, 1% infected, 0% recovered\n", + "S0, I0, R0 = 0.99, 0.01, 0.0\n", + "y0 = [S0, I0, R0]\n", + "\n", + "# Parameters\n", + "beta = 0.3 # infection rate\n", + "gamma = 0.1 # recovery rate\n", + "\n", + "# Time points\n", + "t = np.linspace(0, 100, 100)\n", + "\n", + "# Integrate the SIR equations over the time grid, t.\n", + "solution = odeint(sir_model, y0, t, args=(beta, gamma))\n", + "S, I, R = solution.T\n", + "\n", + "# Create a plot\n", + "fig, ax = plt.subplots()\n", + "ax.set_xlabel('Time')\n", + "ax.set_ylabel('Proportion')\n", + "line1, = ax.plot([], [], 'b-', label='Susceptible')\n", + "line2, = ax.plot([], [], 'r-', label='Infected')\n", + "line3, = ax.plot([], [], 'g-', label='Recovered')\n", + "ax.set_xlim(0, 100)\n", + "ax.set_ylim(0, 1)\n", + "ax.legend()\n", + "\n", + "def init():\n", + " line1.set_data([], [])\n", + " line2.set_data([], [])\n", + " line3.set_data([], [])\n", + " return line1, line2, line3\n", + "\n", + "def update(frame):\n", + " line1.set_data(t[:frame], S[:frame])\n", + " line2.set_data(t[:frame], I[:frame])\n", + " line3.set_data(t[:frame], R[:frame])\n", + " return line1, line2, line3\n", + "\n", + "HTML(FuncAnimation(fig, update, frames=len(t), init_func=init, blit=True).to_html5_video())\n" + ], "outputs": [ { "data": { + "text/plain": [ + "" + ], "text/html": [ "" - ], - "text/plain": [ - "" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", "text/plain": [ "
" - ] + ], + "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], - "source": [ - "import numpy as np\n", - "from scipy.integrate import odeint\n", - "import matplotlib.pyplot as plt\n", - "from matplotlib.animation import FuncAnimation\n", - "from IPython.display import HTML\n", - "\n", - "# %matplotlib inline\n", - "\n", - "# SIR model differential equations.\n", - "def sir_model(y, t, beta, gamma):\n", - " S, I, R = y\n", - " dS_dt = -beta * S * I\n", - " dI_dt = beta * S * I - gamma * I\n", - " dR_dt = gamma * I\n", - " return [dS_dt, dI_dt, dR_dt]\n", - "\n", - "# Initial conditions: 99% susceptible, 1% infected, 0% recovered\n", - "S0, I0, R0 = 0.99, 0.01, 0.0\n", - "y0 = [S0, I0, R0]\n", - "\n", - "# Parameters\n", - "beta = 0.3 # infection rate\n", - "gamma = 0.1 # recovery rate\n", - "\n", - "# Time points\n", - "t = np.linspace(0, 100, 100)\n", - "\n", - "# Integrate the SIR equations over the time grid, t.\n", - "solution = odeint(sir_model, y0, t, args=(beta, gamma))\n", - "S, I, R = solution.T\n", - "\n", - "# Create a plot\n", - "fig, ax = plt.subplots()\n", - "ax.set_xlabel('Time')\n", - "ax.set_ylabel('Proportion')\n", - "line1, = ax.plot([], [], 'b-', label='Susceptible')\n", - "line2, = ax.plot([], [], 'r-', label='Infected')\n", - "line3, = ax.plot([], [], 'g-', label='Recovered')\n", - "ax.set_xlim(0, 100)\n", - "ax.set_ylim(0, 1)\n", - "ax.legend()\n", - "\n", - "def init():\n", - " line1.set_data([], [])\n", - " line2.set_data([], [])\n", - " line3.set_data([], [])\n", - " return line1, line2, line3\n", - "\n", - "def update(frame):\n", - " line1.set_data(t[:frame], S[:frame])\n", - " line2.set_data(t[:frame], I[:frame])\n", - " line3.set_data(t[:frame], R[:frame])\n", - " return line1, line2, line3\n", - "\n", - "HTML(FuncAnimation(fig, update, frames=len(t), init_func=init, blit=True).to_html5_video())\n" - ] + "execution_count": 4 }, { "cell_type": "markdown", @@ -686,21 +699,13 @@ "\n", "As time progresses, the number of susceptible individuals decreases, the number of infected individuals initially increases and then decreases as individuals recover, and the number of recovered individuals increases. This is a typical behavior of an infectious disease in a closed population without births or deaths." ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8bc33730-2a81-454f-9cd3-f82ac1d1c6a1", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3.12 (venv)", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "venv" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -712,7 +717,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.5" + "version": "3.12.7" } }, "nbformat": 4, diff --git a/r/README.md b/r/README.md index 8b2833d..2909be3 100644 --- a/r/README.md +++ b/r/README.md @@ -1,11 +1,23 @@ +# Advanced Topics +## Optional Setup: Managing R Dependencies with `renv` -## Before you start creating an example for others, please read the renv best-practices to make sure your code can be easily run and repro by others +This section is not required for submitting the samples, it is only for those who want to manage the R environment using `renv`. `renv` is a good practice to manage R package dependencies. Follow the steps below to restore the project environment, start working, add libraries as needed, and create a snapshot of the dependencies for version control. This will ensure that whoever checkout the code from this repo will be working with the same package versions as your original environment. -### 1. Restore the Environment with `renv` +### 1. Setting Up renv +When starting a new R project or adding R examples to this repository, initialize renv by running: + +```r +renv::init() +``` +This will create an isolated environment and save your package dependencies to a renv.lock file. +Once the environment is initialized, any subsequent package installations will be tracked automatically. +The renv.lock file ensures that others can restore the exact package versions you used. + +### 2. Restore the Environment with `renv` To restore the R environment with the exact packages used in this project, use the `renv` lock file. This ensures that you are working with the same package versions as the original environment when it was created. @@ -23,7 +35,7 @@ renv::restore() This will install all the required packages as installed as listed in the `renv.lock` file. -### 2. Add Libraries as Needed +### 3. Add Libraries as Needed As you work on the project, you might need to install additional R libraries. You can do this with `install.packages()` as usual. For example: @@ -33,7 +45,7 @@ install.packages("ggplot2") After installing new packages, be sure to update the environment snapshot to capture these new changes. -### 3. Snapshot the Environment +### 4. Snapshot the Environment Once you have added or updated any packages, you need to create a new snapshot to update the `renv.lock` file. This ensures that any new dependencies are tracked. @@ -55,32 +67,18 @@ git push origin This ensures that others working on the project can restore the environment with the new packages you added. -### 4. Optional: Start a New `renv` Environment - -If you are starting a new project or want to reset the environment, you can initialize a new `renv` environment: - -```r -# Initialize renv when there is no existing environment in the project -renv::init() -``` - -This will generate a new `renv` setup, including a fresh `renv.lock` file for you to manage the project’s dependencies. - --- -## Use Quarto to Create Interactive Documents +## Use Quarto and shinylive to Create Interactive Documents In this folder we show an example that you can share code and ideas with others using a quarto document. See -[simple_plot.qmd](./simple_plot/simple_plot.qmd). -[simple_example.qmd](./shinylive_demo/simple_example.qmd). - +the [simple_example.qmd](./samples/shinylive_demo/simple_example.qmd) file for more details. To begin with the example, you can open the `simple_example.qmd` file in Rstudio or other IDEs such as VS Code with the Quarto extension installed. ### How to Run the Example -note: if you are running a shinylive that showcases a shiny app in the quarto document, you will need to install the `shinylive` package first. -This should already be included in the renv.lock file if you follow the above instructions. +note: if you are running a shinylive that showcases a shiny app in the quarto document, you will need to install the `shinylive` package first. ```bash quarto install extension quarto-ext/shinylive @@ -92,14 +90,17 @@ You can preview and render the quarto document by running the following command quarto preview simple_example.qmd --port 4321 ``` This will start a local server at port 4321 and open the document in your default browser. +Note, if you are using codespace, you will need to manually forward the port to view the document in your browser. + Any changes you make to the document will be automatically re-rendered in the browser. When you are satisfied with the document, you can render it to a standalone HTML file by running: ```bash -quarto render simple_example.qmd +quarto render simple_example.qmd --to html ``` -This will use the `_quarto.yaml_` configuration file or the yaml section in your quarto document to render the desired file format and save them in the `output-dir` directory defined. +This will use the`_quarto.yaml_` configuration file or the yaml section in your quarto document to render the desired file format +and save them in the `output-dir` directory defined. For more implementation details, please refer to the [Quarto documentation](https://quarto.org/). diff --git a/r/shinylive_demo/_quarto.yml b/r/samples/shinylive_demo/_quarto.yml similarity index 100% rename from r/shinylive_demo/_quarto.yml rename to r/samples/shinylive_demo/_quarto.yml diff --git a/r/install_packages.R b/r/samples/shinylive_demo/install_packages.R similarity index 100% rename from r/install_packages.R rename to r/samples/shinylive_demo/install_packages.R diff --git a/r/shinylive_demo/simple_example.qmd b/r/samples/shinylive_demo/simple_example.qmd similarity index 87% rename from r/shinylive_demo/simple_example.qmd rename to r/samples/shinylive_demo/simple_example.qmd index c3752b9..1a5275e 100644 --- a/r/shinylive_demo/simple_example.qmd +++ b/r/samples/shinylive_demo/simple_example.qmd @@ -7,13 +7,16 @@ format: filters: - shinylive --- - + ```{shinylive-r} #| standalone: true #| viewerHeight: 600 #| layout: full +library(tidyr) library(shiny) library(dplyr) library(ggplot2) @@ -29,6 +32,13 @@ washington_covid_data <- covid_data %>% select(date, county, cases) %>% mutate(year_month = format(as.Date(date), "%Y%m")) # Create year_month column +# Preprocess the data to ensure all counties and year-month combinations are present +washington_covid_data <- washington_covid_data %>% + # Create a complete dataset with all combinations of counties and year-month + complete(county = unique(washington_covid_data$county), + year_month = unique(washington_covid_data$year_month), + fill = list(cases = 0)) + # Create a vector of unique year_month values from the dataset valid_year_months <- sort(unique(washington_covid_data$year_month)) valid_year_months_index <- seq_along(valid_year_months) @@ -67,6 +77,10 @@ server <- function(input, output) { ggplot(filtered_data, aes(x = county, y = total_cases)) + geom_bar(stat = "identity", fill = "steelblue") + + scale_y_log10( + breaks = c(1, 10, 100, 1000, 10000, 100000, 1000000), + labels = c("1", "10", "100", "1k", "10k", "100k", "1M") + ) + labs(title = paste("COVID Cases in", input$selected_year_month), x = "County", y = "Total Case Count") + @@ -97,6 +111,7 @@ filters: #| viewerHeight: 600 #| layout: full +library(tidyr) library(shiny) library(dplyr) library(ggplot2) @@ -112,6 +127,12 @@ washington_covid_data <- covid_data %>% select(date, county, cases) %>% mutate(year_month = format(as.Date(date), "%Y%m")) # Create year_month column +# Preprocess the data to ensure all counties and year-month combinations are present +washington_covid_data <- washington_covid_data %>% + # Create a complete dataset with all combinations of counties and year-month + complete(county = unique(washington_covid_data$county), + year_month = unique(washington_covid_data$year_month), + fill = list(cases = 0)) # Create a vector of unique year_month values from the dataset valid_year_months <- sort(unique(washington_covid_data$year_month)) valid_year_months_index <- seq_along(valid_year_months) @@ -150,6 +171,10 @@ server <- function(input, output) { ggplot(filtered_data, aes(x = county, y = total_cases)) + geom_bar(stat = "identity", fill = "steelblue") + + scale_y_log10( + breaks = c(1, 10, 100, 1000, 10000, 100000, 1000000), + labels = c("1", "10", "100", "1k", "10k", "100k", "1M") + ) + labs(title = paste("COVID Cases in", input$selected_year_month), x = "County", y = "Total Case Count") + @@ -168,10 +193,10 @@ shinyApp(ui = ui, server = server) This is a demo of a Shiny app embedded in a Quarto document using the `shinylive` filter. The app displays COVID case counts by month-year in Washington state counties. Use the slider to select a month-year and see the case counts for each county in that month-year period.
-The code first import the libraries: +The code first import the libraries: ```{r} #| eval: false - +library(tidyr) library(shiny) library(dplyr) library(ggplot2) diff --git a/r/samples/simple_plot/install_packages.R b/r/samples/simple_plot/install_packages.R new file mode 100644 index 0000000..fb70d22 --- /dev/null +++ b/r/samples/simple_plot/install_packages.R @@ -0,0 +1,26 @@ +options(Ncpus = parallel::detectCores()) + +if (.Platform$OS.type == "unix") { + type <- "source" +}else{ + type <- "binary" +} + + +pkgnames <- c( +'devtools', 'DT', +'dplyr','ggplot2', 'plotly', 'tidyr', 'stringr', 'logr', 'tidyverse', +'knitr', 'rmarkdown', +"leaflet", "leaflet.extras" +) + +print(paste0("Install Packages from Cran : ", pkgnames)) +install.packages(pkgnames, + repos='http://cran.rstudio.com/', + type=type) + +# Make sure packages are available +if (length(pkgnames[which (!pkgnames %in% installed.packages()[,'Package'])]) >0 ){ + cat(paste0("Package did not install correctly:", c(pkgnames[which (!pkgnames %in% installed.packages()[,'Package'])]), "\n")) + stop("some packages are not available, please investigate...") +} \ No newline at end of file diff --git a/r/simple_plot/simple_plot.qmd b/r/samples/simple_plot/simple_plot.qmd similarity index 100% rename from r/simple_plot/simple_plot.qmd rename to r/samples/simple_plot/simple_plot.qmd diff --git a/r/shinylive_demo/renv.lock b/r/shinylive_demo/renv.lock deleted file mode 100644 index 9fb8fd8..0000000 --- a/r/shinylive_demo/renv.lock +++ /dev/null @@ -1,1463 +0,0 @@ -{ - "R": { - "Version": "4.4.0", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - } - ] - }, - "Packages": { - "KernSmooth": { - "Package": "KernSmooth", - "Version": "2.23-24", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats" - ], - "Hash": "9f33a1ee37bbe8919eb2ec4b9f2473a5" - }, - "MASS": { - "Package": "MASS", - "Version": "7.3-60.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "methods", - "stats", - "utils" - ], - "Hash": "2f342c46163b0b54d7b64d1f798e2c78" - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.7-0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "1920b2f11133b12350024297d8a4ff4a" - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" - }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "45f0398006e83a5b10b72a90663d8d8c" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.13", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "f27411eb6d9c3dada5edd444b8416675" - }, - "archive": { - "Package": "archive", - "Version": "1.1.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "rlang", - "tibble" - ], - "Hash": "d26b62e131d4a8b65aba4e9554a4bf74" - }, - "askpass": { - "Package": "askpass", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "sys" - ], - "Hash": "cad6cf7f1d5f6e906700b9d3e718c796" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "543776ae6848fde2f48ff3816d0628bc" - }, - "boot": { - "Package": "boot", - "Version": "1.3-30", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "stats" - ], - "Hash": "96abeed416a286d4a0f52e550b612343" - }, - "brio": { - "Package": "brio", - "Version": "1.1.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c1ee497a6d999947c2c224ae46799b1a" - }, - "bslib": { - "Package": "bslib", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "base64enc", - "cachem", - "fastmap", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "lifecycle", - "memoise", - "mime", - "rlang", - "sass" - ], - "Hash": "b299c6741ca9746fb227debcb0f9fb6c" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cd9a672193789068eb5a2aad65a0dedf" - }, - "callr": { - "Package": "callr", - "Version": "3.7.6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "d7e13f49c19103ece9e58ad2d83a7354" - }, - "class": { - "Package": "class", - "Version": "7.3-22", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "R", - "stats", - "utils" - ], - "Hash": "f91f6b29f38b8c280f2b9477787d4bb2" - }, - "cli": { - "Package": "cli", - "Version": "3.6.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "b21916dd77a27642b447374a5d30ecf3" - }, - "cluster": { - "Package": "cluster", - "Version": "2.1.6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats", - "utils" - ], - "Hash": "0aaa05204035dc43ea0004b9c76611dd" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-20", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "61e097f35917d342622f21cdc79c256e" - }, - "colorspace": { - "Package": "colorspace", - "Version": "2.1-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "methods", - "stats" - ], - "Hash": "d954cb1c57e8d8b756165d7ba18aa55a" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5d8225445acb167abf7797de48b2ee3c" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "859d96e65ef198fd43e82b9628d593ef" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "ab12c7b080a57475248a30f4db6298c0" - }, - "curl": { - "Package": "curl", - "Version": "5.2.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "d91263322a58af798f6cf3b13fd56dde" - }, - "desc": { - "Package": "desc", - "Version": "1.4.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "utils" - ], - "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" - }, - "digest": { - "Package": "digest", - "Version": "0.6.37", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "33698c4b3127fc9f506654607fb73676" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "fedd9d00c2944ff00a0e2696ccf048ec" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "6b567375113ceb7d9f800de4dd42218e" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "962174cf2aeb5b9eea581522286a911f" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "680887028577f3fa2a81e410ed0d6e42" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" - }, - "filelock": { - "Package": "filelock", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "192053c276525c8495ccfd523aa8f2d1" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" - }, - "foreign": { - "Package": "foreign", - "Version": "0.8-86", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods", - "stats", - "utils" - ], - "Hash": "550170303dbb19d07b2bcc288068e7dc" - }, - "fs": { - "Package": "fs", - "Version": "1.6.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "15aeb8c27f5ea5161f9f6a641fafd93a" - }, - "generics": { - "Package": "generics", - "Version": "0.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "15e9634c0fcd294799e9b2e929ed1b86" - }, - "ggplot2": { - "Package": "ggplot2", - "Version": "3.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "R", - "cli", - "glue", - "grDevices", - "grid", - "gtable", - "isoband", - "lifecycle", - "mgcv", - "rlang", - "scales", - "stats", - "tibble", - "vctrs", - "withr" - ], - "Hash": "44c6a2f8202d5b7e878ea274b1092426" - }, - "gh": { - "Package": "gh", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "gitcreds", - "glue", - "httr2", - "ini", - "jsonlite", - "lifecycle", - "rlang" - ], - "Hash": "fbbbc48eba7a6626a08bb365e44b563b" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" - }, - "glue": { - "Package": "glue", - "Version": "1.7.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "e0b3a53876554bd45879e596cdb10a52" - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "grid", - "lifecycle", - "rlang" - ], - "Hash": "e18861963cbc65a27736e02b3cd3c4a0" - }, - "highr": { - "Package": "highr", - "Version": "0.11", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "d65ba49117ca223614f71b60d85b8ab7" - }, - "hms": { - "Package": "hms", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "b59377caa7ed00fa41808342002138f9" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.8.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "base64enc", - "digest", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "81d371a9cc60640e74e4ab6ac46dcedc" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "knitr", - "rmarkdown", - "yaml" - ], - "Hash": "04291cc45198225444a397606810ac37" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.15", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "d55aa087c47a63ead0f6fc10f8fa1ee0" - }, - "httr2": { - "Package": "httr2", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "cli", - "curl", - "glue", - "lifecycle", - "magrittr", - "openssl", - "rappdirs", - "rlang", - "vctrs", - "withr" - ], - "Hash": "836e9564fbeca3bb390bb429a53cd401" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6154ec2223172bce8162d4153cda21f7" - }, - "isoband": { - "Package": "isoband", - "Version": "0.2.7", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grid", - "utils" - ], - "Hash": "0080607b4a1a7b28979aecef976d8bc2" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods" - ], - "Hash": "4e993b65c2c3ffbffce7bb3e2c6f832b" - }, - "knitr": { - "Package": "knitr", - "Version": "1.48", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "acf380f300c721da9fde7df115a5f86f" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "b64ec208ac5bc1852b285f665d6368b3" - }, - "later": { - "Package": "later", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Rcpp", - "rlang" - ], - "Hash": "a3e051d405326b8b0012377434c62b37" - }, - "lattice": { - "Package": "lattice", - "Version": "0.22-6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "stats", - "utils" - ], - "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "d908914ae53b04d4c0c0fd72ecc35370" - }, - "leaflet": { - "Package": "leaflet", - "Version": "2.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "RColorBrewer", - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "leaflet.providers", - "magrittr", - "methods", - "png", - "raster", - "scales", - "sp", - "stats", - "viridisLite", - "xfun" - ], - "Hash": "ca012d4a706e21ce217ba15f22d402b2" - }, - "leaflet.extras": { - "Package": "leaflet.extras", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "htmltools", - "htmlwidgets", - "leaflet", - "magrittr", - "stringr" - ], - "Hash": "1626fb22ec9e788f66c1d08fd863da4c" - }, - "leaflet.providers": { - "Package": "leaflet.providers", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "htmltools" - ], - "Hash": "c0b81ad9d5d932772f7a457ac398cf36" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "b8552d117e1b808b09a832f589b79035" - }, - "lpSolve": { - "Package": "lpSolve", - "Version": "5.6.21", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "730a90bdc519fb0caff03df11218ddd8" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "7ce2733a9826b3aeb1775d56fd305472" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "mgcv": { - "Package": "mgcv", - "Version": "1.9-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "nlme", - "splines", - "stats", - "utils" - ], - "Hash": "110ee9d83b496279960e162ac97764ce" - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "tools" - ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" - }, - "munsell": { - "Package": "munsell", - "Version": "0.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "colorspace", - "methods" - ], - "Hash": "4fd8900853b746af55b81fda99da7695" - }, - "nlme": { - "Package": "nlme", - "Version": "3.1-164", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "lattice", - "stats", - "utils" - ], - "Hash": "a623a2239e642806158bc4dc3f51565d" - }, - "nnet": { - "Package": "nnet", - "Version": "7.3-19", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "2c797b46eea7fb58ede195bc0b1f1138" - }, - "openssl": { - "Package": "openssl", - "Version": "2.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "askpass" - ], - "Hash": "d413e0fef796c9401a4419485f709ca1" - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.4.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "desc", - "processx" - ], - "Hash": "a29e8e134a460a01e0ca67a4763c595b" - }, - "pkgcache": { - "Package": "pkgcache", - "Version": "2.2.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "curl", - "filelock", - "jsonlite", - "processx", - "tools", - "utils" - ], - "Hash": "502554da4ec4d917b737e6b0fe14dd11" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "pkgdepends": { - "Package": "pkgdepends", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "curl", - "desc", - "filelock", - "jsonlite", - "lpSolve", - "pkgbuild", - "pkgcache", - "processx", - "ps", - "stats", - "utils", - "zip" - ], - "Hash": "eb7e3e965327555a527196d26d0643e4" - }, - "png": { - "Package": "png", - "Version": "0.1-8", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "bd54ba8a0a5faded999a7aab6e46b374" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" - }, - "processx": { - "Package": "processx", - "Version": "3.8.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "0c90a7d71988856bad2a2a45dd871bb9" - }, - "progress": { - "Package": "progress", - "Version": "1.2.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "f4625e061cb2865f111b47ff163a5ca6" - }, - "promises": { - "Package": "promises", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "Rcpp", - "fastmap", - "later", - "magrittr", - "rlang", - "stats" - ], - "Hash": "434cd5388a3979e74be5c219bcd6e77d" - }, - "ps": { - "Package": "ps", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "4b9c8485b0c7eecdf0a9ba5132a45576" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" - }, - "raster": { - "Package": "raster", - "Version": "3.6-26", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "methods", - "sp", - "terra" - ], - "Hash": "7d6eda494f34a644420ac1bfd2a8023a" - }, - "renv": { - "Package": "renv", - "Version": "1.0.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "ef233f0e9064fc88c898b340c9add5c2" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.28", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bslib", - "evaluate", - "fontawesome", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "062470668513dcda416927085ee9bdc7" - }, - "rpart": { - "Package": "rpart", - "Version": "4.1.23", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats" - ], - "Hash": "b3d390424f41d04174cccf84d49676c2" - }, - "sass": { - "Package": "sass", - "Version": "0.4.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "d53dbfddf695303ea4ad66f86e99b95d" - }, - "scales": { - "Package": "scales", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "RColorBrewer", - "cli", - "farver", - "glue", - "labeling", - "lifecycle", - "munsell", - "rlang", - "viridisLite" - ], - "Hash": "c19df082ba346b0ffa6f833e92de34d1" - }, - "shiny": { - "Package": "shiny", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "commonmark", - "crayon", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "6a293995a66e12c48d13aa1f957d09c7" - }, - "shinyWidgets": { - "Package": "shinyWidgets", - "Version": "0.8.7", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bslib", - "grDevices", - "htmltools", - "jsonlite", - "rlang", - "sass", - "shiny" - ], - "Hash": "fd8239886f70daa85c36596214958451" - }, - "shinylive": { - "Package": "shinylive", - "Version": "0.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "archive", - "brio", - "cli", - "fs", - "gh", - "glue", - "httr2", - "jsonlite", - "pkgdepends", - "progress", - "rappdirs", - "renv", - "rlang", - "tools", - "whisker", - "withr" - ], - "Hash": "224c8c0502bb0ead1fd1b4b32ea04a90" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "5f5a7629f956619d519205ec475fe647" - }, - "sp": { - "Package": "sp", - "Version": "2.1-4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "75940133cca2e339afce15a586f85b11" - }, - "spatial": { - "Package": "spatial", - "Version": "7.3-17", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "stats", - "utils" - ], - "Hash": "1229a01b4ec059e9f2396724f2ec9010" - }, - "stringi": { - "Package": "stringi", - "Version": "1.8.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "39e1144fd75428983dc3f63aa53dfa91" - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ], - "Hash": "960e2ae9e09656611e0b8214ad543207" - }, - "survival": { - "Package": "survival", - "Version": "3.6-4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "splines", - "stats", - "utils" - ], - "Hash": "e6e3071f471513e4b85f98ca041303c7" - }, - "sys": { - "Package": "sys", - "Version": "3.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "3a1be13d68d47a8cd0bfd74739ca1555" - }, - "terra": { - "Package": "terra", - "Version": "1.7-78", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "methods" - ], - "Hash": "8f020def0792119cb98bd8f696dab22d" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "a84e2cc86d07289b3b6f5069df7a004c" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "829f27b9c4919c16b593794a6344d6c0" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.53", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "xfun" - ], - "Hash": "9db859e8aabbb474293dde3097839420" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "62b65c52671e6665f803ff02954446e9" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "c03fa420630029418f7e6da3667aac4a" - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c6abfa47a46d281a7d5159d0a8891e88" - }, - "withr": { - "Package": "withr", - "Version": "3.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics" - ], - "Hash": "07909200e8bbe90426fbfeb73e1e27aa" - }, - "xfun": { - "Package": "xfun", - "Version": "0.47", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "stats", - "tools" - ], - "Hash": "36ab21660e2d095fef0d83f689e0477c" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.10", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "51dab85c6c98e50a18d7551e9d49f76c" - }, - "zip": { - "Package": "zip", - "Version": "2.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "fcc4bd8e6da2d2011eb64a5e5cc685ab" - } - } -} diff --git a/r/shinylive_demo/shinylive_demo.Rproj b/r/shinylive_demo/shinylive_demo.Rproj deleted file mode 100644 index 8e3c2eb..0000000 --- a/r/shinylive_demo/shinylive_demo.Rproj +++ /dev/null @@ -1,13 +0,0 @@ -Version: 1.0 - -RestoreWorkspace: Default -SaveWorkspace: Default -AlwaysSaveHistory: Default - -EnableCodeIndexing: Yes -UseSpacesForTab: Yes -NumSpacesForTab: 2 -Encoding: UTF-8 - -RnwWeave: Sweave -LaTeX: pdfLaTeX diff --git a/r/simple_plot/renv.lock b/r/simple_plot/renv.lock deleted file mode 100644 index be84633..0000000 --- a/r/simple_plot/renv.lock +++ /dev/null @@ -1,833 +0,0 @@ -{ - "R": { - "Version": "4.4.0", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - } - ] - }, - "Packages": { - "MASS": { - "Package": "MASS", - "Version": "7.3-60.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "methods", - "stats", - "utils" - ], - "Hash": "2f342c46163b0b54d7b64d1f798e2c78" - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.7-0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "1920b2f11133b12350024297d8a4ff4a" - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" - }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "45f0398006e83a5b10b72a90663d8d8c" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.13", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "f27411eb6d9c3dada5edd444b8416675" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "543776ae6848fde2f48ff3816d0628bc" - }, - "bslib": { - "Package": "bslib", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "base64enc", - "cachem", - "fastmap", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "lifecycle", - "memoise", - "mime", - "rlang", - "sass" - ], - "Hash": "b299c6741ca9746fb227debcb0f9fb6c" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cd9a672193789068eb5a2aad65a0dedf" - }, - "cli": { - "Package": "cli", - "Version": "3.6.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "b21916dd77a27642b447374a5d30ecf3" - }, - "colorspace": { - "Package": "colorspace", - "Version": "2.1-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "methods", - "stats" - ], - "Hash": "d954cb1c57e8d8b756165d7ba18aa55a" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "ab12c7b080a57475248a30f4db6298c0" - }, - "digest": { - "Package": "digest", - "Version": "0.6.37", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "33698c4b3127fc9f506654607fb73676" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "6b567375113ceb7d9f800de4dd42218e" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "962174cf2aeb5b9eea581522286a911f" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "680887028577f3fa2a81e410ed0d6e42" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "aa5e1cd11c2d15497494c5292d7ffcc8" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "c2efdd5f0bcd1ea861c2d4e2a883a67d" - }, - "fs": { - "Package": "fs", - "Version": "1.6.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "15aeb8c27f5ea5161f9f6a641fafd93a" - }, - "ggplot2": { - "Package": "ggplot2", - "Version": "3.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "MASS", - "R", - "cli", - "glue", - "grDevices", - "grid", - "gtable", - "isoband", - "lifecycle", - "mgcv", - "rlang", - "scales", - "stats", - "tibble", - "vctrs", - "withr" - ], - "Hash": "44c6a2f8202d5b7e878ea274b1092426" - }, - "glue": { - "Package": "glue", - "Version": "1.7.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "methods" - ], - "Hash": "e0b3a53876554bd45879e596cdb10a52" - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "grid", - "lifecycle", - "rlang" - ], - "Hash": "e18861963cbc65a27736e02b3cd3c4a0" - }, - "highr": { - "Package": "highr", - "Version": "0.11", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "d65ba49117ca223614f71b60d85b8ab7" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.8.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "base64enc", - "digest", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "81d371a9cc60640e74e4ab6ac46dcedc" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "knitr", - "rmarkdown", - "yaml" - ], - "Hash": "04291cc45198225444a397606810ac37" - }, - "isoband": { - "Package": "isoband", - "Version": "0.2.7", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "grid", - "utils" - ], - "Hash": "0080607b4a1a7b28979aecef976d8bc2" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "methods" - ], - "Hash": "4e993b65c2c3ffbffce7bb3e2c6f832b" - }, - "knitr": { - "Package": "knitr", - "Version": "1.48", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "acf380f300c721da9fde7df115a5f86f" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "graphics", - "stats" - ], - "Hash": "b64ec208ac5bc1852b285f665d6368b3" - }, - "lattice": { - "Package": "lattice", - "Version": "0.22-6", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "stats", - "utils" - ], - "Hash": "cc5ac1ba4c238c7ca9fa6a87ca11a7e2" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "d908914ae53b04d4c0c0fd72ecc35370" - }, - "leaflet": { - "Package": "leaflet", - "Version": "2.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "RColorBrewer", - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "leaflet.providers", - "magrittr", - "methods", - "png", - "raster", - "scales", - "sp", - "stats", - "viridisLite", - "xfun" - ], - "Hash": "ca012d4a706e21ce217ba15f22d402b2" - }, - "leaflet.extras": { - "Package": "leaflet.extras", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "htmltools", - "htmlwidgets", - "leaflet", - "magrittr", - "stringr" - ], - "Hash": "1626fb22ec9e788f66c1d08fd863da4c" - }, - "leaflet.providers": { - "Package": "leaflet.providers", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "htmltools" - ], - "Hash": "c0b81ad9d5d932772f7a457ac398cf36" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "b8552d117e1b808b09a832f589b79035" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "7ce2733a9826b3aeb1775d56fd305472" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "mgcv": { - "Package": "mgcv", - "Version": "1.9-1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "Matrix", - "R", - "graphics", - "methods", - "nlme", - "splines", - "stats", - "utils" - ], - "Hash": "110ee9d83b496279960e162ac97764ce" - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "tools" - ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" - }, - "munsell": { - "Package": "munsell", - "Version": "0.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "colorspace", - "methods" - ], - "Hash": "4fd8900853b746af55b81fda99da7695" - }, - "nlme": { - "Package": "nlme", - "Version": "3.1-164", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "graphics", - "lattice", - "stats", - "utils" - ], - "Hash": "a623a2239e642806158bc4dc3f51565d" - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "png": { - "Package": "png", - "Version": "0.1-8", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "bd54ba8a0a5faded999a7aab6e46b374" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" - }, - "raster": { - "Package": "raster", - "Version": "3.6-26", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "methods", - "sp", - "terra" - ], - "Hash": "7d6eda494f34a644420ac1bfd2a8023a" - }, - "renv": { - "Package": "renv", - "Version": "1.0.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "utils" - ], - "Hash": "ef233f0e9064fc88c898b340c9add5c2" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "utils" - ], - "Hash": "3eec01f8b1dee337674b2e34ab1f9bc1" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.28", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "bslib", - "evaluate", - "fontawesome", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "062470668513dcda416927085ee9bdc7" - }, - "sass": { - "Package": "sass", - "Version": "0.4.9", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "d53dbfddf695303ea4ad66f86e99b95d" - }, - "scales": { - "Package": "scales", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "R6", - "RColorBrewer", - "cli", - "farver", - "glue", - "labeling", - "lifecycle", - "munsell", - "rlang", - "viridisLite" - ], - "Hash": "c19df082ba346b0ffa6f833e92de34d1" - }, - "sp": { - "Package": "sp", - "Version": "2.1-4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics", - "grid", - "lattice", - "methods", - "stats", - "utils" - ], - "Hash": "75940133cca2e339afce15a586f85b11" - }, - "stringi": { - "Package": "stringi", - "Version": "1.8.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "39e1144fd75428983dc3f63aa53dfa91" - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ], - "Hash": "960e2ae9e09656611e0b8214ad543207" - }, - "terra": { - "Package": "terra", - "Version": "1.7-78", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "Rcpp", - "methods" - ], - "Hash": "8f020def0792119cb98bd8f696dab22d" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "a84e2cc86d07289b3b6f5069df7a004c" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.53", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "xfun" - ], - "Hash": "9db859e8aabbb474293dde3097839420" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.4", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "62b65c52671e6665f803ff02954446e9" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.5", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "c03fa420630029418f7e6da3667aac4a" - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" - }, - "withr": { - "Package": "withr", - "Version": "3.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "graphics" - ], - "Hash": "07909200e8bbe90426fbfeb73e1e27aa" - }, - "xfun": { - "Package": "xfun", - "Version": "0.47", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R", - "grDevices", - "stats", - "tools" - ], - "Hash": "36ab21660e2d095fef0d83f689e0477c" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.10", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "51dab85c6c98e50a18d7551e9d49f76c" - } - } -} diff --git a/r/simple_plot/simple_plot.Rproj b/r/simple_plot/simple_plot.Rproj deleted file mode 100644 index 8e3c2eb..0000000 --- a/r/simple_plot/simple_plot.Rproj +++ /dev/null @@ -1,13 +0,0 @@ -Version: 1.0 - -RestoreWorkspace: Default -SaveWorkspace: Default -AlwaysSaveHistory: Default - -EnableCodeIndexing: Yes -UseSpacesForTab: Yes -NumSpacesForTab: 2 -Encoding: UTF-8 - -RnwWeave: Sweave -LaTeX: pdfLaTeX diff --git a/run_quarto_publish.sh b/run_quarto_publish.sh new file mode 100644 index 0000000..aae22b3 --- /dev/null +++ b/run_quarto_publish.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# Activate the virtual environment +source /opt/venv/bin/activate +echo 'activated virtualenv.' + +# Run the Quarto extension installation +chmod +x /workspace/r/install_quarto_extensions.expect +/workspace/r/install_quarto_extensions.expect +quarto list extensions + +# Check Quarto and Rscript status +echo 'Check Quarto status:' +quarto check +echo 'Check R script path:' +which Rscript + +# Define folders to process +FOLDERS=(python r) +echo "Folders to process: ${FOLDERS[@]}" + +conda update conda +echo "Update conda" + +# Process .qmd and .ipynb files in the specified folders +for FOLDER in "${FOLDERS[@]}"; do + echo "Searching for .qmd and .ipynb files in /workspace/$FOLDER..." + find "/workspace/$FOLDER" \( -name '*.qmd' -o -name '*.ipynb' \) | while read -r file; do + + echo "Processing file: $file" + # Remove the /workspace prefix from the file path + relative_dir=$(dirname "${file#'/workspace/'}") + + # Create a virtual environment inside each folder under .venv + if [[ "$FOLDER" == "python" ]]; then + venv_path="/workspace/$relative_dir/.venv" + echo "Creating virtual environment at: $venv_path" + python3 -m venv "$venv_path" + source "$venv_path/bin/activate" + echo "Activated virtual environment in $venv_path" + + # Install requirements if there is a requirements.txt + if [[ -f "/workspace/$relative_dir/requirements.txt" ]]; then + pip install -r "/workspace/$relative_dir/requirements.txt" + fi + fi + + # Create a Conda environment for R folders + if [[ "$FOLDER" == "r" ]]; then + conda_env_name=$(echo "$relative_dir" | sed 's/\//_/g')_conda_env + echo "Creating Conda environment: $conda_env_name" + + if [[ -f "/workspace/$relative_dir/environment.yml" ]]; then + echo "Found environment.yml. Creating environment from file..." + conda env create -n "$conda_env_name" -f "/workspace/$relative_dir/environment.yml" + else + echo "environment.yml not found. Creating a minimal Conda environment with R..." + conda create -y -n "$conda_env_name" r-base=4.4.1 # Create a minimal Conda environment with R + fi + source activate "$conda_env_name" + echo "Activated Conda environment: $conda_env_name" + R -e '.libPaths(c("/usr/local/lib/R/site-library", .libPaths()))' + + # Run install_packages.R if it exists + if [[ -f "/workspace/$relative_dir/install_packages.R" ]]; then + Rscript "/workspace/$relative_dir/install_packages.R" + fi + fi + + # Install extensions in the folder + # TODO: investigate smarter way to install gobally + pushd $relative_dir + /workspace/r/install_quarto_extensions.expect + popd + + # Define the target directory for the output + target_dir="/workspace/gallery/$relative_dir" + echo "Creating target directory: $target_dir" + mkdir -p "$target_dir" && echo "Directory $target_dir created." + + # Attempt to render the file with execution + echo "Attempting to render $file with execution..." + if quarto render "$file" --to html --output-dir "$target_dir"; then + echo "Successfully rendered $file with execution." + else + echo "Failed to render $file with execution. Rendering without execution..." + if quarto render "$file" --to html --no-execute --output-dir "$target_dir"; then + echo "Successfully rendered $file without execution." + else + echo "Rendering failed for $file, even without execution." + fi + fi + + # Deactivate and delete virtual environment for Python folders + if [[ "$FOLDER" == "python" ]]; then + deactivate + echo "Deactivated virtual environment: $venv_path" + rm -rf "$venv_path" + echo "Deleted virtual environment: $venv_path" + fi + + # Deactivate and delete the Conda environment for R folders + if [[ "$FOLDER" == "r" ]]; then + conda deactivate + conda remove -y --name "$conda_env_name" --all + echo "Deleted Conda environment: $conda_env_name" + fi + + done +done