From 00cf504ccfb1d7ef4a656293117cff0a35a9c204 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 15:18:08 -0400 Subject: [PATCH 01/36] Refactor scripts to use .Renviron for credentials and add Shiny app Changes: - Update get_dataframe.R and results_analysis.R to load credentials from .Renviron - Add interactive prompting for analysis keys (changes per run) - Fix subdomain parsing bug that doubled .benchling.com suffix - Add better error handling and progress indicators - Create .Renviron.example template for credential configuration - Add Shiny web app (app.R) as alternative interface - Add test_ic50_locally.R for testing without Benchling credentials - Create comprehensive documentation (CLAUDE.md, SETUP_GUIDE.md) - Add .gitignore to protect credentials and output files - Initialize renv for dependency management Benefits: - Credentials no longer hardcoded in scripts (security improvement) - Analysis keys prompted at runtime (more flexible workflow) - Both command-line and web UI options available - Better documentation for setup and troubleshooting --- .Renviron.example | 15 + .gitignore | 35 + CLAUDE.md | 211 ++ README.md | 47 +- SETUP_GUIDE.md | 381 ++++ app.R | 336 ++++ get_dataframe.R | 165 +- renv.lock | 4483 +++++++++++++++++++++++++++++++++++++++++++ renv/.gitignore | 7 + renv/activate.R | 1438 ++++++++++++++ renv/settings.json | 20 + results_analysis.R | 403 ++-- test_ic50_locally.R | 127 ++ 13 files changed, 7491 insertions(+), 177 deletions(-) create mode 100644 .Renviron.example create mode 100644 .gitignore create mode 100644 CLAUDE.md create mode 100644 SETUP_GUIDE.md create mode 100644 app.R create mode 100644 renv.lock create mode 100644 renv/.gitignore create mode 100644 renv/activate.R create mode 100644 renv/settings.json create mode 100644 test_ic50_locally.R diff --git a/.Renviron.example b/.Renviron.example new file mode 100644 index 0000000..0e2e278 --- /dev/null +++ b/.Renviron.example @@ -0,0 +1,15 @@ +# Benchling API Configuration +# Copy this file to .Renviron and fill in your actual values +# DO NOT commit .Renviron to git - it should be in .gitignore + +# Benchling App Credentials (from Developer Console → Apps) +# These are REQUIRED and stay the same across all analyses +BENCHLING_CLIENT_ID=your_client_id_here +BENCHLING_CLIENT_SECRET=your_client_secret_here + +# Analysis Configuration (OPTIONAL) +# The script will prompt you for the analysis key when you run it. +# This is recommended since the analysis key changes for each analysis run. +# +# If you prefer to set it here (not recommended), uncomment the line below: +# BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb9fcbd --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# Credentials and Environment Variables +.Renviron +.Rprofile + +# R Data files +*.RData +*.Rhistory +*.rda +*.rds + +# Output files from scripts +mortality.csv +mortality_24h.html +test_mortality_results.csv +test_mortality_24h.html + +# RStudio project files +.Rproj.user/ +*.Rproj + +# Shiny +rsconnect/ +.shiny_app_cache/ + +# macOS +.DS_Store + +# IDE +.vscode/ +.idea/ + +# Temporary files +*.tmp +*.bak +*~ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..a95b017 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,211 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This repository contains sample R scripts demonstrating integration with Benchling's API for dataset analysis workflows. The code retrieves datasets from Benchling analyses, performs IC50 calculations, generates visualizations, and uploads results back to Benchling. + +**Purpose:** Educational example code showing how to work with Benchling datasets using R. Not intended for production use. + +## Main Scripts + +- **`get_dataframe.R`** - Authenticates with Benchling and downloads dataset from an analysis +- **`results_analysis.R`** - Performs IC50 calculation, creates plot, uploads results to Benchling +- **`test_ic50_locally.R`** - Test IC50 calculation locally without Benchling credentials +- **`app.R`** - Shiny web app for IC50 analysis with UI + +**Configuration:** All scripts use `.Renviron` for credentials. Command-line scripts prompt for analysis key; Shiny app provides text input. + +## Environment & Dependencies + +### R Environment Management +- Uses `renv` for dependency management (R 4.5.3) +- To restore the environment: `Rscript -e "renv::restore()"` +- To install new packages: `Rscript -e "renv::install('')"` +- To update the lockfile after adding packages: `Rscript -e "renv::snapshot()"` +- For Shiny app, also install: `renv::install(c('shiny', 'shinythemes', 'shinycssloaders', 'digest', 'dplyr'))` + +### Key Dependencies +- `httr` - HTTP client for Benchling API calls +- `jsonlite` - JSON parsing for API requests/responses +- `base64enc` - Decoding JWT tokens from analysis keys +- `drc` - Dose-response curve fitting (IC50 calculations) +- `plotly` - Interactive plot generation +- `htmlwidgets` - HTML plot export +- `pracma` - Mathematical functions (linspace for curve plotting) +- `rstudioapi` - Getting script paths +- `shiny` - Web application framework (for app.R) +- `shinythemes` - UI themes for Shiny apps +- `shinycssloaders` - Loading spinners for Shiny +- `digest` - MD5 hashing (Shiny app only) +- `dplyr` - Data manipulation (Shiny app only) + +## Configuration Requirements + +⚠️ **For detailed setup instructions, see `SETUP_GUIDE.md`** - it contains step-by-step guidance for Benchling configuration and credential setup. + +### Configuration Steps + +1. **Create `.Renviron` file:** + ```bash + cp .Renviron.example .Renviron + ``` + +2. **Edit `.Renviron` with your app credentials:** + ```bash + BENCHLING_CLIENT_ID=your_client_id + BENCHLING_CLIENT_SECRET=your_client_secret + ``` + +3. **Analysis Key:** The script will **prompt you for the analysis key** when you run it. This is recommended since the key changes for each analysis run. + +4. **Verify `.Renviron` is gitignored** (already included in `.gitignore`) + +### Prerequisites in Benchling: +1. **Benchling App** - Create in Developer Console → Apps (provides client_id and client_secret) +2. **App Permissions** - Grant scopes: analyses:read/write, data-frames:read/write, files:read/write +3. **Benchling Analysis** - Create with input dataset attached +4. **Analysis Key** - Generate from the analysis (format: `ana_XXXXX:eyJhbGc...`) +5. **Input Dataset** - Must have columns: `Cell.Mortality.Concentration`, `Cell.Mortality.Mortality.24h`, `Cell.Line.Name` + +## Script Architecture & Workflow + +### Script 1: `get_dataframe.R` +**Purpose:** Authenticate with Benchling and retrieve a dataset from an analysis. + +**Flow:** +1. Parse `analysis_key` JWT to extract tenant subdomain and analysis ID +2. Generate OAuth2 bearer token using client credentials (expires after 900 seconds) +3. Call `GET /api/v2-beta/analyses/{analysis_id}` to retrieve dataframe ID +4. Call `GET /api/v2-beta/data-frames/{dataframe_id}` to get CSV download URL +5. Load CSV into R dataframe (`df`) + +**Output:** Populates `df` variable with dataset, plus `subdomain`, `analysis_id`, `access_token`, `folder_id` for use in next script. + +### Script 2: `results_analysis.R` +**Purpose:** Perform IC50 calculation on dataset and upload results to Benchling. + +**Prerequisites:** Requires variables from `get_dataframe.R` to be in environment: +- `df` - Input dataframe with columns `Cell.Mortality.Concentration` and `Cell.Mortality.Mortality.24h` +- `subdomain`, `analysis_id`, `access_token`, `folder_id` + +**Flow:** +1. **Calculate IC50:** Fit 4-parameter log-logistic model (`LL.4`) to dose-response data using `drc::drm()` +2. **Generate CSV results:** Extract model coefficients (IC50, slope, std, t-value, p-value) into dataframe +3. **Upload CSV to Benchling:** + - `POST /api/v2-beta/data-frames` - Create dataframe resource + - `PUT {s3_url}` - Upload CSV to S3 bucket (requires `x-amz-server-side-encryption: AES256` header) + - `PATCH /api/v2-beta/data-frames/{id}` - Mark upload as `IN_PROGRESS` +4. **Generate HTML plot:** Create interactive plotly visualization with scatter points and fitted curve +5. **Upload plot to Benchling:** + - `POST /api/v2-beta/files` - Create file resource + - `PUT {s3_url}` - Upload HTML to S3 + - `PATCH /api/v2-beta/files/{id}` - Mark upload as `SUCCEEDED` +6. **Attach outputs to analysis:** `PATCH /api/v2-beta/analyses/{id}` with `fileIds` and `dataFrameIds` + +**Output:** Creates `mortality.csv` and `mortality_24h.html` locally, uploads both to Benchling analysis. + +## Running the Scripts + +**⚠️ Critical:** The scripts must be run **sequentially in the same R session** because `results_analysis.R` depends on variables created by `get_dataframe.R`. + +After configuring `.Renviron`, run the scripts. You'll be **prompted for your analysis key**: + +**Option 1: RStudio / Interactive R (Recommended)** +```r +source('get_dataframe.R') # Will prompt: "Analysis Key: " + # Paste: ana_XXXXX:eyJhbGc... +ls() # Verify: df, subdomain, analysis_id, access_token, folder_id +head(df) # Check data loaded correctly +source('results_analysis.R') +``` + +**Option 2: Non-Interactive (set key in environment first)** +```bash +# Temporarily set the key for this run +export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." +Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" +``` + +**Timing Note:** Bearer tokens expire after 15 minutes. If you wait too long between scripts, re-run the first script to refresh the token. + +### Local Testing (No Benchling Required) + +### Using the Shiny App + +After configuring `.Renviron`, launch the web interface: + +```r +shiny::runApp("app.R") +``` + +Or in RStudio: Open `app.R` and click "Run App" + +The app provides: +1. Text input for analysis key +2. "Get Dataset" button - downloads and displays data +3. "Send Analysis" button - calculates IC50 and uploads results + +### Local Testing (No Benchling Required) +To test the IC50 calculation and plotting logic without Benchling credentials: +```bash +Rscript test_ic50_locally.R +``` + +This script: +- Loads `Mortality IC50.csv` sample data +- Performs IC50 calculation using 4-parameter log-logistic model +- Generates results CSV (`test_mortality_results.csv`) +- Creates interactive HTML plot (`test_mortality_24h.html`) + +**Note:** The sample CSV column names differ from what `results_analysis.R` expects. The test script handles this automatically, but if using `results_analysis.R` directly with local data, you'll need to rename columns to match: +- `Concentration` → `Cell.Mortality.Concentration` +- `Mortality 24h` → `Cell.Mortality.Mortality.24h` +- Add `Cell.Line.Name` column + +## API Notes + +### Authentication +- Bearer tokens expire after 900 seconds (15 minutes) +- Token generation requires `client_id` and `client_secret` via OAuth2 client credentials flow +- All API calls require `Authorization: Bearer {access_token}` header + +### File Upload Pattern +1. Create resource via POST (dataframe or file) - returns S3 presigned URL +2. Upload binary data to S3 URL with encryption header +3. Update resource status via PATCH (IN_PROGRESS → SUCCEEDED) + +### Expected Data Format +The IC50 calculation expects a dataframe with columns: +- `Cell.Mortality.Concentration` - Drug concentration values +- `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours +- `Cell.Line.Name` - Cell line identifier (used in output) + +Sample data format is demonstrated in `Mortality IC50.csv`. + +## Common Issues & Solutions + +**"Variables not found" in results_analysis.R** +- Ensure `get_dataframe.R` was run first in the **same R session** +- Required variables: `df`, `subdomain`, `analysis_id`, `access_token`, `folder_id` + +**"HTTP 401 Unauthorized"** +- Verify `client_id` and `client_secret` are correct +- Check app has required permissions (analyses, data-frames, files: read/write) + +**"HTTP 404 Not Found"** +- Confirm `analysis_id` is correct (check Benchling URL) +- Ensure analysis exists and you have access + +**"Bearer token expired"** +- Tokens last 900 seconds (15 minutes) +- Re-run `get_dataframe.R` to generate fresh token + +**"Upload to S3 unsuccessful"** +- Check `x-amz-server-side-encryption: AES256` header is present +- Verify file/dataframe was created successfully before upload + +**Missing packages** +- Run `renv::restore()` or `renv::install('')` +- May need to install CMake first: `brew install cmake` (macOS) diff --git a/README.md b/README.md index 16b01b5..4528cf1 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,42 @@ Provided for educational purposes only; not for production use. ## Configuration and Setup 1. Create a [Benchling App](https://docs.benchling.com/docs/getting-started-benchling-apps) 2. Create a [Benchling Analysis](https://help.benchling.com/hc/en-us/articles/15298157390861-Creating-an-analysis) -3. Configure the sample script(s) with your tenant-specific variables +3. Configure credentials: + - Copy `.Renviron.example` to `.Renviron` and add your `BENCHLING_CLIENT_ID` and `BENCHLING_CLIENT_SECRET` + - The script will prompt you for the analysis key when you run it + +📖 **See `SETUP_GUIDE.md` for detailed step-by-step instructions** ## Usage -* `get_dataframe.R` pulls the input dataset from a Benchling analysis and converts it into an R dataframe. -* `results_analysis.R` performs an IC50 calculation on a dataframe, creates a plot, and imports both -as outputs to a Benchling analysis. -* `Mortality IC50.csv` contains basic sample data of the form required by `results_analysis.R` - -It's recommended to start by working with `get_dataframe.R` and `results_analysis.R` in order to familiarize -yourself with the principles involved. For best results, these should be run sequentially, since the latter expects -a dataframe to be imported. Once you're confident using the scripts and with the configuration in Benchling, the -techniques involved can be applied to more robust applications using tools like Rshiny. + +### Script Files +* `get_dataframe.R` - Pulls input dataset from Benchling using `.Renviron` configuration +* `results_analysis.R` - Performs IC50 calculation, creates plot, and uploads to Benchling +* `app.R` - Shiny web app with UI for IC50 analysis +* `test_ic50_locally.R` - Test IC50 calculation without Benchling (uses `Mortality IC50.csv`) +* `Mortality IC50.csv` - Example dose-response data + +### Getting Started + +**Option 1: Shiny Web App (Easiest)** +```r +shiny::runApp("app.R") # Opens web interface +``` + +**Option 2: Command Line Scripts** +```r +source('get_dataframe.R') # Will prompt for analysis key +source('results_analysis.R') +``` + +**Option 3: Local Testing Only** +```bash +Rscript test_ic50_locally.R # No Benchling credentials needed +``` + +⚠️ **Important:** +- Configure `.Renviron` with your client ID and secret first +- Scripts must run sequentially in the same R session +- The script will prompt you for the analysis key (it changes per analysis) + +Once you're confident with the workflow, these techniques can be applied to more robust applications using tools like Shiny. diff --git a/SETUP_GUIDE.md b/SETUP_GUIDE.md new file mode 100644 index 0000000..387f16a --- /dev/null +++ b/SETUP_GUIDE.md @@ -0,0 +1,381 @@ +# Complete Setup Guide for Benchling R Integration + +This guide walks you through setting up and running the Benchling dataset integration scripts from scratch. + +## Prerequisites + +- R 4.5.3+ installed +- Access to a Benchling tenant with appropriate permissions +- Admin access to create Benchling Apps +- Access to Benchling Analyses feature + +## Part 1: Benchling Configuration + +### Step 1: Create a Benchling App + +A Benchling App provides the OAuth2 credentials needed to authenticate API requests. + +1. **Navigate to Apps Settings:** + - Log into your Benchling tenant: `https://.benchling.com` + - Go to **Settings** → **Developer Console** → **Apps** + +2. **Create New App:** + - Click **"Create App"** + - Fill in the required fields: + - **App Name:** e.g., "R Analysis Integration" + - **Description:** e.g., "R scripts for IC50 analysis" + - **Redirect URLs:** Not needed for this use case (server-to-server) + +3. **Configure Permissions:** + The app needs the following scopes: + - `analyses:read` - Read analysis metadata + - `analyses:write` - Update analyses with outputs + - `data-frames:read` - Read input datasets + - `data-frames:write` - Create output datasets + - `files:read` - Read file metadata + - `files:write` - Create and upload files + +4. **Get Credentials:** + - After creating the app, copy the **Client ID** and **Client Secret** + - **⚠️ Important:** Store the Client Secret securely - you won't be able to see it again + - Keep these handy for Step 3 + +### Step 2: Create a Benchling Analysis + +Analyses are where you'll attach input datasets and receive output results. + +1. **Navigate to Analyses:** + - In Benchling, go to your project or notebook + - Click **"Create"** → **"Analysis"** + +2. **Configure Analysis:** + - **Name:** e.g., "IC50 Dose-Response Calculation" + - **Description:** Optional, but helpful to explain what this analysis does + +3. **Attach Input Dataset:** + - Click **"Add Input"** → **"Dataset"** + - Select or upload a CSV dataset with your mortality data + - **Required columns:** + - `Cell.Mortality.Concentration` - Drug concentration values + - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours + - `Cell.Line.Name` - Cell line identifier + + **Example data format:** + ```csv + Cell.Mortality.Concentration,Cell.Mortality.Mortality.24h,Cell.Line.Name + 0.3,3.979,HeLa + 1.0,17.07,HeLa + 3.0,18.356,HeLa + 10.0,25.288,HeLa + 30.0,54.813,HeLa + 100.0,76.379,HeLa + 300.0,81.514,HeLa + ``` + +4. **Get the Analysis Key:** + - Once the analysis is created, you need to generate an analysis key + - This is typically available in the Analysis settings or via the Benchling UI + - The analysis key format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) + - **Note:** Analysis keys are specific to each analysis run and may need to be regenerated + +### Step 3: Alternative - Get Analysis ID Directly + +If you can't get an analysis key, you can work with the analysis ID directly: + +1. **Find Analysis ID:** + - Open your analysis in Benchling + - Look at the URL: `https://.benchling.com/analyses/ana_XXXXXXXX` + - The part after `/analyses/` is your analysis ID (e.g., `ana_XXXXXXXX`) + +2. **Get Tenant Subdomain:** + - Your subdomain is the first part of your Benchling URL + - For `https://acme-corp.benchling.com`, the subdomain is `acme-corp` + +## Part 2: Configure Environment Variables (Recommended Method) + +**⭐ This is the recommended approach** - it keeps credentials secure and out of your code. + +### Step 1: Create Your `.Renviron` File + +1. **Copy the template:** + ```bash + cp .Renviron.example .Renviron + ``` + +2. **Edit `.Renviron`** with your credentials: + ```bash + # Open in your editor + nano .Renviron + # or + code .Renviron + ``` + +3. **Fill in your values:** + ```bash + # Benchling App Credentials (from Part 1, Step 1) + BENCHLING_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + BENCHLING_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + # Analysis Key - Leave this commented out! + # The script will prompt you for it when you run it (recommended) + # since the analysis key changes for each analysis run. + # BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... + ``` + +4. **Verify `.Renviron` is in `.gitignore`:** + ```bash + # Check if .Renviron is ignored + git check-ignore .Renviron + # Should output: .Renviron + ``` + + If not, add it: + ```bash + echo ".Renviron" >> .gitignore + ``` + +### Step 2: Verify Configuration + +Open R and check your environment variables are loaded: + +```r +# Start R in your project directory +R + +# Check that variables are set +Sys.getenv("BENCHLING_CLIENT_ID") # Should show your client ID +Sys.getenv("BENCHLING_CLIENT_SECRET") # Should show your secret +``` + +**Note:** You don't need to check `BENCHLING_ANALYSIS_KEY` - the script will prompt you for it when you run it. + +If variables are empty, make sure: +- `.Renviron` is in your project root directory +- You restarted R after creating `.Renviron` +- There are no quotes around values in `.Renviron` +- There are no spaces around the `=` sign + +### Step 3: Run the Scripts + +The script will **prompt you for your analysis key** when you run it: + +**Option 1: RStudio (Recommended)** +```r +source('get_dataframe.R') # Will prompt: "Analysis Key: " + # Paste your key: ana_XXXXX:eyJhbGc... +source('results_analysis.R') # Performs analysis and uploads results +``` + +**Option 2: Interactive R** +```r +source('get_dataframe.R') +# It will prompt: "Analysis Key: " +# Paste your analysis key and press Enter + +# Verify variables exist +ls() # Should show: df, subdomain, analysis_id, access_token, folder_id +source('results_analysis.R') +``` + +**Option 3: Non-Interactive (Command Line)** +If running non-interactively, set the key in environment: +```bash +export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." +Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" +``` + +### Benefits of Using `.Renviron` + +✅ **Security:** Credentials never appear in code +✅ **Git-safe:** `.Renviron` is gitignored by default +✅ **Team-friendly:** Each developer has their own `.Renviron` +✅ **Standard:** Native R approach, no extra packages +✅ **Clean:** Better error messages and validation + +--- + +## Part 3: Install Dependencies and Run + +### Step 1: Install Dependencies + +If you haven't already installed the required packages: + +```bash +# Restore the renv environment (installs all packages) +Rscript -e "renv::restore()" + +# Or install packages individually +Rscript -e "renv::install(c('httr', 'jsonlite', 'base64enc', 'drc', 'plotly', 'htmlwidgets', 'pracma', 'rstudioapi'))" +``` + +**Note:** On macOS, you may need to install CMake first: +```bash +brew install cmake pandoc +``` + +### Step 2: Run the Workflow + +**⚠️ Important:** Scripts must run **sequentially in the same R session** because `results_analysis.R` depends on variables from `get_dataframe.R`. + +**Option A: RStudio** +```r +source('get_dataframe.R') # Loads data, prints progress +source('results_analysis.R') # Analyzes and uploads +``` + +**Option B: Command Line** +```bash +Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" +``` + +**Option C: Interactive R** +```r +source('get_dataframe.R') +ls() # Verify: df, subdomain, analysis_id, access_token, folder_id +head(df) # Check your data +source('results_analysis.R') +``` + +### Step 3: Verify Success + +The scripts will print status codes as they run: + +``` +[1] "200" # Dataframe upload successful +[1] "200" # File upload successful +[1] "200" # Analysis update successful +[1] "running" # Initial status +``` + +### Step 4: Check Benchling + +1. Go back to your Analysis in Benchling +2. You should now see two outputs: + - **Dataset:** `Mortality_IC50` - CSV with IC50 statistics + - **File:** `mortality_24h.html` - Interactive plot + +3. The analysis status should show as "Succeeded" + +## Part 4: Troubleshooting + +### Common Issues + +**Error: "HTTP 401 Unauthorized"** +- Check your `client_id` and `client_secret` are correct +- Verify your app has the necessary permissions +- Regenerate client secret if needed + +**Error: "HTTP 403 Forbidden"** +- Your app doesn't have required permissions +- Go back to App settings and add missing scopes +- You may need admin help to grant permissions + +**Error: "HTTP 404 Not Found"** +- `analysis_id` is incorrect +- Check the analysis ID in the Benchling URL +- Ensure the analysis exists and you have access + +**Error: "Bearer token expired"** +- Tokens expire after 900 seconds (15 minutes) +- Re-run `get_dataframe.R` to generate a new token +- Then immediately run `results_analysis.R` + +**Error: "Package not found"** +- Run `renv::restore()` to install all dependencies +- Or install missing packages individually with `renv::install('')` + +**Error: "No dataframe found"** +- Ensure you've attached an input dataset to your analysis +- Verify the dataset has data in it (not empty) +- Check you're using the correct analysis ID + +**Variables not found in `results_analysis.R`** +- You must run `get_dataframe.R` first in the same R session +- Variables (`df`, `subdomain`, `access_token`, etc.) are passed between scripts via the environment +- Don't start a new R session between running the two scripts + +### Checking Token Validity + +```r +# Check if access_token exists and view its contents +if (exists("access_token")) { + cat("Token exists, length:", nchar(access_token), "\n") +} else { + cat("Token not found - run get_dataframe.R first\n") +} +``` + +## Part 5: Understanding the Data Flow + +``` +┌─────────────────────────────────────────────────────────┐ +│ Benchling Analysis │ +│ │ +│ Input Dataset (CSV) ─────────────────────┐ │ +│ - Cell.Mortality.Concentration │ │ +│ - Cell.Mortality.Mortality.24h │ │ +│ - Cell.Line.Name │ │ +└────────────────────────────────────────────┼────────────┘ + │ + ▼ + ┌──────────────────┐ + │ get_dataframe.R │ + │ │ + │ 1. Authenticate │ + │ 2. Fetch dataset │ + │ 3. Load to df │ + └─────────┬────────┘ + │ + ▼ + Variables: df, subdomain, + analysis_id, access_token, folder_id + │ + ▼ + ┌──────────────────────┐ + │ results_analysis.R │ + │ │ + │ 1. Calculate IC50 │ + │ 2. Generate CSV │ + │ 3. Create plot │ + │ 4. Upload both │ + └──────────┬───────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────┐ +│ Benchling Analysis │ +│ │ +│ Output Dataset: Mortality_IC50 │ +│ - IC50 value, slope, statistics │ +│ │ +│ Output File: mortality_24h.html │ +│ - Interactive dose-response plot │ +└─────────────────────────────────────────────────────────┘ +``` + +## Next Steps + +Once you're comfortable with the basic workflow: + +1. **Customize the Analysis:** + - Modify the IC50 calculation parameters in `results_analysis.R` + - Adjust the plot styling and labels + - Add additional statistical outputs + +2. **Batch Processing:** + - Loop over multiple analyses + - Process different cell lines or conditions + +3. **Error Handling:** + - Add try-catch blocks for robust production use + - Implement retry logic for network failures + +4. **Integration with R Shiny:** + - Build interactive dashboards + - Allow users to configure parameters via UI + +## Additional Resources + +- [Benchling API Documentation](https://docs.benchling.com/docs/api-overview) +- [Benchling Apps Guide](https://docs.benchling.com/docs/getting-started-benchling-apps) +- [Benchling Analyses Guide](https://help.benchling.com/hc/en-us/articles/15298157390861) +- [Working with Datasets Using R](https://docs.benchling.com/docs/working-with-datasets-using-r) diff --git a/app.R b/app.R new file mode 100644 index 0000000..07f93fd --- /dev/null +++ b/app.R @@ -0,0 +1,336 @@ +# Load R packages +library(shiny) +library(shinythemes) +library(httr) +library(jsonlite) +library(drc) +library(base64enc) +library(digest) +library(shinycssloaders) +library(dplyr) +library(plotly) +library(htmlwidgets) +library(pracma) + +# Load credentials from .Renviron +client_id <- Sys.getenv("BENCHLING_CLIENT_ID") +client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") + +# Check credentials are set +if (client_id == "" || client_secret == "") { + stop(paste( + "Missing Benchling credentials!", + "Please ensure BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET are set in .Renviron", + sep = "\n" + )) +} + +# Define UI +ui <- fluidPage(theme = shinytheme("cerulean"), + + navbarPage( + "IC50 Calculation", + + tabPanel("Import Dataset", + + sidebarPanel( + tags$h3("Input:"), + textInput("DatasetKey", "Analysis Key:", ""), + actionButton("submitbutton", "Get Dataset", class = "btn btn-primary"), + actionButton("sendresultAnalysis", "Send Analysis", class = "btn btn-primary") + ), + + mainPanel( + tags$label(h4("Tenant Subdomain")), + verbatimTextOutput("subdomain"), + verbatimTextOutput("analysis") %>% withSpinner(color="#0dc5c1"), + tableOutput('tabledata') + ) + ), + + tabPanel("Regression Algorithm", + mainPanel( + tags$h2("4-Parameter Log-Logistic Model (LL.4)"), + tags$p("IC50 calculations use dose-response curve fitting with the drc package.") + ) + ) + ) +) + +# Define server function +server <- function(input, output) { + + # Extract subdomain from analysis key + subdomain <- reactive({ + split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) + payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) + subdomain_raw <- payload$aud + # Remove .benchling.com if present + gsub("\\.benchling\\.com$", "", subdomain_raw) + }) + + # Get dataset from Benchling + datasetInput <- reactive({ + + analysis_id <- gsub(":.*$", "", input$DatasetKey) + + # Get bearer token + api_path <- '/api/v2/token' + url <- paste("https://", subdomain(), ".benchling.com", api_path, sep = "") + + request_payload <- paste("client_id=", client_id, + "&client_secret=", client_secret, + "&grant_type=client_credentials", sep = "") + + token_request <- httr::POST( + url = url, + body = request_payload, + httr::accept('application/json'), + httr::content_type('application/x-www-form-urlencoded') + ) + + request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) + access_token <- request_body$access_token + + # Get analysis + endpoint <- "/api/v2-beta/analyses/" + URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, analysis_id, sep = "") + + analysis_req <- GET(URL, add_headers( + Accept = 'application/json', + Authorization = paste("Bearer", access_token) + )) + dat <- jsonlite::fromJSON(rawToChar(analysis_req$content)) + + datasetId <- c(dat$dataFrameIds)[1] + folder_id <- c(dat$folderId) + + # Store for later use + assign("access_token", access_token, envir = .GlobalEnv) + assign("folder_id", folder_id, envir = .GlobalEnv) + assign("analysis_id", analysis_id, envir = .GlobalEnv) + + # Get dataset + endpoint <- "/api/v2-beta/data-frames/" + URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, datasetId, sep = "") + + Dataset_req <- GET(URL, add_headers( + Accept = 'application/json', + Authorization = paste("Bearer", access_token) + )) + dat <- jsonlite::fromJSON(rawToChar(Dataset_req$content)) + + DatasetUrl <- c(dat$manifest$url) + df <- read.csv(DatasetUrl) + + df + }) + + # Process analysis and upload results + analysis <- reactive({ + + df <- datasetInput() + + # Find concentration column + conc_col <- grep("^Concentration$|Cell\\.Mortality\\.Concentration", + names(df), ignore.case = TRUE, value = TRUE)[1] + + # Find mortality columns + mort_24h_col <- grep("Mortality\\.24h|Mortality.24h", + names(df), ignore.case = TRUE, value = TRUE)[1] + mort_48h_col <- grep("Mortality\\.48h|Mortality.48h", + names(df), ignore.case = TRUE, value = TRUE)[1] + + # Calculate IC50 for 24h + formula_24 <- as.formula(paste(mort_24h_col, "~", conc_col)) + model_24h <- drm(formula_24, data = df, + fct = LL.4(fixed = c(NA, 0, 100, NA), + names = c("Slope", "LS Inferior", "LS Superior", "IC50"))) + + summary_24 <- summary(model_24h) + IC50_24 <- round(summary_24$coefficients[2], 2) + slope_24 <- round(summary_24$coefficients[1], 2) + + # Calculate IC50 for 48h + formula_48 <- as.formula(paste(mort_48h_col, "~", conc_col)) + model_48h <- drm(formula_48, data = df, + fct = LL.4(fixed = c(NA, 0, 100, NA), + names = c("Slope", "LS Inferior", "LS Superior", "IC50"))) + + summary_48 <- summary(model_48h) + IC50_48 <- round(summary_48$coefficients[2], 2) + slope_48 <- round(summary_48$coefficients[1], 2) + + # Logistic function for plots + logistic4 <- function(x, A, B, C, D) { + return((A - D) / (1.0 + ((x / C) ** B)) + D) + } + + # Create plotly graphs + imageName_24 <- "mortality_24h.html" + File_24 <- tempfile(fileext = ".html") + + plot_24 <- plot_ly(data = df, x = df[[conc_col]], y = df[[mort_24h_col]], + type = "scatter", mode = "markers", name = "Data") + plot_24 <- layout(plot_24, xaxis = list(type = "log", title = "Concentration"), + yaxis = list(title = "Mortality 24h (%)")) + xs <- linspace(min(df[[conc_col]]), max(df[[conc_col]]), n = 1000) + plot_24 <- add_lines(plot_24, x = xs, + y = logistic4(xs, 100, slope_24, IC50_24, 0), + name = "Fitted Curve") + saveWidget(widget = plot_24, file = File_24, selfcontained = TRUE) + + imageName_48 <- "mortality_48h.html" + File_48 <- tempfile(fileext = ".html") + + plot_48 <- plot_ly(data = df, x = df[[conc_col]], y = df[[mort_48h_col]], + type = "scatter", mode = "markers", name = "Data") + plot_48 <- layout(plot_48, xaxis = list(type = "log", title = "Concentration"), + yaxis = list(title = "Mortality 48h (%)")) + plot_48 <- add_lines(plot_48, x = xs, + y = logistic4(xs, 100, slope_48, IC50_48, 0), + name = "Fitted Curve") + saveWidget(widget = plot_48, file = File_48, selfcontained = TRUE) + + # Upload files to Benchling + upload_file <- function(filepath, filename, folder_id, access_token, subdomain) { + endpoint <- "/api/v2-beta/files" + URL <- paste("https://", subdomain, ".benchling.com", endpoint, sep = "") + + my_data <- readBin(filepath, "raw", 10e6) + + filePostBody <- list(name = filename, folderId = folder_id, filename = filename) + filePostResponse <- httr::POST( + url = URL, + body = toJSON(filePostBody, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)), + httr::content_type('application/json') + ) + + dat <- jsonlite::fromJSON(rawToChar(filePostResponse$content)) + fileID <- dat$id + s3_Put_Url <- filePostResponse$headers$`content-location` + + s3FileUpload <- httr::PUT( + url = s3_Put_Url, + body = my_data, + httr::add_headers('x-amz-server-side-encryption' = 'AES256') + ) + + if (s3FileUpload$status_code == 200) { + endpoint <- "/api/v2-beta/files/" + URL <- paste("https://", subdomain, ".benchling.com", endpoint, fileID, sep = "") + + s3FileUploadStatus <- list(uploadStatus = 'SUCCEEDED') + + PatchFile <- httr::PATCH( + url = URL, + body = toJSON(s3FileUploadStatus, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)), + httr::content_type('application/json') + ) + } + + fileID + } + + fileID_24 <- upload_file(File_24, imageName_24, folder_id, access_token, isolate(subdomain())) + fileID_48 <- upload_file(File_48, imageName_48, folder_id, access_token, isolate(subdomain())) + + # Create and upload CSV results + Cell <- rep("Cell Line", 2) + Hours <- c(24, 48) + Function <- c('LL.4', 'LL.4') + IC50 <- c(IC50_24, IC50_48) + + Csv_df <- data.frame(Cell, Hours, Function, IC50) + + Csv_file <- tempfile(fileext = ".csv") + write.csv(Csv_df, Csv_file, row.names = FALSE) + + # Upload CSV as dataframe + endpoint <- "/api/v2-beta/data-frames" + URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, sep = "") + + my_data <- readBin(Csv_file, "raw", 10e6) + + DatasetBody <- list(manifest = list(list(fileName = "mortality.csv")), name = 'MortalityIC50') + + DatasetPostResponse <- httr::POST( + url = URL, + body = toJSON(DatasetBody, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)), + httr::content_type('application/json') + ) + + dat <- jsonlite::fromJSON(rawToChar(DatasetPostResponse$content)) + DatasetID_Result <- dat$id + s3_Put_Url <- dat$manifest$url + + s3FileUpload <- httr::PUT( + url = s3_Put_Url, + body = my_data, + httr::add_headers('x-amz-server-side-encryption' = 'AES256') + ) + + if (s3FileUpload$status_code == 200) { + endpoint <- "/api/v2-beta/data-frames/" + URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, DatasetID_Result, sep = "") + + DatasetStatusBody <- list(uploadStatus = "IN_PROGRESS") + + PatchFile <- httr::PATCH( + url = URL, + body = toJSON(DatasetStatusBody, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)), + httr::content_type('application/json') + ) + } + + # Patch analysis with outputs + endpoint <- "/api/v2-beta/analyses/" + URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, analysis_id, sep = "") + + Analysisfiles <- list(fileIds = list(fileID_24, fileID_48), dataFrameIds = list(DatasetID_Result)) + + PatchAnalysis <- httr::PATCH( + url = URL, + body = toJSON(Analysisfiles, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)), + httr::content_type('application/json') + ) + + dat <- jsonlite::fromJSON(rawToChar(PatchAnalysis$content)) + paste("Analysis complete! Status:", dat$status) + }) + + # Outputs + output$subdomain <- renderText({ + if (input$submitbutton > 0) { + isolate(subdomain()) + } else { + "Enter Analysis Key" + } + }) + + output$tabledata <- renderTable({ + if (input$submitbutton > 0) { + datasetInput() + } + }) + + output$analysis <- renderText({ + if (input$sendresultAnalysis > 0) { + isolate(analysis()) + } else { + "Click 'Send Analysis' to process" + } + }) +} + +shinyApp(ui = ui, server = server) diff --git a/get_dataframe.R b/get_dataframe.R index dedf417..1bbbac4 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -6,36 +6,88 @@ library(httr) library(jsonlite) library(base64enc) -# Get Analysis Key from Benchling tenant -# INPUT -#Please uncomment analysis_key client Id and client secret -#analysis_key <- "" - +################################################################################ +# Load Configuration from Environment Variables +################################################################################ -# Get the analysis ID by extracting string prior to : in analysis_key -analysis_id <- gsub(":.*$", "", analysis_key) +# Load credentials from .Renviron +client_id <- Sys.getenv("BENCHLING_CLIENT_ID") +client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") + +# Check if credentials are set +if (client_id == "" || client_secret == "") { + stop(paste( + "Missing Benchling credentials!", + "Please ensure BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET are set in .Renviron", + "See .Renviron.example for template", + sep = "\n" + )) +} + +# Prompt for analysis key (recommended - it changes for each analysis) +analysis_key <- Sys.getenv("BENCHLING_ANALYSIS_KEY") + +if (analysis_key == "") { + cat("\n") + cat("========================================\n") + cat("Enter your Benchling Analysis Key\n") + cat("========================================\n") + cat("The analysis key format is: ana_XXXXX:eyJhbGc...\n") + cat("You can find this in your Benchling analysis.\n\n") + + # Prompt for analysis key + analysis_key <- readline(prompt = "Analysis Key: ") + + # Trim whitespace + analysis_key <- trimws(analysis_key) + + if (analysis_key == "") { + stop("Analysis key is required. Please run the script again and provide the key.") + } + + cat("\n✓ Analysis key provided\n\n") +} + +# Parse analysis key to extract subdomain and ID +tryCatch({ + # Get the analysis ID by extracting string prior to : in analysis_key + analysis_id <- gsub(":.*$", "", analysis_key) + + # Get the JWT Token and decode it to extract the subdomain of the tenant + split_key <- strsplit(analysis_key, ".", fixed = TRUE) + token <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) + subdomain_raw <- token$aud + + # Extract just the subdomain (handle both "subdomain" and "subdomain.benchling.com" formats) + subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) + + cat("✓ Analysis key parsed successfully\n") + cat(" Subdomain:", subdomain, "\n") + cat(" Analysis ID:", analysis_id, "\n\n") +}, error = function(e) { + stop(paste( + "Failed to parse analysis key!", + "Please check that you've entered the complete key in format: ana_XXXXX:eyJhbGc...", + "\nError:", e$message, + sep = "\n" + )) +}) -# Get the JWT Token and decode it to extract the subdomain of the tenant -split_key <- strsplit(analysis_key, ".", fixed = TRUE) -token <- - jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) -subdomain <- token$aud +################################################################################ +# Generate Bearer Token +################################################################################ -###### Generate Bearer Token ###### +cat("Authenticating with Benchling API...\n") # Construct url # The resulting URL should look like: https://.benchling.com/api/v2/token api_path <- '/api/v2/token' -url <- paste("https://", subdomain, api_path, sep = "") - -# Provide Client ID and Secret -# INPUT -client_id <- "" -# INPUT -client_secret <- "" +url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") request_payload <- - paste("client_id=",client_id,"&client_secret=",client_secret,"&grant_type=client_credentials", sep = "") + paste("client_id=", client_id, + "&client_secret=", client_secret, + "&grant_type=client_credentials", sep = "") # Perform a post request and get the token token_request <- httr::POST( @@ -45,21 +97,35 @@ token_request <- httr::POST( httr::content_type('application/x-www-form-urlencoded') ) +# Check for authentication errors +if (token_request$status_code != 200) { + stop(paste( + "Authentication failed! Status code:", token_request$status_code, + "\nPlease check your BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET", + sep = "" + )) +} + # Use the jsonLite library to read the Json body request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) # Bearer Token needs to be regenerated every 900 seconds access_token <- request_body$access_token +cat("✓ Authentication successful\n") +cat(" Token expires in:", request_body$expires_in, "seconds (15 minutes)\n\n") + ############################################################### -# Use the Get analysis endpoint and retrieve the dataframe id # +# Use the Get analysis endpoint and retrieve the dataframe id ############################################################### +cat("Fetching analysis metadata...\n") + # Construct url # The resulting URL should look like: https://.benchling.com/api/v2-beta/analyses/ana_ABCD1234 api_path <- "/api/v2-beta/analyses/" url <- - paste("https://", subdomain, api_path, analysis_id, sep = "") + paste("https://", subdomain, ".benchling.com", api_path, analysis_id, sep = "") # Perform a get request analysis_response <- @@ -69,6 +135,15 @@ analysis_response <- Authorization = paste("Bearer", access_token, sep = " ") )) +# Check for errors +if (analysis_response$status_code != 200) { + stop(paste( + "Failed to fetch analysis! Status code:", analysis_response$status_code, + "\nPlease check your BENCHLING_ANALYSIS_KEY", + sep = "" + )) +} + # Use the jsonlite library to read the JSON body analysis_body <- jsonlite::fromJSON(rawToChar(analysis_response$content)) @@ -77,17 +152,31 @@ analysis_body <- # Note: This assumes there is a single input dataframe dataframe_id <- c(analysis_body$dataFrameIds) +if (length(dataframe_id) == 0) { + stop(paste( + "No input dataframes found in analysis!", + "Please attach a dataset to your analysis in Benchling", + sep = "\n" + )) +} + # Get the folder ID folder_id <- c(analysis_body$folderId) +cat("✓ Analysis metadata retrieved\n") +cat(" Dataframe ID:", dataframe_id, "\n") +cat(" Folder ID:", folder_id, "\n\n") + ################################################################ -# Use the Get dataframe endpoint and retrieve the dataframe id # +# Use the Get dataframe endpoint and retrieve the dataframe ################################################################ +cat("Downloading dataset...\n") + # Construct url # The resulting URL should look like: https://.benchling.com/api/v2-beta/data-frames/dset_bHbGo1FP79Kl) api_path <- "/api/v2-beta/data-frames/" -url <- paste("https://", subdomain, api_path, dataframe_id, sep = "") +url <- paste("https://", subdomain, ".benchling.com", api_path, dataframe_id, sep = "") # Perform a get request dataframe_response <- @@ -97,6 +186,14 @@ dataframe_response <- Authorization = paste("Bearer", access_token, sep = " ") )) +# Check for errors +if (dataframe_response$status_code != 200) { + stop(paste( + "Failed to fetch dataframe! Status code:", dataframe_response$status_code, + sep = "" + )) +} + # Use the jsonlite library to read the JSON body dataframe_body <- jsonlite::fromJSON(rawToChar(dataframe_response$content)) @@ -104,5 +201,21 @@ dataframe_body <- # Retrieve the url to retrieve the dataframe in CSV format dataframe_url <- c(dataframe_body$manifest$url) -# Read the dataframe csv, save it as an R dataframe and let the R magic begin +# Read the dataframe csv and save it as an R dataframe df <- read.csv(dataframe_url) + +cat("✓ Dataset loaded successfully\n") +cat(" Rows:", nrow(df), "\n") +cat(" Columns:", ncol(df), "\n") +cat(" Column names:", paste(names(df), collapse = ", "), "\n\n") + +cat("==========================================\n") +cat("SUCCESS! Dataset ready for analysis\n") +cat("==========================================\n") +cat("Available variables:\n") +cat(" df - Dataset as R dataframe\n") +cat(" subdomain - Benchling tenant subdomain\n") +cat(" analysis_id - Analysis ID\n") +cat(" access_token - Bearer token (valid for 15 min)\n") +cat(" folder_id - Folder ID for uploads\n") +cat("\nNext step: Run results_analysis.R\n") diff --git a/renv.lock b/renv.lock new file mode 100644 index 0000000..cbb3c39 --- /dev/null +++ b/renv.lock @@ -0,0 +1,4483 @@ +{ + "R": { + "Version": "4.5.3", + "Repositories": [ + { + "Name": "CRAN", + "URL": "https://cloud.r-project.org" + } + ] + }, + "Packages": { + "Deriv": { + "Package": "Deriv", + "Version": "4.2.0", + "Source": "Repository", + "Type": "Package", + "Title": "Symbolic Differentiation", + "Date": "2025-06-20", + "Authors@R": "c(person(given=\"Andrew\", family=\"Clausen\", role=\"aut\"), person(given=\"Serguei\", family=\"Sokol\", role=c(\"aut\", \"cre\"), email=\"sokol@insa-toulouse.fr\", comment = c(ORCID = \"0000-0002-5674-3327\")), person(given=\"Andreas\", family=\"Rappold\", role=\"ctb\", email=\"arappold@gmx.at\"))", + "Description": "R-based solution for symbolic differentiation. It admits user-defined function as well as function substitution in arguments of functions to be differentiated. Some symbolic simplification is part of the work.", + "License": "GPL (>= 3)", + "Suggests": [ + "testthat (>= 0.11.0)" + ], + "BugReports": "https://github.com/sgsokol/Deriv/issues", + "RoxygenNote": "7.3.1", + "Imports": [ + "methods" + ], + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Andrew Clausen [aut], Serguei Sokol [aut, cre] (ORCID: ), Andreas Rappold [ctb]", + "Maintainer": "Serguei Sokol ", + "Repository": "CRAN" + }, + "Formula": { + "Package": "Formula", + "Version": "1.2-5", + "Source": "Repository", + "Date": "2023-02-23", + "Title": "Extended Model Formulas", + "Description": "Infrastructure for extended formulas with multiple parts on the right-hand side and/or multiple responses on the left-hand side (see ).", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Yves\", family = \"Croissant\", role = \"aut\", email = \"Yves.Croissant@univ-reunion.fr\"))", + "Depends": [ + "R (>= 2.0.0)", + "stats" + ], + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "no", + "Author": "Achim Zeileis [aut, cre] (), Yves Croissant [aut]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "MASS": { + "Package": "MASS", + "Version": "7.3-65", + "Source": "Repository", + "Priority": "recommended", + "Date": "2025-02-19", + "Revision": "$Rev: 3681 $", + "Depends": [ + "R (>= 4.4.0)", + "grDevices", + "graphics", + "stats", + "utils" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "lattice", + "nlme", + "nnet", + "survival" + ], + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"Bill\", \"Venables\", role = c(\"aut\", \"cph\")), person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"), person(\"Kurt\", \"Hornik\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"Albrecht\", \"Gebhardt\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"David\", \"Firth\", role = \"ctb\", comment = \"support functions for polr\"))", + "Description": "Functions and datasets to support Venables and Ripley, \"Modern Applied Statistics with S\" (4th edition, 2002).", + "Title": "Support Functions and Datasets for Venables and Ripley's MASS", + "LazyData": "yes", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "Contact": "", + "NeedsCompilation": "yes", + "Author": "Brian Ripley [aut, cre, cph], Bill Venables [aut, cph], Douglas M. Bates [ctb], Kurt Hornik [trl] (partial port ca 1998), Albrecht Gebhardt [trl] (partial port ca 1998), David Firth [ctb] (support functions for polr)", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN" + }, + "Matrix": { + "Package": "Matrix", + "Version": "1.7-5", + "Source": "Repository", + "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", + "Date": "2026-03-20", + "Priority": "recommended", + "Title": "Sparse and Dense Matrix Classes and Methods", + "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and 'SuiteSparse' libraries.", + "License": "GPL (>= 2) | file LICENCE", + "URL": "https://Matrix.R-forge.R-project.org", + "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", + "Contact": "Matrix-authors@R-project.org", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = c(ROR = \"02zz1nj61\", \"base R's matrix implementation\")))", + "Depends": [ + "R (>= 4.4)", + "methods" + ], + "Imports": [ + "grDevices", + "graphics", + "grid", + "lattice", + "stats", + "utils" + ], + "Suggests": [ + "MASS", + "datasets", + "sfsmisc", + "tools" + ], + "Enhances": [ + "SparseM", + "graph" + ], + "LazyData": "no", + "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", + "BuildResaveData": "no", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut, cre] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Timothy A. Davis [ctb] (ORCID: , SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (ORCID: , METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (ORCID: , GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (ROR: , base R's matrix implementation)", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "MatrixModels": { + "Package": "MatrixModels", + "Version": "0.5-4", + "Source": "Repository", + "VersionNote": "Released 0.5-3 on 2023-11-06", + "Date": "2025-03-25", + "Title": "Modelling with Sparse and Dense Matrices", + "Contact": "Matrix-authors@R-project.org", + "Authors@R": "c( person(\"Douglas\", \"Bates\", role = \"aut\", email = \"bates@stat.wisc.edu\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")))", + "Description": "Generalized Linear Modelling with sparse and dense 'Matrix' matrices, using modular prediction and response module classes.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "stats", + "methods", + "Matrix (>= 1.6-0)", + "Matrix(< 1.8-0)" + ], + "ImportsNote": "_not_yet_stats4", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "License": "GPL (>= 2)", + "URL": "https://Matrix.R-forge.R-project.org/, https://r-forge.r-project.org/R/?group_id=61", + "BugReports": "https://R-forge.R-project.org/tracker/?func=add&atid=294&group_id=61", + "NeedsCompilation": "no", + "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] ()", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "R6": { + "Package": "R6", + "Version": "2.6.1", + "Source": "Repository", + "Title": "Encapsulated Classes with Reference Semantics", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Creates classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the classes are defined in different packages.", + "License": "MIT + file LICENSE", + "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", + "BugReports": "https://github.com/r-lib/R6/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Suggests": [ + "lobstr", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark, scales", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "RColorBrewer": { + "Package": "RColorBrewer", + "Version": "1.1-3", + "Source": "Repository", + "Date": "2022-04-03", + "Title": "ColorBrewer Palettes", + "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", + "Author": "Erich Neuwirth [aut, cre]", + "Maintainer": "Erich Neuwirth ", + "Depends": [ + "R (>= 2.0.0)" + ], + "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", + "License": "Apache License 2.0", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.1.1", + "Source": "Repository", + "Title": "Seamless R and C++ Integration", + "Date": "2026-01-07", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", + "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "methods", + "utils" + ], + "Suggests": [ + "tinytest", + "inline", + "rbenchmark", + "pkgKitten (>= 0.1.2)" + ], + "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", + "License": "GPL (>= 2)", + "BugReports": "https://github.com/RcppCore/Rcpp/issues", + "MailingList": "rcpp-devel@lists.r-forge.r-project.org", + "RoxygenNote": "6.1.1", + "Encoding": "UTF-8", + "VignetteBuilder": "Rcpp", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), JJ Allaire [aut] (ORCID: ), Kevin Ushey [aut] (ORCID: ), Qiang Kou [aut] (ORCID: ), Nathan Russell [aut], Iñaki Ucar [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), John Chambers [aut]", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "RcppArmadillo": { + "Package": "RcppArmadillo", + "Version": "15.2.4-1", + "Source": "Repository", + "Type": "Package", + "Title": "'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library", + "Date": "2026-03-17", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Binxiang\", \"Ni\", role = \"aut\"), person(\"Conrad\", \"Sanderson\", role = \"aut\", comment = c(ORCID = \"0000-0002-0049-4501\")))", + "Description": "'Armadillo' is a templated C++ linear algebra library aiming towards a good balance between speed and ease of use. It provides high-level syntax and functionality deliberately similar to Matlab. It is useful for algorithm development directly in C++, or quick conversion of research code into production environments. It provides efficient classes for vectors, matrices and cubes where dense and sparse matrices are supported. Integer, floating point and complex numbers are supported. A sophisticated expression evaluator (based on template meta-programming) automatically combines several operations to increase speed and efficiency. Dynamic evaluation automatically chooses optimal code paths based on detected matrix structures. Matrix decompositions are provided through integration with LAPACK, or one of its high performance drop-in replacements (such as 'MKL' or 'OpenBLAS'). It can automatically use 'OpenMP' multi-threading (parallelisation) to speed up computationally expensive operations. . The 'RcppArmadillo' package includes the header files from the 'Armadillo' library; users do not need to install 'Armadillo' itself in order to use 'RcppArmadillo'. Starting from release 15.0.0, the minimum compilation standard is C++14 so 'Armadillo' version 14.6.3 is included as a fallback when an R package forces the C++11 standard. Package authors should set a '#define' to select the 'current' version, or select the 'legacy' version (also chosen as default) if they must. See 'GitHub issue #475' for details. . Since release 7.800.0, 'Armadillo' is licensed under Apache License 2; previous releases were under licensed as MPL 2.0 from version 3.800.0 onwards and LGPL-3 prior to that; 'RcppArmadillo' (the 'Rcpp' bindings/bridge to Armadillo) is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", + "License": "GPL (>= 2)", + "LazyLoad": "yes", + "Depends": [ + "R (>= 3.3.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "Imports": [ + "Rcpp (>= 1.0.12)", + "stats", + "utils", + "methods" + ], + "Suggests": [ + "tinytest", + "Matrix (>= 1.3.0)", + "pkgKitten", + "reticulate", + "slam" + ], + "URL": "https://github.com/RcppCore/RcppArmadillo, https://dirk.eddelbuettel.com/code/rcpp.armadillo.html", + "BugReports": "https://github.com/RcppCore/RcppArmadillo/issues", + "RoxygenNote": "6.0.1", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), Binxiang Ni [aut], Conrad Sanderson [aut] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "RcppEigen": { + "Package": "RcppEigen", + "Version": "0.3.4.0.2", + "Source": "Repository", + "Type": "Package", + "Title": "'Rcpp' Integration for the 'Eigen' Templated Linear Algebra Library", + "Date": "2024-08-23", + "Authors@R": "c(person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Yixuan\", \"Qiu\", role = \"aut\", comment = c(ORCID = \"0000-0003-0109-6692\")), person(\"Authors of\", \"Eigen\", role = \"cph\", comment = \"Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS\"))", + "Copyright": "See the file COPYRIGHTS for various Eigen copyright details", + "Description": "R and 'Eigen' integration using 'Rcpp'. 'Eigen' is a C++ template library for linear algebra: matrices, vectors, numerical solvers and related algorithms. It supports dense and sparse matrices on integer, floating point and complex numbers, decompositions of such matrices, and solutions of linear systems. Its performance on many algorithms is comparable with some of the best implementations based on 'Lapack' and level-3 'BLAS'. The 'RcppEigen' package includes the header files from the 'Eigen' C++ template library. Thus users do not need to install 'Eigen' itself in order to use 'RcppEigen'. Since version 3.1.1, 'Eigen' is licensed under the Mozilla Public License (version 2); earlier version were licensed under the GNU LGPL version 3 or later. 'RcppEigen' (the 'Rcpp' bindings/bridge to 'Eigen') is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", + "License": "GPL (>= 2) | file LICENSE", + "LazyLoad": "yes", + "Depends": [ + "R (>= 3.6.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "Imports": [ + "Rcpp (>= 0.11.0)", + "stats", + "utils" + ], + "Suggests": [ + "Matrix", + "inline", + "tinytest", + "pkgKitten", + "microbenchmark" + ], + "URL": "https://github.com/RcppCore/RcppEigen, https://dirk.eddelbuettel.com/code/rcpp.eigen.html", + "BugReports": "https://github.com/RcppCore/RcppEigen/issues", + "NeedsCompilation": "yes", + "Author": "Doug Bates [aut] (), Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), Yixuan Qiu [aut] (), Authors of Eigen [cph] (Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS)", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "Rdpack": { + "Package": "Rdpack", + "Version": "2.6.6", + "Source": "Repository", + "Type": "Package", + "Title": "Update and Manipulate Rd Documentation Objects", + "Authors@R": "c( person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"aut\", \"cre\"), email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\")), person(given = \"Duncan\", family = \"Murdoch\", role = \"ctb\", email = \"murdoch.duncan@gmail.com\") )", + "Description": "Functions for manipulation of R documentation objects, including functions reprompt() and ereprompt() for updating 'Rd' documentation for functions, methods and classes; 'Rd' macros for citations and import of references from 'bibtex' files for use in 'Rd' files and 'roxygen2' comments; 'Rd' macros for evaluating and inserting snippets of 'R' code and the results of its evaluation or creating graphics on the fly; and many functions for manipulation of references and Rd files.", + "URL": "https://geobosh.github.io/Rdpack/ (doc), https://CRAN.R-project.org/package=Rdpack", + "BugReports": "https://github.com/GeoBosh/Rdpack/issues", + "Depends": [ + "R (>= 2.15.0)", + "methods" + ], + "Imports": [ + "tools", + "utils", + "rbibutils (> 2.4)" + ], + "Suggests": [ + "grDevices", + "testthat", + "rstudioapi", + "rprojroot", + "gbRd" + ], + "License": "GPL (>= 2)", + "LazyLoad": "yes", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Author": "Georgi N. Boshnakov [aut, cre] (ORCID: ), Duncan Murdoch [ctb]", + "Maintainer": "Georgi N. Boshnakov ", + "Repository": "CRAN" + }, + "S7": { + "Package": "S7", + "Version": "0.2.1", + "Source": "Repository", + "Title": "An Object Oriented System Meant to Become a Successor to S3 and S4", + "Authors@R": "c( person(\"Object-Oriented Programming Working Group\", role = \"cph\"), person(\"Davis\", \"Vaughan\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"Will\", \"Landau\", role = \"aut\"), person(\"Michael\", \"Lawrence\", role = \"aut\"), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Luke\", \"Tierney\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")) )", + "Description": "A new object oriented programming system designed to be a successor to S3 and S4. It includes formal class, generic, and method specification, and a limited form of multiple dispatch. It has been designed and implemented collaboratively by the R Consortium Object-Oriented Programming Working Group, which includes representatives from R-Core, 'Bioconductor', 'Posit'/'tidyverse', and the wider R community.", + "License": "MIT + file LICENSE", + "URL": "https://rconsortium.github.io/S7/, https://github.com/RConsortium/S7", + "BugReports": "https://github.com/RConsortium/S7/issues", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "bench", + "callr", + "covr", + "knitr", + "methods", + "rmarkdown", + "testthat (>= 3.2.0)", + "tibble" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "sloop", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Config/testthat/start-first": "external-generic", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Object-Oriented Programming Working Group [cph], Davis Vaughan [aut], Jim Hester [aut] (ORCID: ), Tomasz Kalinowski [aut], Will Landau [aut], Michael Lawrence [aut], Martin Maechler [aut] (ORCID: ), Luke Tierney [aut], Hadley Wickham [aut, cre] (ORCID: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "SparseM": { + "Package": "SparseM", + "Version": "1.84-2", + "Source": "Repository", + "Authors@R": "c( person(\"Roger\", \"Koenker\", role = c(\"cre\",\"aut\"), email = \"rkoenker@uiuc.edu\"), person(c(\"Pin\", \"Tian\"), \"Ng\", role = c(\"ctb\"), comment = \"Contributions to Sparse QR code\", email = \"pin.ng@nau.edu\") , person(\"Yousef\", \"Saad\", role = c(\"ctb\"), comment = \"author of sparskit2\") , person(\"Ben\", \"Shaby\", role = c(\"ctb\"), comment = \"author of chol2csr\") , person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(\"chol() tweaks; S4\", ORCID = \"0000-0002-8685-9910\")) )", + "Maintainer": "Roger Koenker ", + "Depends": [ + "R (>= 2.15)", + "methods" + ], + "Imports": [ + "graphics", + "stats", + "utils" + ], + "VignetteBuilder": "knitr", + "Suggests": [ + "knitr" + ], + "Description": "Some basic linear algebra functionality for sparse matrices is provided: including Cholesky decomposition and backsolving as well as standard R subsetting and Kronecker products.", + "License": "GPL (>= 2)", + "Title": "Sparse Linear Algebra", + "URL": "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html", + "NeedsCompilation": "yes", + "Author": "Roger Koenker [cre, aut], Pin Tian Ng [ctb] (Contributions to Sparse QR code), Yousef Saad [ctb] (author of sparskit2), Ben Shaby [ctb] (author of chol2csr), Martin Maechler [ctb] (chol() tweaks; S4, )", + "Repository": "CRAN" + }, + "TH.data": { + "Package": "TH.data", + "Version": "1.1-5", + "Source": "Repository", + "Title": "TH's Data Archive", + "Date": "2025-11-17", + "Authors@R": "c(person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\"))", + "Description": "Contains data sets used in other packages Torsten Hothorn maintains.", + "Depends": [ + "R (>= 3.5.0)", + "survival", + "MASS" + ], + "Suggests": [ + "trtf", + "tram", + "rms", + "coin", + "ATR", + "multcomp", + "gridExtra", + "vcd", + "colorspace", + "lattice", + "knitr", + "dplyr", + "openxlsx", + "plyr" + ], + "LazyData": "yes", + "VignetteBuilder": "knitr", + "License": "GPL-3", + "NeedsCompilation": "no", + "Author": "Torsten Hothorn [aut, cre]", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN" + }, + "abind": { + "Package": "abind", + "Version": "1.4-8", + "Source": "Repository", + "Date": "2024-09-08", + "Title": "Combine Multidimensional Arrays", + "Authors@R": "c(person(\"Tony\", \"Plate\", email = \"tplate@acm.org\", role = c(\"aut\", \"cre\")), person(\"Richard\", \"Heiberger\", role = c(\"aut\")))", + "Maintainer": "Tony Plate ", + "Description": "Combine multidimensional arrays into a single array. This is a generalization of 'cbind' and 'rbind'. Works with vectors, matrices, and higher-dimensional arrays (aka tensors). Also provides functions 'adrop', 'asub', and 'afill' for manipulating, extracting and replacing data in arrays.", + "Depends": [ + "R (>= 1.5.0)" + ], + "Imports": [ + "methods", + "utils" + ], + "License": "MIT + file LICENSE", + "NeedsCompilation": "no", + "Author": "Tony Plate [aut, cre], Richard Heiberger [aut]", + "Repository": "CRAN" + }, + "askpass": { + "Package": "askpass", + "Version": "1.2.1", + "Source": "Repository", + "Type": "Package", + "Title": "Password Entry Utilities for R, Git, and SSH", + "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", + "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", + "License": "MIT + file LICENSE", + "URL": "https://r-lib.r-universe.dev/askpass", + "BugReports": "https://github.com/r-lib/askpass/issues", + "Encoding": "UTF-8", + "Imports": [ + "sys (>= 2.1)" + ], + "RoxygenNote": "7.2.3", + "Suggests": [ + "testthat" + ], + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] ()", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "backports": { + "Package": "backports", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Reimplementations of Functions Introduced Since R-3.0.0", + "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))", + "Maintainer": "Michel Lang ", + "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.", + "URL": "https://github.com/r-lib/backports", + "BugReports": "https://github.com/r-lib/backports/issues", + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "yes", + "ByteCompile": "yes", + "Depends": [ + "R (>= 3.0.0)" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "Author": "Michel Lang [cre, aut] (), Duncan Murdoch [aut], R Core Team [aut]", + "Repository": "CRAN" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-6", + "Source": "Repository", + "Title": "Tools for 'base64' Encoding", + "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.nz, ORCID: )", + "Authors@R": "person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.nz\", ORCID=\"0000-0003-2297-1732\"))", + "Maintainer": "Simon Urbanek ", + "Depends": [ + "R (>= 2.9.0)" + ], + "Enhances": [ + "png" + ], + "Description": "Tools for handling 'base64' encoding. It is more flexible than the orphaned 'base64' package.", + "License": "GPL-2 | GPL-3", + "URL": "https://www.rforge.net/base64enc", + "BugReports": "https://github.com/s-u/base64enc/issues", + "NeedsCompilation": "yes", + "Repository": "CRAN" + }, + "boot": { + "Package": "boot", + "Version": "1.3-32", + "Source": "Repository", + "Priority": "recommended", + "Date": "2025-08-29", + "Authors@R": "c(person(\"Angelo\", \"Canty\", role = \"aut\", email = \"cantya@mcmaster.ca\", comment = \"author of original code for S\"), person(\"Brian\", \"Ripley\", role = c(\"aut\", \"trl\"), email = \"Brian.Ripley@R-project.org\", comment = \"conversion to R, maintainer 1999--2022, author of parallel support\"), person(\"Alessandra R.\", \"Brazzale\", role = c(\"ctb\", \"cre\"), email = \"brazzale@stat.unipd.it\", comment = \"minor bug fixes\"))", + "Maintainer": "Alessandra R. Brazzale ", + "Note": "Maintainers are not available to give advice on using a package they did not author.", + "Description": "Functions and datasets for bootstrapping from the book \"Bootstrap Methods and Their Application\" by A. C. Davison and D. V. Hinkley (1997, CUP), originally written by Angelo Canty for S.", + "Title": "Bootstrap Functions", + "Depends": [ + "R (>= 3.0.0)", + "graphics", + "stats" + ], + "Suggests": [ + "MASS", + "survival" + ], + "LazyData": "yes", + "ByteCompile": "yes", + "License": "Unlimited", + "NeedsCompilation": "no", + "Author": "Angelo Canty [aut] (author of original code for S), Brian Ripley [aut, trl] (conversion to R, maintainer 1999--2022, author of parallel support), Alessandra R. Brazzale [ctb, cre] (minor bug fixes)", + "Repository": "CRAN" + }, + "broom": { + "Package": "broom", + "Version": "1.0.12", + "Source": "Repository", + "Type": "Package", + "Title": "Convert Statistical Objects into Tidy Tibbles", + "Authors@R": "c( person(\"David\", \"Robinson\", , \"admiral.david@gmail.com\", role = \"aut\"), person(\"Alex\", \"Hayes\", , \"alexpghayes@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(\"Simon\", \"Couch\", , \"simon.couch@posit.co\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-5676-5107\")), person(\"Emil\", \"Hvitfeldt\", , \"emil.hvitfeldt@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0679-1945\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(\"Derek\", \"Chiu\", , \"dchiu@bccrc.ca\", role = \"ctb\"), person(\"Matthieu\", \"Gomez\", , \"mattg@princeton.edu\", role = \"ctb\"), person(\"Boris\", \"Demeshev\", , \"boris.demeshev@gmail.com\", role = \"ctb\"), person(\"Dieter\", \"Menne\", , \"dieter.menne@menne-biomed.de\", role = \"ctb\"), person(\"Benjamin\", \"Nutter\", , \"nutter@battelle.org\", role = \"ctb\"), person(\"Luke\", \"Johnston\", , \"luke.johnston@mail.utoronto.ca\", role = \"ctb\"), person(\"Ben\", \"Bolker\", , \"bolker@mcmaster.ca\", role = \"ctb\"), person(\"Francois\", \"Briatte\", , \"f.briatte@gmail.com\", role = \"ctb\"), person(\"Jeffrey\", \"Arnold\", , \"jeffrey.arnold@gmail.com\", role = \"ctb\"), person(\"Jonah\", \"Gabry\", , \"jsg2201@columbia.edu\", role = \"ctb\"), person(\"Luciano\", \"Selzer\", , \"luciano.selzer@gmail.com\", role = \"ctb\"), person(\"Gavin\", \"Simpson\", , \"ucfagls@gmail.com\", role = \"ctb\"), person(\"Jens\", \"Preussner\", , \"jens.preussner@mpi-bn.mpg.de\", role = \"ctb\"), person(\"Jay\", \"Hesselberth\", , \"jay.hesselberth@gmail.com\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"ctb\"), person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = \"ctb\"), person(\"Alessandro\", \"Gasparini\", , \"ag475@leicester.ac.uk\", role = \"ctb\"), person(\"Lukasz\", \"Komsta\", , \"lukasz.komsta@umlub.pl\", role = \"ctb\"), person(\"Frederick\", \"Novometsky\", role = \"ctb\"), person(\"Wilson\", \"Freitas\", role = \"ctb\"), person(\"Michelle\", \"Evans\", role = \"ctb\"), person(\"Jason Cory\", \"Brunson\", , \"cornelioid@gmail.com\", role = \"ctb\"), person(\"Simon\", \"Jackson\", , \"drsimonjackson@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Whalley\", , \"ben.whalley@plymouth.ac.uk\", role = \"ctb\"), person(\"Karissa\", \"Whiting\", , \"karissa.whiting@gmail.com\", role = \"ctb\"), person(\"Yves\", \"Rosseel\", , \"yrosseel@gmail.com\", role = \"ctb\"), person(\"Michael\", \"Kuehn\", , \"mkuehn10@gmail.com\", role = \"ctb\"), person(\"Jorge\", \"Cimentada\", , \"cimentadaj@gmail.com\", role = \"ctb\"), person(\"Erle\", \"Holgersen\", , \"erle.holgersen@gmail.com\", role = \"ctb\"), person(\"Karl\", \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Ethan\", \"Christensen\", , \"christensen.ej@gmail.com\", role = \"ctb\"), person(\"Steven\", \"Pav\", , \"shabbychef@gmail.com\", role = \"ctb\"), person(\"Paul\", \"PJ\", , \"pjpaul.stephens@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Patrick\", \"Kennedy\", , \"pkqstr@protonmail.com\", role = \"ctb\"), person(\"Lily\", \"Medina\", , \"lilymiru@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Fannin\", , \"captain@pirategrunt.com\", role = \"ctb\"), person(\"Jason\", \"Muhlenkamp\", , \"jason.muhlenkamp@gmail.com\", role = \"ctb\"), person(\"Matt\", \"Lehman\", role = \"ctb\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Nic\", \"Crane\", role = \"ctb\"), person(\"Andrew\", \"Bates\", role = \"ctb\"), person(\"Vincent\", \"Arel-Bundock\", , \"vincent.arel-bundock@umontreal.ca\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(\"Hideaki\", \"Hayashi\", role = \"ctb\"), person(\"Luis\", \"Tobalina\", role = \"ctb\"), person(\"Annie\", \"Wang\", , \"anniewang.uc@gmail.com\", role = \"ctb\"), person(\"Wei Yang\", \"Tham\", , \"weiyang.tham@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", , \"clara.wang.94@gmail.com\", role = \"ctb\"), person(\"Abby\", \"Smith\", , \"als1@u.northwestern.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(\"Jasper\", \"Cooper\", , \"jaspercooper@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(\"E Auden\", \"Krauska\", , \"krauskae@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(\"Alex\", \"Wang\", , \"x249wang@uwaterloo.ca\", role = \"ctb\"), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Charles\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(\"Jared\", \"Wilber\", role = \"ctb\"), person(\"Vilmantas\", \"Gegzna\", , \"GegznaV@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(\"Eduard\", \"Szoecs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Angus\", \"Moore\", , \"angusmoore9@gmail.com\", role = \"ctb\"), person(\"Nick\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Marius\", \"Barth\", , \"marius.barth.uni.koeln@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(\"Bruna\", \"Wundervald\", , \"brunadaviesw@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(\"Joyce\", \"Cahoon\", , \"joyceyu48@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(\"Grant\", \"McDermott\", , \"grantmcd@uoregon.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(\"Kevin\", \"Zarca\", , \"kevin.zarca@gmail.com\", role = \"ctb\"), person(\"Shiro\", \"Kuriwaki\", , \"shirokuriwaki@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(\"Lukas\", \"Wallrich\", , \"lukas.wallrich@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(\"James\", \"Martherus\", , \"james@martherus.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(\"Chuliang\", \"Xiao\", , \"cxiao@umich.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(\"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = \"ctb\"), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", , \"michal2992@gmail.com\", role = \"ctb\"), person(\"Hakon\", \"Malmedal\", , \"hmalmedal@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", role = \"ctb\"), person(\"Sergio\", \"Oller\", , \"sergioller@gmail.com\", role = \"ctb\"), person(\"Luke\", \"Sonnet\", , \"luke.sonnet@gmail.com\", role = \"ctb\"), person(\"Jim\", \"Hester\", , \"jim.hester@posit.co\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Bernie\", \"Gray\", , \"bfgray3@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(\"Mara\", \"Averick\", , \"mara@posit.co\", role = \"ctb\"), person(\"Aaron\", \"Jacobs\", , \"atheriel@gmail.com\", role = \"ctb\"), person(\"Andreas\", \"Bender\", , \"bender.at.R@gmail.com\", role = \"ctb\"), person(\"Sven\", \"Templer\", , \"sven.templer@gmail.com\", role = \"ctb\"), person(\"Paul-Christian\", \"Buerkner\", , \"paul.buerkner@gmail.com\", role = \"ctb\"), person(\"Matthew\", \"Kay\", , \"mjskay@umich.edu\", role = \"ctb\"), person(\"Erwan\", \"Le Pennec\", , \"lepennec@gmail.com\", role = \"ctb\"), person(\"Johan\", \"Junkka\", , \"johan.junkka@umu.se\", role = \"ctb\"), person(\"Hao\", \"Zhu\", , \"haozhu233@gmail.com\", role = \"ctb\"), person(\"Benjamin\", \"Soltoff\", , \"soltoffbc@uchicago.edu\", role = \"ctb\"), person(\"Zoe\", \"Wilkinson Saldana\", , \"zoewsaldana@gmail.com\", role = \"ctb\"), person(\"Tyler\", \"Littlefield\", , \"tylurp1@gmail.com\", role = \"ctb\"), person(\"Charles T.\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\"), person(\"Shabbh E.\", \"Banks\", role = \"ctb\"), person(\"Serina\", \"Robinson\", , \"robi0916@umn.edu\", role = \"ctb\"), person(\"Roger\", \"Bivand\", , \"Roger.Bivand@nhh.no\", role = \"ctb\"), person(\"Riinu\", \"Ots\", , \"riinuots@gmail.com\", role = \"ctb\"), person(\"Nicholas\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Nina\", \"Jakobsen\", role = \"ctb\"), person(\"Michael\", \"Weylandt\", , \"michael.weylandt@gmail.com\", role = \"ctb\"), person(\"Lisa\", \"Lendway\", , \"llendway@macalester.edu\", role = \"ctb\"), person(\"Karl\", \"Hailperin\", , \"khailper@gmail.com\", role = \"ctb\"), person(\"Josue\", \"Rodriguez\", , \"jerrodriguez@ucdavis.edu\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", , \"jenny@posit.co\", role = \"ctb\"), person(\"Chris\", \"Jarvis\", , \"Christopher1.jarvis@gmail.com\", role = \"ctb\"), person(\"Greg\", \"Macfarlane\", , \"gregmacfarlane@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Mannakee\", , \"bmannakee@gmail.com\", role = \"ctb\"), person(\"Drew\", \"Tyre\", , \"atyre2@unl.edu\", role = \"ctb\"), person(\"Shreyas\", \"Singh\", , \"shreyas.singh.298@gmail.com\", role = \"ctb\"), person(\"Laurens\", \"Geffert\", , \"laurensgeffert@gmail.com\", role = \"ctb\"), person(\"Hong\", \"Ooi\", , \"hongooi@microsoft.com\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", , \"henrikb@braju.com\", role = \"ctb\"), person(\"Eduard\", \"Szocs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", , \"davidhughjones@gmail.com\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", , \"Matthieu.Stigler@gmail.com\", role = \"ctb\"), person(\"Hugo\", \"Tavares\", , \"hm533@cam.ac.uk\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(\"R. Willem\", \"Vervoort\", , \"Willemvervoort@gmail.com\", role = \"ctb\"), person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"ctb\"), person(\"Josh\", \"Yamamoto\", , \"joshuayamamoto5@gmail.com\", role = \"ctb\"), person(\"Jasme\", \"Lee\", role = \"ctb\"), person(\"Taren\", \"Sanders\", , \"taren.sanders@acu.edu.au\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(\"Ilaria\", \"Prosdocimi\", , \"prosdocimi.ilaria@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(\"Daniel D.\", \"Sjoberg\", , \"danield.sjoberg@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(\"Alex\", \"Reinhart\", , \"areinhar@stat.cmu.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6658-514X\")) )", + "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", + "License": "MIT + file LICENSE", + "URL": "https://broom.tidymodels.org/, https://github.com/tidymodels/broom", + "BugReports": "https://github.com/tidymodels/broom/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "backports", + "cli", + "dplyr (>= 1.0.0)", + "generics (>= 0.0.2)", + "glue", + "lifecycle", + "purrr", + "rlang (>= 1.1.0)", + "stringr", + "tibble (>= 3.0.0)", + "tidyr (>= 1.0.0)" + ], + "Suggests": [ + "AER", + "AUC", + "bbmle", + "betareg (>= 3.2-1)", + "biglm", + "binGroup", + "boot", + "btergm (>= 1.10.6)", + "car (>= 3.1-2)", + "carData", + "caret", + "cluster", + "cmprsk", + "coda", + "covr", + "drc", + "e1071", + "emmeans", + "epiR (>= 2.0.85)", + "ergm (>= 3.10.4)", + "fixest (>= 0.9.0)", + "gam (>= 1.15)", + "gee", + "geepack", + "ggplot2", + "glmnet", + "glmnetUtils", + "gmm", + "Hmisc", + "interp", + "irlba", + "joineRML", + "Kendall", + "knitr", + "ks", + "Lahman", + "lavaan (>= 0.6.18)", + "leaps", + "lfe", + "lm.beta", + "lme4", + "lmodel2", + "lmtest (>= 0.9.38)", + "lsmeans", + "maps", + "margins", + "MASS", + "mclust", + "mediation", + "metafor", + "mfx", + "mgcv", + "mlogit", + "modeldata", + "modeltests (>= 0.1.6)", + "muhaz", + "multcomp", + "network", + "nnet", + "ordinal", + "plm", + "poLCA", + "psych", + "quantreg", + "rmarkdown", + "robust", + "robustbase", + "rsample", + "sandwich", + "spatialreg", + "spdep (>= 1.1)", + "speedglm", + "spelling", + "stats4", + "survey", + "survival (>= 3.6-4)", + "systemfit", + "testthat (>= 3.0.0)", + "tseries", + "vars", + "zoo" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-25", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "Collate": "'aaa-documentation-helper.R' 'null-and-default.R' 'aer.R' 'auc.R' 'base.R' 'bbmle.R' 'betareg.R' 'biglm.R' 'bingroup.R' 'boot.R' 'broom-package.R' 'broom.R' 'btergm.R' 'car.R' 'caret.R' 'cluster.R' 'cmprsk.R' 'data-frame.R' 'deprecated-0-7-0.R' 'drc.R' 'emmeans.R' 'epiR.R' 'ergm.R' 'fixest.R' 'gam.R' 'geepack.R' 'glmnet-cv-glmnet.R' 'glmnet-glmnet.R' 'gmm.R' 'hmisc.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'joinerml.R' 'kendall.R' 'ks.R' 'lavaan.R' 'leaps.R' 'lfe.R' 'list-irlba.R' 'list-optim.R' 'list-svd.R' 'list-xyz.R' 'list.R' 'lm-beta.R' 'lmodel2.R' 'lmtest.R' 'maps.R' 'margins.R' 'mass-fitdistr.R' 'mass-negbin.R' 'mass-polr.R' 'mass-ridgelm.R' 'stats-lm.R' 'mass-rlm.R' 'mclust.R' 'mediation.R' 'metafor.R' 'mfx.R' 'mgcv.R' 'mlogit.R' 'muhaz.R' 'multcomp.R' 'nnet.R' 'nobs.R' 'ordinal-clm.R' 'ordinal-clmm.R' 'plm.R' 'polca.R' 'psych.R' 'stats-nls.R' 'quantreg-nlrq.R' 'quantreg-rq.R' 'quantreg-rqs.R' 'robust-glmrob.R' 'robust-lmrob.R' 'robustbase-glmrob.R' 'robustbase-lmrob.R' 'sp.R' 'spdep.R' 'speedglm-speedglm.R' 'speedglm-speedlm.R' 'stats-anova.R' 'stats-arima.R' 'stats-decompose.R' 'stats-factanal.R' 'stats-glm.R' 'stats-htest.R' 'stats-kmeans.R' 'stats-loess.R' 'stats-mlm.R' 'stats-prcomp.R' 'stats-smooth.spline.R' 'stats-summary-lm.R' 'stats-time-series.R' 'survey.R' 'survival-aareg.R' 'survival-cch.R' 'survival-coxph.R' 'survival-pyears.R' 'survival-survdiff.R' 'survival-survexp.R' 'survival-survfit.R' 'survival-survreg.R' 'systemfit.R' 'tseries.R' 'utilities.R' 'vars.R' 'zoo.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "David Robinson [aut], Alex Hayes [aut] (ORCID: ), Simon Couch [aut] (ORCID: ), Emil Hvitfeldt [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Indrajeet Patil [ctb] (ORCID: ), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (ORCID: ), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (ORCID: ), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (ORCID: ), Jasper Cooper [ctb] (ORCID: ), E Auden Krauska [ctb] (ORCID: ), Alex Wang [ctb], Malcolm Barrett [ctb] (ORCID: ), Charles Gray [ctb] (ORCID: ), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (ORCID: ), Eduard Szoecs [ctb], Frederik Aust [ctb] (ORCID: ), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (ORCID: ), Bruna Wundervald [ctb] (ORCID: ), Joyce Cahoon [ctb] (ORCID: ), Grant McDermott [ctb] (ORCID: ), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (ORCID: ), Lukas Wallrich [ctb] (ORCID: ), James Martherus [ctb] (ORCID: ), Chuliang Xiao [ctb] (ORCID: ), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (ORCID: ), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (ORCID: ), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (ORCID: ), Ilaria Prosdocimi [ctb] (ORCID: ), Daniel D. Sjoberg [ctb] (ORCID: ), Alex Reinhart [ctb] (ORCID: )", + "Maintainer": "Emil Hvitfeldt ", + "Repository": "CRAN" + }, + "bslib": { + "Package": "bslib", + "Version": "0.10.0", + "Source": "Repository", + "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", + "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", + "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", + "BugReports": "https://github.com/rstudio/bslib/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Imports": [ + "base64enc", + "cachem", + "fastmap (>= 1.1.1)", + "grDevices", + "htmltools (>= 0.5.8)", + "jquerylib (>= 0.1.3)", + "jsonlite", + "lifecycle", + "memoise (>= 2.0.1)", + "mime", + "rlang", + "sass (>= 0.4.9)" + ], + "Suggests": [ + "brand.yml", + "bsicons", + "curl", + "fontawesome", + "future", + "ggplot2", + "knitr", + "lattice", + "magrittr", + "rappdirs", + "rmarkdown (>= 2.7)", + "shiny (>= 1.11.1)", + "testthat", + "thematic", + "tools", + "utils", + "withr", + "yaml" + ], + "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", + "Config/Needs/routine": "chromote, desc, renv", + "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-code-editor.R' 'input-dark-mode.R' 'input-submit.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'toast.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (ORCID: ), Joe Cheng [aut], Garrick Aden-Buie [aut] (ORCID: ), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "cachem": { + "Package": "cachem", + "Version": "1.1.0", + "Source": "Repository", + "Title": "Cache R Objects with Automatic Pruning", + "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "ByteCompile": "true", + "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", + "Imports": [ + "rlang", + "fastmap (>= 1.2.0)" + ], + "Suggests": [ + "testthat" + ], + "RoxygenNote": "7.2.3", + "Config/Needs/routine": "lobstr", + "Config/Needs/website": "pkgdown", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "car": { + "Package": "car", + "Version": "3.1-5", + "Source": "Repository", + "Date": "2026-01-05", + "Title": "Companion to Applied Regression", + "Authors@R": "c(person(\"John\", \"Fox\", role =\"aut\" , email = \"jfox@mcmaster.ca\"), person(\"Sanford\", \"Weisberg\", role = \"aut\", email = \"sandy@umn.edu\"), person(\"Brad\", \"Price\", role = c(\"aut\", \"cre\"), email = \"brad.price@mail.wvu.edu\"), person(\"Daniel\", \"Adler\", role=\"ctb\"), person(\"Douglas\", \"Bates\", role = \"ctb\"), person(\"Gabriel\", \"Baud-Bovy\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role=\"ctb\"), person(\"Steve\", \"Ellison\", role=\"ctb\"), person(\"David\", \"Firth\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Gregor\", \"Gorjanc\", role = \"ctb\"), person(\"Spencer\", \"Graves\", role = \"ctb\"), person(\"Richard\", \"Heiberger\", role = \"ctb\"), person(\"Pavel\", \"Krivitsky\", role = \"ctb\"), person(\"Rafael\", \"Laboissiere\", role = \"ctb\"), person(\"Martin\", \"Maechler\", role=\"ctb\"), person(\"Georges\", \"Monette\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Henric\", \"Nilsson\", role = \"ctb\"), person(\"Derek\", \"Ogle\", role = \"ctb\"), person(\"Iain\", \"Proctor\", role = \"ctb\"), person(\"Brian\", \"Ripley\", role = \"ctb\"), person(\"Tom\", \"Short\", role=\"ctb\"), person(\"William\", \"Venables\", role = \"ctb\"), person(\"Steve\", \"Walker\", role=\"ctb\"), person(\"David\", \"Winsemius\", role=\"ctb\"), person(\"Achim\", \"Zeileis\", role = \"ctb\"), person(\"R-Core\", role=\"ctb\"))", + "Depends": [ + "R (>= 3.5.0)", + "carData (>= 3.0-0)" + ], + "Imports": [ + "abind", + "Formula", + "MASS", + "mgcv", + "nnet", + "pbkrtest (>= 0.4-4)", + "quantreg", + "grDevices", + "utils", + "stats", + "graphics", + "lme4 (>= 1.1-27.1)", + "nlme", + "scales" + ], + "Suggests": [ + "alr4", + "boot", + "coxme", + "effects", + "knitr", + "leaps", + "lmtest", + "Matrix", + "MatrixModels", + "ordinal", + "plotrix", + "mvtnorm", + "rgl (>= 0.111.3)", + "rio", + "sandwich", + "SparseM", + "survival", + "survey" + ], + "ByteCompile": "yes", + "LazyLoad": "yes", + "Description": "Functions to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Third Edition, Sage, 2019.", + "License": "GPL (>= 2)", + "URL": "https://github.com/bprice2652/car_repo, https://CRAN.R-project.org/package=car, https://z.umn.edu/carbook", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "John Fox [aut], Sanford Weisberg [aut], Brad Price [aut, cre], Daniel Adler [ctb], Douglas Bates [ctb], Gabriel Baud-Bovy [ctb], Ben Bolker [ctb], Steve Ellison [ctb], David Firth [ctb], Michael Friendly [ctb], Gregor Gorjanc [ctb], Spencer Graves [ctb], Richard Heiberger [ctb], Pavel Krivitsky [ctb], Rafael Laboissiere [ctb], Martin Maechler [ctb], Georges Monette [ctb], Duncan Murdoch [ctb], Henric Nilsson [ctb], Derek Ogle [ctb], Iain Proctor [ctb], Brian Ripley [ctb], Tom Short [ctb], William Venables [ctb], Steve Walker [ctb], David Winsemius [ctb], Achim Zeileis [ctb], R-Core [ctb]", + "Maintainer": "Brad Price ", + "Repository": "CRAN" + }, + "carData": { + "Package": "carData", + "Version": "3.0-6", + "Source": "Repository", + "Date": "2026-01-30", + "Title": "Companion to Applied Regression Data Sets", + "Authors@R": "c(person(\"John\", \"Fox\", role = \"aut\", email = \"jfox@mcmaster.ca\"), person(\"Sanford\", \"Weisberg\", role = \"aut\", email = \"sandy@umn.edu\"), person(\"Brad\", \"Price\", role = c(\"aut\", \"cre\"), email = \"brad.price@mail.wvu.edu\"))", + "Depends": [ + "R (>= 3.5.0)" + ], + "Suggests": [ + "car (>= 3.0-0)" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "Description": "Datasets to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Third Edition, Sage (2019).", + "License": "GPL (>= 2)", + "URL": "https://r-forge.r-project.org/projects/car/, https://CRAN.R-project.org/package=carData, https://z.umn.edu/carbook", + "NeedsCompilation": "no", + "Author": "John Fox [aut], Sanford Weisberg [aut], Brad Price [aut, cre]", + "Maintainer": "Brad Price ", + "Repository": "CRAN" + }, + "cli": { + "Package": "cli", + "Version": "3.6.5", + "Source": "Repository", + "Title": "Helpers for Developing Command Line Interfaces", + "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", + "License": "MIT + file LICENSE", + "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", + "BugReports": "https://github.com/r-lib/cli/issues", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "callr", + "covr", + "crayon", + "digest", + "glue (>= 1.6.0)", + "grDevices", + "htmltools", + "htmlwidgets", + "knitr", + "methods", + "processx", + "ps (>= 1.3.4.9000)", + "rlang (>= 1.0.2.9003)", + "rmarkdown", + "rprojroot", + "rstudioapi", + "testthat (>= 3.2.0)", + "tibble", + "whoami", + "withr" + ], + "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "codetools": { + "Package": "codetools", + "Version": "0.2-20", + "Source": "Repository", + "Priority": "recommended", + "Author": "Luke Tierney ", + "Description": "Code analysis tools for R.", + "Title": "Code Analysis Tools for R", + "Depends": [ + "R (>= 2.1)" + ], + "Maintainer": "Luke Tierney ", + "URL": "https://gitlab.com/luke-tierney/codetools", + "License": "GPL", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "colorspace": { + "Package": "colorspace", + "Version": "2.1-2", + "Source": "Repository", + "Date": "2025-09-22", + "Title": "A Toolbox for Manipulating and Assessing Colors and Palettes", + "Authors@R": "c(person(given = \"Ross\", family = \"Ihaka\", role = \"aut\", email = \"ihaka@stat.auckland.ac.nz\"), person(given = \"Paul\", family = \"Murrell\", role = \"aut\", email = \"paul@stat.auckland.ac.nz\", comment = c(ORCID = \"0000-0002-3224-8858\")), person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(given = c(\"Jason\", \"C.\"), family = \"Fisher\", role = \"aut\", email = \"jfisher@usgs.gov\", comment = c(ORCID = \"0000-0001-9032-8912\")), person(given = \"Reto\", family = \"Stauffer\", role = \"aut\", email = \"Reto.Stauffer@uibk.ac.at\", comment = c(ORCID = \"0000-0002-3798-5507\")), person(given = c(\"Claus\", \"O.\"), family = \"Wilke\", role = \"aut\", email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(given = c(\"Claire\", \"D.\"), family = \"McWhite\", role = \"aut\", email = \"claire.mcwhite@utmail.utexas.edu\", comment = c(ORCID = \"0000-0001-7346-3047\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")))", + "Description": "Carries out mapping between assorted color spaces including RGB, HSV, HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB, and polar CIELAB. Qualitative, sequential, and diverging color palettes based on HCL colors are provided along with corresponding ggplot2 color scales. Color palette choice is aided by an interactive app (with either a Tcl/Tk or a shiny graphical user interface) and shiny apps with an HCL color picker and a color vision deficiency emulator. Plotting functions for displaying and assessing palettes include color swatches, visualizations of the HCL space, and trajectories in HCL and/or RGB spectrum. Color manipulation functions include: desaturation, lightening/darkening, mixing, and simulation of color vision deficiencies (deutanomaly, protanomaly, tritanomaly). Details can be found on the project web page at and in the accompanying scientific paper: Zeileis et al. (2020, Journal of Statistical Software, ).", + "Depends": [ + "R (>= 3.0.0)", + "methods" + ], + "Imports": [ + "graphics", + "grDevices", + "stats" + ], + "Suggests": [ + "datasets", + "utils", + "KernSmooth", + "MASS", + "kernlab", + "mvtnorm", + "vcd", + "tcltk", + "shiny", + "shinyjs", + "ggplot2", + "dplyr", + "scales", + "grid", + "png", + "jpeg", + "knitr", + "rmarkdown", + "RColorBrewer", + "rcartocolor", + "scico", + "viridis", + "wesanderson" + ], + "VignetteBuilder": "knitr", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://colorspace.R-Forge.R-project.org/, https://hclwizard.org/", + "BugReports": "https://colorspace.R-Forge.R-project.org/contact.html", + "LazyData": "yes", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Ross Ihaka [aut], Paul Murrell [aut] (ORCID: ), Kurt Hornik [aut] (ORCID: ), Jason C. Fisher [aut] (ORCID: ), Reto Stauffer [aut] (ORCID: ), Claus O. Wilke [aut] (ORCID: ), Claire D. McWhite [aut] (ORCID: ), Achim Zeileis [aut, cre] (ORCID: )", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "commonmark": { + "Package": "commonmark", + "Version": "2.0.0", + "Source": "Repository", + "Type": "Package", + "Title": "High Performance CommonMark and Github Markdown Rendering in R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", + "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", + "License": "BSD_2_clause + file LICENSE", + "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", + "BugReports": "https://github.com/r-lib/commonmark/issues", + "Suggests": [ + "curl", + "testthat", + "xml2" + ], + "RoxygenNote": "7.3.2", + "Language": "en-US", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), John MacFarlane [cph] (Author of cmark)", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "cowplot": { + "Package": "cowplot", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Streamlined Plot Theme and Plot Annotations for 'ggplot2'", + "Authors@R": "person( given = \"Claus O.\", family = \"Wilke\", role = c(\"aut\", \"cre\"), email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\") )", + "Description": "Provides various features that help with creating publication-quality figures with 'ggplot2', such as a set of themes, functions to align plots and arrange them into complex compound figures, and functions that make it easy to annotate plots and or mix plots with images. The package was originally written for internal use in the Wilke lab, hence the name (Claus O. Wilke's plot package). It has also been used extensively in the book Fundamentals of Data Visualization.", + "URL": "https://wilkelab.org/cowplot/", + "BugReports": "https://github.com/wilkelab/cowplot/issues", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "ggplot2 (>= 3.5.2)", + "grid", + "gtable", + "grDevices", + "methods", + "rlang", + "scales" + ], + "License": "GPL-2", + "Suggests": [ + "Cairo", + "covr", + "dplyr", + "forcats", + "gridGraphics (>= 0.4-0)", + "knitr", + "lattice", + "magick", + "maps", + "PASWR", + "patchwork", + "rmarkdown", + "ragg", + "testthat (>= 1.0.0)", + "tidyr", + "vdiffr (>= 0.3.0)", + "VennDiagram" + ], + "VignetteBuilder": "knitr", + "Collate": "'add_sub.R' 'align_plots.R' 'as_grob.R' 'as_gtable.R' 'axis_canvas.R' 'cowplot.R' 'draw.R' 'get_plot_component.R' 'get_axes.R' 'get_titles.R' 'get_legend.R' 'get_panel.R' 'gtable.R' 'key_glyph.R' 'plot_grid.R' 'save.R' 'set_null_device.R' 'setup.R' 'stamp.R' 'themes.R' 'utils_ggplot2.R'", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Claus O. Wilke [aut, cre] (ORCID: )", + "Maintainer": "Claus O. Wilke ", + "Repository": "CRAN" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.5.3", + "Source": "Repository", + "Title": "A C++11 Interface for R's C Interface", + "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", + "License": "MIT + file LICENSE", + "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", + "BugReports": "https://github.com/r-lib/cpp11/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "bench", + "brio", + "callr", + "cli", + "covr", + "decor", + "desc", + "ggplot2", + "glue", + "knitr", + "lobstr", + "mockery", + "progress", + "rmarkdown", + "scales", + "Rcpp", + "testthat (>= 3.2.0)", + "tibble", + "utils", + "vctrs", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Davis Vaughan [aut, cre] (ORCID: ), Jim Hester [aut] (ORCID: ), Romain François [aut] (ORCID: ), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.2", + "Source": "Repository", + "Type": "Package", + "Title": "Inter-Widget Interactivity for HTML Widgets", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(, \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )", + "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk", + "BugReports": "https://github.com/rstudio/crosstalk/issues", + "Imports": [ + "htmltools (>= 0.3.6)", + "jsonlite", + "lazyeval", + "R6" + ], + "Suggests": [ + "bslib", + "ggplot2", + "sass", + "shiny", + "testthat (>= 2.1.0)" + ], + "Config/Needs/website": "jcheng5/d3scatter, DT, leaflet, rmarkdown", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "curl": { + "Package": "curl", + "Version": "7.0.0", + "Source": "Repository", + "Type": "Package", + "Title": "A Modern and Flexible Web Client for R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", + "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", + "License": "MIT + file LICENSE", + "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", + "URL": "https://jeroen.r-universe.dev/curl", + "BugReports": "https://github.com/jeroen/curl/issues", + "Suggests": [ + "spelling", + "testthat (>= 1.0.0)", + "knitr", + "jsonlite", + "later", + "rmarkdown", + "httpuv (>= 1.4.4)", + "webutils" + ], + "VignetteBuilder": "knitr", + "Depends": [ + "R (>= 3.0.0)" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "data.table": { + "Package": "data.table", + "Version": "1.18.2.1", + "Source": "Repository", + "Title": "Extension of `data.frame`", + "Depends": [ + "R (>= 3.4.0)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "bit64 (>= 4.0.0)", + "bit (>= 4.0.4)", + "R.utils (>= 2.13.0)", + "xts", + "zoo (>= 1.8-1)", + "yaml", + "knitr", + "markdown" + ], + "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.", + "License": "MPL-2.0 | file LICENSE", + "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table, https://github.com/Rdatatable/data.table", + "BugReports": "https://github.com/Rdatatable/data.table/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "ByteCompile": "TRUE", + "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\") )", + "NeedsCompilation": "yes", + "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb]", + "Maintainer": "Tyson Barrett ", + "Repository": "CRAN" + }, + "digest": { + "Package": "digest", + "Version": "0.6.39", + "Source": "Repository", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8059-9767\")), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8552-0029\")), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0492-6647\")), person(\"Ion\", \"Suruceanu\", role=\"ctb\", comment = c(ORCID = \"0009-0005-6446-4909\")), person(\"Bill\", \"Denney\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\", comment = c(ORCID = \"0009-0008-8480-1329\")), person(\"Sergey\", \"Fedorov\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5970-7233\")), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\", comment = c(ORCID = \"0009-0000-5948-4503\")), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Carl\", \"Pearson\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0701-7860\")))", + "Date": "2025-11-19", + "Title": "Create Compact Hash Digests of R Objects", + "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as 'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", + "URL": "https://github.com/eddelbuettel/digest, https://eddelbuettel.github.io/digest/, https://dirk.eddelbuettel.com/code/digest.html", + "BugReports": "https://github.com/eddelbuettel/digest/issues", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "utils" + ], + "License": "GPL (>= 2)", + "Suggests": [ + "tinytest", + "simplermarkdown", + "rbenchmark" + ], + "VignetteBuilder": "simplermarkdown", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Antoine Lucas [ctb] (ORCID: ), Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (ORCID: ), Simon Urbanek [ctb] (ORCID: ), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb] (ORCID: ), Duncan Murdoch [ctb], Jim Hester [ctb] (ORCID: ), Wush Wu [ctb] (ORCID: ), Qiang Kou [ctb] (ORCID: ), Thierry Onkelinx [ctb] (ORCID: ), Michel Lang [ctb] (ORCID: ), Viliam Simko [ctb], Kurt Hornik [ctb] (ORCID: ), Radford Neal [ctb] (ORCID: ), Kendon Bell [ctb] (ORCID: ), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb] (ORCID: ), Ion Suruceanu [ctb] (ORCID: ), Bill Denney [ctb] (ORCID: ), Dirk Schumacher [ctb], András Svraka [ctb] (ORCID: ), Sergey Fedorov [ctb] (ORCID: ), Will Landau [ctb] (ORCID: ), Floris Vanderhaeghe [ctb] (ORCID: ), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (ORCID: ), Mark van der Loo [ctb] (ORCID: ), Chris Muir [ctb] (ORCID: ), Moritz Beller [ctb] (ORCID: ), Sebastian Campbell [ctb] (ORCID: ), Winston Chang [ctb] (ORCID: ), Dean Attali [ctb] (ORCID: ), Michael Chirico [ctb] (ORCID: ), Kevin Ushey [ctb] (ORCID: ), Carl Pearson [ctb] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "doBy": { + "Package": "doBy", + "Version": "4.7.1", + "Source": "Repository", + "Title": "Groupwise Statistics, LSmeans, Linear Estimates, Utilities", + "Authors@R": "c( person(given = \"Ulrich\", family = \"Halekoh\", email = \"uhalekoh@health.sdu.dk\", role = c(\"aut\", \"cph\")), person(given = \"Søren\", family = \"Højsgaard\", email = \"sorenh@math.aau.dk\", role = c(\"aut\", \"cre\", \"cph\")) )", + "Description": "Utility package containing: Main categories: Working with grouped data: 'do' something to data when stratified 'by' some variables. General linear estimates. Data handling utilities. Functional programming, in particular restrict functions to a smaller domain. Miscellaneous functions for data handling. Model stability in connection with model selection. Miscellaneous other tools.", + "Encoding": "UTF-8", + "VignetteBuilder": "knitr", + "LazyData": "true", + "LazyDataCompression": "xz", + "URL": "https://github.com/hojsgaard/doBy", + "License": "GPL (>= 2)", + "Depends": [ + "R (>= 4.2.0)", + "methods" + ], + "Imports": [ + "boot", + "broom", + "cowplot", + "Deriv", + "dplyr", + "forecast", + "ggplot2", + "MASS", + "Matrix", + "modelr", + "microbenchmark", + "rlang", + "purrr", + "tibble", + "tidyr" + ], + "Suggests": [ + "geepack", + "knitr", + "lme4", + "markdown", + "rmarkdown", + "multcomp", + "pbkrtest (>= 0.5.2)", + "survival", + "testthat (>= 2.1.0)" + ], + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Ulrich Halekoh [aut, cph], Søren Højsgaard [aut, cre, cph]", + "Maintainer": "Søren Højsgaard ", + "Repository": "CRAN" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.2.0", + "Source": "Repository", + "Type": "Package", + "Title": "A Grammar of Data Manipulation", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", + "License": "MIT + file LICENSE", + "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", + "BugReports": "https://github.com/tidyverse/dplyr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli (>= 3.6.2)", + "generics", + "glue (>= 1.3.2)", + "lifecycle (>= 1.0.5)", + "magrittr (>= 1.5)", + "methods", + "pillar (>= 1.9.0)", + "R6", + "rlang (>= 1.1.7)", + "tibble (>= 3.2.0)", + "tidyselect (>= 1.2.0)", + "utils", + "vctrs (>= 0.7.1)" + ], + "Suggests": [ + "broom", + "covr", + "DBI", + "dbplyr (>= 2.2.1)", + "ggplot2", + "knitr", + "Lahman", + "lobstr", + "nycflights13", + "purrr", + "rmarkdown", + "RSQLite", + "stringi (>= 1.7.6)", + "testthat (>= 3.1.5)", + "tidyr (>= 1.3.0)", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Romain François [aut] (ORCID: ), Lionel Henry [aut], Kirill Müller [aut] (ORCID: ), Davis Vaughan [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "drc": { + "Package": "drc", + "Version": "3.0-1", + "Source": "Repository", + "Date": "2016-08-25", + "Title": "Analysis of Dose-Response Curves", + "Author": "Christian Ritz , Jens C. Strebig ", + "Maintainer": "Christian Ritz ", + "Depends": [ + "R (>= 2.0.0)", + "MASS", + "stats" + ], + "Imports": [ + "car", + "gtools", + "multcomp", + "plotrix", + "scales" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "Description": "Analysis of dose-response data is made available through a suite of flexible and versatile model fitting and after-fitting functions.", + "License": "GPL-2 | file LICENCE", + "URL": "http://www.r-project.org, http://www.bioassay.dk", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "evaluate": { + "Package": "evaluate", + "Version": "1.0.5", + "Source": "Repository", + "Type": "Package", + "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", + "License": "MIT + file LICENSE", + "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", + "BugReports": "https://github.com/r-lib/evaluate/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "callr", + "covr", + "ggplot2 (>= 3.3.6)", + "lattice", + "methods", + "pkgload", + "ragg (>= 1.4.0)", + "rlang (>= 1.1.5)", + "knitr", + "testthat (>= 3.0.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (ORCID: ), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "farver": { + "Package": "farver", + "Version": "2.1.2", + "Source": "Repository", + "Type": "Package", + "Title": "High Performance Colour Space Manipulation", + "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", + "License": "MIT + file LICENSE", + "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", + "BugReports": "https://github.com/thomasp85/farver/issues", + "Suggests": [ + "covr", + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "NeedsCompilation": "yes", + "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Fast Data Structures", + "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", + "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Suggests": [ + "testthat (>= 2.1.1)" + ], + "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", + "BugReports": "https://github.com/r-lib/fastmap/issues", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.3", + "Source": "Repository", + "Type": "Package", + "Title": "Easily Work with 'Font Awesome' Icons", + "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", + "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", + "BugReports": "https://github.com/rstudio/fontawesome/issues", + "Encoding": "UTF-8", + "ByteCompile": "true", + "RoxygenNote": "7.3.2", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "rlang (>= 1.0.6)", + "htmltools (>= 0.5.1.1)" + ], + "Suggests": [ + "covr", + "dplyr (>= 1.0.8)", + "gt (>= 0.9.0)", + "knitr (>= 1.31)", + "testthat (>= 3.0.0)", + "rsvg" + ], + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN" + }, + "forecast": { + "Package": "forecast", + "Version": "9.0.2", + "Source": "Repository", + "Title": "Forecasting Functions for Time Series and Linear Models", + "Description": "Methods and tools for displaying and analysing univariate time series forecasts including exponential smoothing via state space models and automatic ARIMA modelling.", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "colorspace", + "fracdiff", + "generics (>= 0.1.2)", + "ggplot2 (>= 3.4.0)", + "graphics", + "lmtest", + "magrittr", + "nnet", + "parallel", + "Rcpp (>= 0.12.4)", + "stats", + "timeDate", + "urca", + "withr", + "zoo" + ], + "Suggests": [ + "forecTheta", + "knitr", + "methods", + "rmarkdown", + "rticles", + "scales", + "seasonal", + "testthat (>= 3.3.0)", + "uroot" + ], + "LinkingTo": [ + "Rcpp (>= 0.12.4)", + "RcppArmadillo (>= 0.2.35)" + ], + "LazyData": "yes", + "ByteCompile": "TRUE", + "Authors@R": "c( person(\"Rob\", \"Hyndman\", email = \"Rob.Hyndman@monash.edu\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0002-2140-5352\")), person(\"George\", \"Athanasopoulos\", role = \"aut\", comment = c(ORCID = \"0000-0002-5389-2802\")), person(\"Christoph\", \"Bergmeir\", role = \"aut\", comment = c(ORCID = \"0000-0002-3665-9021\")), person(\"Gabriel\", \"Caceres\", role = \"aut\", comment = c(ORCID = \"0000-0002-2947-2023\")), person(\"Leanne\", \"Chhay\", role = \"aut\"), person(\"Kirill\", \"Kuroptev\", role = \"aut\"), person(\"Maximilian\", \"Mücke\", role = \"aut\", comment = c(ORCID = \"0009-0000-9432-9795\")), person(\"Mitchell\", \"O'Hara-Wild\", role = \"aut\", comment = c(ORCID = \"0000-0001-6729-7695\")), person(\"Fotios\", \"Petropoulos\", role = \"aut\", comment = c(ORCID = \"0000-0003-3039-4955\")), person(\"Slava\", \"Razbash\", role = \"aut\"), person(\"Earo\", \"Wang\", role = \"aut\", comment = c(ORCID = \"0000-0001-6448-5260\")), person(\"Farah\", \"Yasmeen\", role = \"aut\", comment = c(ORCID = \"0000-0002-1479-5401\")), person(\"Federico\", \"Garza\", role = \"ctb\"), person(\"Daniele\", \"Girolimetto\", role = \"ctb\"), person(\"Ross\", \"Ihaka\", role = c(\"ctb\", \"cph\")), person(\"R Core Team\", role = c(\"ctb\", \"cph\")), person(\"Daniel\", \"Reid\", role = \"ctb\"), person(\"David\", \"Shaub\", role = \"ctb\"), person(\"Yuan\", \"Tang\", role = \"ctb\", comment = c(ORCID = \"0000-0001-5243-233X\")), person(\"Xiaoqian\", \"Wang\", role = \"ctb\"), person(\"Zhenyu\", \"Zhou\", role = \"ctb\") )", + "BugReports": "https://github.com/robjhyndman/forecast/issues", + "License": "GPL-3", + "URL": "https://pkg.robjhyndman.com/forecast/, https://github.com/robjhyndman/forecast", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Rob Hyndman [aut, cre, cph] (ORCID: ), George Athanasopoulos [aut] (ORCID: ), Christoph Bergmeir [aut] (ORCID: ), Gabriel Caceres [aut] (ORCID: ), Leanne Chhay [aut], Kirill Kuroptev [aut], Maximilian Mücke [aut] (ORCID: ), Mitchell O'Hara-Wild [aut] (ORCID: ), Fotios Petropoulos [aut] (ORCID: ), Slava Razbash [aut], Earo Wang [aut] (ORCID: ), Farah Yasmeen [aut] (ORCID: ), Federico Garza [ctb], Daniele Girolimetto [ctb], Ross Ihaka [ctb, cph], R Core Team [ctb, cph], Daniel Reid [ctb], David Shaub [ctb], Yuan Tang [ctb] (ORCID: ), Xiaoqian Wang [ctb], Zhenyu Zhou [ctb]", + "Maintainer": "Rob Hyndman ", + "Repository": "CRAN" + }, + "fracdiff": { + "Package": "fracdiff", + "Version": "1.5-3", + "Source": "Repository", + "VersionNote": "Released 1.5-0 on 2019-12-09, 1.5-1 on 2020-01-20, 1.5-2 on 2022-10-31", + "Date": "2024-02-01", + "Title": "Fractionally Differenced ARIMA aka ARFIMA(P,d,q) Models", + "Authors@R": "c(person(\"Martin\",\"Maechler\", role=c(\"aut\",\"cre\"), email=\"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(\"Chris\", \"Fraley\", role=c(\"ctb\",\"cph\"), comment = \"S original; Fortran code\") , person(\"Friedrich\", \"Leisch\", role = \"ctb\", comment = c(\"R port\", ORCID = \"0000-0001-7278-1983\")) , person(\"Valderio\", \"Reisen\", role=\"ctb\", comment = \"fdGPH() & fdSperio()\") , person(\"Artur\", \"Lemonte\", role=\"ctb\", comment = \"fdGPH() & fdSperio()\") , person(\"Rob\", \"Hyndman\", email=\"Rob.Hyndman@monash.edu\", role=\"ctb\", comment = c(\"residuals() & fitted()\", ORCID = \"0000-0002-2140-5352\")) )", + "Description": "Maximum likelihood estimation of the parameters of a fractionally differenced ARIMA(p,d,q) model (Haslett and Raftery, Appl.Statistics, 1989); including inference and basic methods. Some alternative algorithms to estimate \"H\".", + "Imports": [ + "stats" + ], + "Suggests": [ + "longmemo", + "forecast", + "urca" + ], + "License": "GPL (>= 2)", + "URL": "https://github.com/mmaechler/fracdiff", + "BugReports": "https://github.com/mmaechler/fracdiff/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Martin Maechler [aut, cre] (), Chris Fraley [ctb, cph] (S original; Fortran code), Friedrich Leisch [ctb] (R port, ), Valderio Reisen [ctb] (fdGPH() & fdSperio()), Artur Lemonte [ctb] (fdGPH() & fdSperio()), Rob Hyndman [ctb] (residuals() & fitted(), )", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "fs": { + "Package": "fs", + "Version": "2.0.1", + "Source": "Repository", + "Title": "Cross-Platform File System Operations Based on 'libuv'", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", + "License": "MIT + file LICENSE", + "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", + "BugReports": "https://github.com/r-lib/fs/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "covr", + "crayon", + "knitr", + "pillar (>= 1.0.0)", + "rmarkdown", + "spelling", + "testthat (>= 3.0.0)", + "tibble (>= 1.1.0)", + "vctrs (>= 0.3.0)", + "withr" + ], + "VignetteBuilder": "knitr", + "SystemRequirements": "libuv: libuv-devel (rpm) or libuv1-dev (deb). Alternatively to build the vendored libuv 'cmake' is required. GNU make.", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "generics": { + "Package": "generics", + "Version": "0.1.4", + "Source": "Repository", + "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", + "License": "MIT + file LICENSE", + "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", + "BugReports": "https://github.com/r-lib/generics/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "covr", + "pkgload", + "testthat (>= 3.0.0)", + "tibble", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "ggplot2": { + "Package": "ggplot2", + "Version": "4.0.2", + "Source": "Repository", + "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.", + "License": "MIT + file LICENSE", + "URL": "https://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2", + "BugReports": "https://github.com/tidyverse/ggplot2/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "grDevices", + "grid", + "gtable (>= 0.3.6)", + "isoband", + "lifecycle (> 1.0.1)", + "rlang (>= 1.1.0)", + "S7", + "scales (>= 1.4.0)", + "stats", + "vctrs (>= 0.6.0)", + "withr (>= 2.5.0)" + ], + "Suggests": [ + "broom", + "covr", + "dplyr", + "ggplot2movies", + "hexbin", + "Hmisc", + "hms", + "knitr", + "mapproj", + "maps", + "MASS", + "mgcv", + "multcomp", + "munsell", + "nlme", + "profvis", + "quantreg", + "quarto", + "ragg (>= 1.2.6)", + "RColorBrewer", + "roxygen2", + "rpart", + "sf (>= 0.7-3)", + "svglite (>= 2.1.2)", + "testthat (>= 3.1.5)", + "tibble", + "vdiffr (>= 1.0.6)", + "xml2" + ], + "Enhances": [ + "sp" + ], + "VignetteBuilder": "quarto", + "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'all-classes.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'annotation-borders.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'scale-type.R' 'layer.R' 'make-constructor.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-map.R' 'fortify-models.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-tile.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-point.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'properties.R' 'margins.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-summary-2d.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-connect.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-manual.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'theme-sub.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (ORCID: ), Kohske Takahashi [aut], Claus Wilke [aut] (ORCID: ), Kara Woo [aut] (ORCID: ), Hiroaki Yutani [aut] (ORCID: ), Dewey Dunnington [aut] (ORCID: ), Teun van den Brand [aut] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "glue": { + "Package": "glue", + "Version": "1.8.0", + "Source": "Repository", + "Title": "Interpreted String Literals", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", + "License": "MIT + file LICENSE", + "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", + "BugReports": "https://github.com/tidyverse/glue/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "crayon", + "DBI (>= 1.2.0)", + "dplyr", + "knitr", + "magrittr", + "rlang", + "rmarkdown", + "RSQLite", + "testthat (>= 3.2.0)", + "vctrs (>= 0.3.0)", + "waldo (>= 0.5.3)", + "withr" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN" + }, + "gtable": { + "Package": "gtable", + "Version": "0.3.6", + "Source": "Repository", + "Title": "Arrange 'Grobs' in Tables", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects so that complex compositions can be built up sequentially.", + "License": "MIT + file LICENSE", + "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", + "BugReports": "https://github.com/r-lib/gtable/issues", + "Depends": [ + "R (>= 4.0)" + ], + "Imports": [ + "cli", + "glue", + "grid", + "lifecycle", + "rlang (>= 1.1.0)", + "stats" + ], + "Suggests": [ + "covr", + "ggplot2", + "knitr", + "profvis", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2024-10-25", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "gtools": { + "Package": "gtools", + "Version": "3.9.5", + "Source": "Repository", + "Title": "Various R Programming Tools", + "Description": "Functions to assist in R programming, including: - assist in developing, updating, and maintaining R and R packages ('ask', 'checkRVersion', 'getDependencies', 'keywords', 'scat'), - calculate the logit and inverse logit transformations ('logit', 'inv.logit'), - test if a value is missing, empty or contains only NA and NULL values ('invalid'), - manipulate R's .Last function ('addLast'), - define macros ('defmacro'), - detect odd and even integers ('odd', 'even'), - convert strings containing non-ASCII characters (like single quotes) to plain ASCII ('ASCIIfy'), - perform a binary search ('binsearch'), - sort strings containing both numeric and character components ('mixedsort'), - create a factor variable from the quantiles of a continuous variable ('quantcut'), - enumerate permutations and combinations ('combinations', 'permutation'), - calculate and convert between fold-change and log-ratio ('foldchange', 'logratio2foldchange', 'foldchange2logratio'), - calculate probabilities and generate random numbers from Dirichlet distributions ('rdirichlet', 'ddirichlet'), - apply a function over adjacent subsets of a vector ('running'), - modify the TCP_NODELAY ('de-Nagle') flag for socket objects, - efficient 'rbind' of data frames, even if the column names don't match ('smartbind'), - generate significance stars from p-values ('stars.pval'), - convert characters to/from ASCII codes ('asc', 'chr'), - convert character vector to ASCII representation ('ASCIIfy'), - apply title capitalization rules to a character vector ('capwords').", + "Authors@R": "c(person(\"Gregory R.\", \"Warnes\", role = \"aut\"), person(\"Ben\", \"Bolker\", role = c(\"aut\", \"cre\"), email = \"bolker@mcmaster.ca\", comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Thomas\", \"Lumley\", role = \"aut\"), person(\"Arni\", \"Magnusson\", role = \"aut\"), person(\"Bill\", \"Venables\", role = \"aut\"), person(\"Genei\", \"Ryodan\", role = \"aut\"), person(\"Steffen\", \"Moeller\", role = \"aut\"), person(\"Ian\", \"Wilson\", role = \"ctb\"), person(\"Mark\", \"Davis\", role = \"ctb\"), person(\"Nitin\", \"Jain\", role=\"ctb\"), person(\"Scott\", \"Chamberlain\", role = \"ctb\"))", + "License": "GPL-2", + "Depends": [ + "methods", + "stats", + "utils" + ], + "URL": "https://github.com/r-gregmisc/gtools", + "BugReports": "https://github.com/r-gregmisc/gtools/issues", + "Language": "en-US", + "Suggests": [ + "car", + "gplots", + "knitr", + "rstudioapi", + "SGP", + "taxize" + ], + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Gregory R. Warnes [aut], Ben Bolker [aut, cre] (), Thomas Lumley [aut], Arni Magnusson [aut], Bill Venables [aut], Genei Ryodan [aut], Steffen Moeller [aut], Ian Wilson [ctb], Mark Davis [ctb], Nitin Jain [ctb], Scott Chamberlain [ctb]", + "Maintainer": "Ben Bolker ", + "Repository": "CRAN" + }, + "highr": { + "Package": "highr", + "Version": "0.12", + "Source": "Repository", + "Type": "Package", + "Title": "Syntax Highlighting for R Source Code", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", + "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "xfun (>= 0.18)" + ], + "Suggests": [ + "knitr", + "markdown", + "testit" + ], + "License": "GPL", + "URL": "https://github.com/yihui/highr", + "BugReports": "https://github.com/yihui/highr/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.9", + "Source": "Repository", + "Type": "Package", + "Title": "Tools for HTML", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools for HTML generation and output.", + "License": "GPL (>= 2)", + "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", + "BugReports": "https://github.com/rstudio/htmltools/issues", + "Depends": [ + "R (>= 2.14.1)" + ], + "Imports": [ + "base64enc", + "digest", + "fastmap (>= 1.1.0)", + "grDevices", + "rlang (>= 1.0.0)", + "utils" + ], + "Suggests": [ + "Cairo", + "markdown", + "ragg", + "shiny", + "testthat", + "withr" + ], + "Enhances": [ + "knitr" + ], + "Config/Needs/check": "knitr", + "Config/Needs/website": "rstudio/quillt, bench", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.4", + "Source": "Repository", + "Type": "Package", + "Title": "HTML Widgets for R", + "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/ramnathv/htmlwidgets", + "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", + "Imports": [ + "grDevices", + "htmltools (>= 0.5.7)", + "jsonlite (>= 0.9.16)", + "knitr (>= 1.8)", + "rmarkdown", + "yaml" + ], + "Suggests": [ + "testthat" + ], + "Enhances": [ + "shiny (>= 1.1)" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.17", + "Source": "Repository", + "Type": "Package", + "Title": "HTTP and WebSocket Server Library", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", + "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", + "License": "GPL (>= 2) | file LICENSE", + "URL": "https://rstudio.github.io/httpuv/, https://github.com/rstudio/httpuv", + "BugReports": "https://github.com/rstudio/httpuv/issues", + "Depends": [ + "R (>= 2.15.1)" + ], + "Imports": [ + "later (>= 0.8.0)", + "promises", + "R6", + "Rcpp (>= 1.0.7)", + "utils" + ], + "Suggests": [ + "callr", + "curl", + "jsonlite", + "testthat (>= 3.0.0)", + "websocket" + ], + "LinkingTo": [ + "later", + "Rcpp" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-07-01", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "GNU make, zlib", + "Collate": "'RcppExports.R' 'httpuv-package.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC [cph, fnd] (ROR: ), Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "httr": { + "Package": "httr", + "Version": "1.4.8", + "Source": "Repository", + "Title": "Tools for Working with URLs and HTTP", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", + "License": "MIT + file LICENSE", + "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", + "BugReports": "https://github.com/r-lib/httr/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "curl (>= 5.1.0)", + "jsonlite", + "mime", + "openssl (>= 0.8)", + "R6" + ], + "Suggests": [ + "covr", + "httpuv", + "jpeg", + "knitr", + "png", + "readr", + "rmarkdown", + "testthat (>= 0.8.0)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "isoband": { + "Package": "isoband", + "Version": "0.3.0", + "Source": "Repository", + "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.", + "License": "MIT + file LICENSE", + "URL": "https://isoband.r-lib.org, https://github.com/r-lib/isoband", + "BugReports": "https://github.com/r-lib/isoband/issues", + "Imports": [ + "cli", + "grid", + "rlang", + "utils" + ], + "Suggests": [ + "covr", + "ggplot2", + "knitr", + "magick", + "bench", + "rmarkdown", + "sf", + "testthat (>= 3.0.0)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-12-05", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Config/build/compilation-database": "true", + "LinkingTo": [ + "cpp11" + ], + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut] (ORCID: ), Claus O. Wilke [aut] (Original author, ORCID: ), Thomas Lin Pedersen [aut, cre] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Title": "Obtain 'jQuery' as an HTML Dependency Object", + "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", + "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "RoxygenNote": "7.0.2", + "Imports": [ + "htmltools" + ], + "Suggests": [ + "testthat" + ], + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "2.0.0", + "Source": "Repository", + "Title": "A Simple and Robust JSON Parser and Generator for R", + "License": "MIT + file LICENSE", + "Depends": [ + "methods" + ], + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", + "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", + "BugReports": "https://github.com/jeroen/jsonlite/issues", + "Maintainer": "Jeroen Ooms ", + "VignetteBuilder": "knitr, R.rsp", + "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", + "Suggests": [ + "httr", + "vctrs", + "testthat", + "knitr", + "rmarkdown", + "R.rsp", + "sf" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", + "Repository": "CRAN" + }, + "knitr": { + "Package": "knitr", + "Version": "1.51", + "Source": "Repository", + "Type": "Package", + "Title": "A General-Purpose Package for Dynamic Report Generation in R", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "evaluate (>= 0.15)", + "highr (>= 0.11)", + "methods", + "tools", + "xfun (>= 0.52)", + "yaml (>= 2.1.19)" + ], + "Suggests": [ + "bslib", + "DBI (>= 0.4-1)", + "digest", + "formatR", + "gifski", + "gridSVG", + "htmlwidgets (>= 0.7)", + "jpeg", + "JuliaCall (>= 0.11.1)", + "magick", + "litedown", + "markdown (>= 1.3)", + "otel", + "otelsdk", + "png", + "ragg", + "reticulate (>= 1.4)", + "rgl (>= 0.95.1201)", + "rlang", + "rmarkdown", + "sass", + "showtext", + "styler (>= 1.2.0)", + "targets (>= 0.6.0)", + "testit", + "tibble", + "tikzDevice (>= 0.10)", + "tinytex (>= 0.56)", + "webshot", + "rstudioapi", + "svglite" + ], + "License": "GPL", + "URL": "https://yihui.org/knitr/", + "BugReports": "https://github.com/yihui/knitr/issues", + "Encoding": "UTF-8", + "VignetteBuilder": "litedown, knitr", + "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", + "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "labeling": { + "Package": "labeling", + "Version": "0.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Axis Labeling", + "Date": "2023-08-29", + "Author": "Justin Talbot,", + "Maintainer": "Nuno Sempere ", + "Description": "Functions which provide a range of axis labeling algorithms.", + "License": "MIT + file LICENSE | Unlimited", + "Collate": "'labeling.R'", + "NeedsCompilation": "no", + "Imports": [ + "stats", + "graphics" + ], + "Repository": "CRAN" + }, + "later": { + "Package": "later", + "Version": "1.4.8", + "Source": "Repository", + "Type": "Package", + "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", + "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", + "License": "MIT + file LICENSE", + "URL": "https://later.r-lib.org, https://github.com/r-lib/later", + "BugReports": "https://github.com/r-lib/later/issues", + "Depends": [ + "R (>= 3.5)" + ], + "Imports": [ + "Rcpp (>= 1.0.10)", + "rlang" + ], + "Suggests": [ + "knitr", + "nanonext", + "promises", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-07-18", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], Charlie Gao [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", + "Maintainer": "Charlie Gao ", + "Repository": "CRAN" + }, + "lattice": { + "Package": "lattice", + "Version": "0.22-9", + "Source": "Repository", + "Date": "2026-02-03", + "Priority": "recommended", + "Title": "Trellis Graphics for R", + "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )", + "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "KernSmooth", + "MASS", + "latticeExtra", + "colorspace" + ], + "Imports": [ + "grid", + "grDevices", + "graphics", + "stats", + "utils" + ], + "Enhances": [ + "chron", + "zoo" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "https://lattice.r-forge.r-project.org/", + "BugReports": "https://github.com/deepayan/lattice/issues", + "NeedsCompilation": "yes", + "Author": "Deepayan Sarkar [aut, cre] (ORCID: ), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", + "Maintainer": "Deepayan Sarkar ", + "Repository": "CRAN" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.2", + "Source": "Repository", + "Title": "Lazy (Non-Standard) Evaluation", + "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", + "License": "GPL-3", + "LazyData": "true", + "Depends": [ + "R (>= 3.1.0)" + ], + "Suggests": [ + "knitr", + "rmarkdown (>= 0.2.65)", + "testthat", + "covr" + ], + "VignetteBuilder": "knitr", + "RoxygenNote": "6.1.1", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre], RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.5", + "Source": "Repository", + "Title": "Manage the Life Cycle of your Package Functions", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", + "License": "MIT + file LICENSE", + "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", + "BugReports": "https://github.com/r-lib/lifecycle/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "cli (>= 3.4.0)", + "rlang (>= 1.1.0)" + ], + "Suggests": [ + "covr", + "knitr", + "lintr (>= 3.1.0)", + "rmarkdown", + "testthat (>= 3.0.1)", + "tibble", + "tidyverse", + "tools", + "vctrs", + "withr", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, usethis", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "lme4": { + "Package": "lme4", + "Version": "2.0-1", + "Source": "Repository", + "Title": "Linear Mixed-Effects Models using 'Eigen' and S4", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Ben\", \"Bolker\", role = c(\"cre\", \"aut\"), email = \"bbolker+lme4@gmail.com\", comment = c(ORCID = \"0000-0002-2127-0443\")), person(\"Steven\", \"Walker\", role = \"aut\", comment = c(ORCID = \"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\", \"Christensen\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4494-3399\")), person(\"Henrik\", \"Singmann\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Peter\", \"Green\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role = \"ctb\"), person(\"Alexander\", \"Bauer\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", role = \"ctb\", comment = c(ORCID = \"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"aut\", comment = c(ORCID = \"0000-0002-0210-0342\")))", + "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", + "Depends": [ + "R (>= 3.6)", + "Matrix", + "methods", + "stats" + ], + "LinkingTo": [ + "Matrix (>= 1.5-0)", + "Rcpp (>= 0.10.5)", + "RcppEigen (>= 0.3.3.9.4)" + ], + "Imports": [ + "MASS", + "Rdpack", + "boot", + "graphics", + "grid", + "lattice", + "minqa (>= 1.1.15)", + "nlme (>= 3.1-123)", + "nloptr (>= 1.0.4)", + "parallel", + "reformulas (>= 0.4.3.1)", + "rlang", + "splines", + "utils" + ], + "Suggests": [ + "HSAUR3", + "MEMSS", + "car", + "dfoptim", + "gamm4", + "ggplot2", + "glmmTMB", + "knitr", + "merDeriv", + "mgcv", + "mlmRev", + "numDeriv", + "optimx (>= 2013.8.6)", + "pbkrtest", + "rmarkdown", + "rr2", + "semEff", + "statmod", + "testthat (>= 0.8.1)", + "tibble" + ], + "Enhances": [ + "DHARMa", + "performance" + ], + "RdMacros": "Rdpack", + "VignetteBuilder": "knitr", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "https://github.com/lme4/lme4/", + "BugReports": "https://github.com/lme4/lme4/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [cre, aut] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [aut] (ORCID: )", + "Maintainer": "Ben Bolker ", + "Repository": "CRAN" + }, + "lmtest": { + "Package": "lmtest", + "Version": "0.9-40", + "Source": "Repository", + "Title": "Testing Linear Regression Models", + "Date": "2022-03-21", + "Authors@R": "c(person(given = \"Torsten\", family = \"Hothorn\", role = \"aut\", email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = c(\"Richard\", \"W.\"), family = \"Farebrother\", role = \"aut\", comment = \"pan.f\"), person(given = \"Clint\", family = \"Cummins\", role = \"aut\", comment = \"pan.f\"), person(given = \"Giovanni\", family = \"Millo\", role = \"ctb\"), person(given = \"David\", family = \"Mitchell\", role = \"ctb\"))", + "Description": "A collection of tests, data sets, and examples for diagnostic checking in linear regression models. Furthermore, some generic tools for inference in parametric models are provided.", + "LazyData": "yes", + "Depends": [ + "R (>= 3.0.0)", + "stats", + "zoo" + ], + "Suggests": [ + "car", + "strucchange", + "sandwich", + "dynlm", + "stats4", + "survival", + "AER" + ], + "Imports": [ + "graphics" + ], + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "yes", + "Author": "Torsten Hothorn [aut] (), Achim Zeileis [aut, cre] (), Richard W. Farebrother [aut] (pan.f), Clint Cummins [aut] (pan.f), Giovanni Millo [ctb], David Mitchell [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.4", + "Source": "Repository", + "Type": "Package", + "Title": "A Forward-Pipe Operator for R", + "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"cre\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", + "License": "MIT + file LICENSE", + "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", + "BugReports": "https://github.com/tidyverse/magrittr/issues", + "Depends": [ + "R (>= 3.4.0)" + ], + "Suggests": [ + "covr", + "knitr", + "rlang", + "rmarkdown", + "testthat" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "Yes", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Title": "'Memoisation' of Functions", + "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", + "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", + "License": "MIT + file LICENSE", + "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", + "BugReports": "https://github.com/r-lib/memoise/issues", + "Imports": [ + "rlang (>= 0.4.10)", + "cachem" + ], + "Suggests": [ + "digest", + "aws.s3", + "covr", + "googleAuthR", + "googleCloudStorageR", + "httr", + "testthat" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "mgcv": { + "Package": "mgcv", + "Version": "1.9-4", + "Source": "Repository", + "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", + "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", + "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2025) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", + "Priority": "recommended", + "Depends": [ + "R (>= 4.4.0)", + "nlme (>= 3.1-64)" + ], + "Imports": [ + "methods", + "stats", + "graphics", + "Matrix", + "splines", + "utils" + ], + "Suggests": [ + "parallel", + "survival", + "MASS" + ], + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Author": "Simon Wood [aut, cre]", + "Maintainer": "Simon Wood ", + "Repository": "CRAN" + }, + "microbenchmark": { + "Package": "microbenchmark", + "Version": "1.5.0", + "Source": "Repository", + "Title": "Accurate Timing Functions", + "Description": "Provides infrastructure to accurately measure and compare the execution time of R expressions.", + "Authors@R": "c(person(\"Olaf\", \"Mersmann\", role=c(\"aut\")), person(\"Claudia\", \"Beleites\", role=c(\"ctb\")), person(\"Rainer\", \"Hurling\", role=c(\"ctb\")), person(\"Ari\", \"Friedman\", role=c(\"ctb\")), person(given=c(\"Joshua\",\"M.\"), family=\"Ulrich\", role=\"cre\", email=\"josh.m.ulrich@gmail.com\"))", + "URL": "https://github.com/joshuaulrich/microbenchmark/", + "BugReports": "https://github.com/joshuaulrich/microbenchmark/issues/", + "License": "BSD_2_clause + file LICENSE", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "graphics", + "stats" + ], + "Suggests": [ + "ggplot2", + "multcomp", + "RUnit" + ], + "SystemRequirements": "On a Unix-alike, one of the C functions mach_absolute_time (macOS), clock_gettime or gethrtime. If none of these is found, the obsolescent POSIX function gettimeofday will be tried.", + "ByteCompile": "yes", + "NeedsCompilation": "yes", + "Author": "Olaf Mersmann [aut], Claudia Beleites [ctb], Rainer Hurling [ctb], Ari Friedman [ctb], Joshua M. Ulrich [cre]", + "Maintainer": "Joshua M. Ulrich ", + "Repository": "CRAN" + }, + "mime": { + "Package": "mime", + "Version": "0.13", + "Source": "Repository", + "Type": "Package", + "Title": "Map Filenames to MIME Types", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", + "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", + "Imports": [ + "tools" + ], + "License": "GPL", + "URL": "https://github.com/yihui/mime", + "BugReports": "https://github.com/yihui/mime/issues", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "minqa": { + "Package": "minqa", + "Version": "1.2.8", + "Source": "Repository", + "Type": "Package", + "Title": "Derivative-Free Optimization Algorithms by Quadratic Approximation", + "Authors@R": "c(person(given = \"Douglas\", family = \"Bates\", role = \"aut\"), person(given = c(\"Katharine\", \"M.\"), family = \"Mullen\", role = c(\"aut\", \"cre\"), email = \"katharine.mullen@stat.ucla.edu\"), person(given = c(\"John\", \"C.\"), family = \"Nash\", role = \"aut\"), person(given = \"Ravi\", family = \"Varadhan\", role = \"aut\"))", + "Maintainer": "Katharine M. Mullen ", + "Description": "Derivative-free optimization by quadratic approximation based on an interface to Fortran implementations by M. J. D. Powell.", + "License": "GPL-2", + "URL": "http://optimizer.r-forge.r-project.org", + "Imports": [ + "Rcpp (>= 0.9.10)" + ], + "LinkingTo": [ + "Rcpp" + ], + "SystemRequirements": "GNU make", + "NeedsCompilation": "yes", + "Repository": "CRAN", + "Author": "Douglas Bates [aut], Katharine M. Mullen [aut, cre], John C. Nash [aut], Ravi Varadhan [aut]" + }, + "modelr": { + "Package": "modelr", + "Version": "0.1.11", + "Source": "Repository", + "Title": "Modelling Functions that Work with the Pipe", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Functions for modelling that help you seamlessly integrate modelling into a pipeline of data manipulation and visualisation.", + "License": "GPL-3", + "URL": "https://modelr.tidyverse.org, https://github.com/tidyverse/modelr", + "BugReports": "https://github.com/tidyverse/modelr/issues", + "Depends": [ + "R (>= 3.2)" + ], + "Imports": [ + "broom", + "magrittr", + "purrr (>= 0.2.2)", + "rlang (>= 1.0.6)", + "tibble", + "tidyr (>= 0.8.0)", + "tidyselect", + "vctrs" + ], + "Suggests": [ + "compiler", + "covr", + "ggplot2", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "multcomp": { + "Package": "multcomp", + "Version": "1.4-30", + "Source": "Repository", + "Title": "Simultaneous Inference in General Parametric Models", + "Date": "2026-03-09", + "Authors@R": "c(person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Peter\", \"Westfall\", role = \"aut\"), person(\"Richard M.\", \"Heiberger\", role = \"ctb\"), person(\"Andre\", \"Schuetzenmeister\", role = \"ctb\"), person(\"Susan\", \"Scheibe\", role = \"ctb\"), person(\"Christian\", \"Ritz\", role = \"ctb\"), person(\"Christian B.\", \"Pipper\", role = \"ctb\"))", + "Description": "Simultaneous tests and confidence intervals for general linear hypotheses in parametric models, including linear, generalized linear, linear mixed effects, and survival models. The package includes demos reproducing analyzes presented in the book \"Multiple Comparisons Using R\" (Bretz, Hothorn, Westfall, 2010, CRC Press).", + "Depends": [ + "stats", + "graphics", + "mvtnorm (>= 1.0-10)", + "survival (>= 2.39-4)", + "TH.data (>= 1.0-2)" + ], + "Imports": [ + "sandwich (>= 2.3-0)", + "codetools" + ], + "Suggests": [ + "lme4 (>= 0.999375-16)", + "nlme", + "robustbase", + "coin", + "MASS", + "foreign", + "xtable", + "lmtest", + "coxme (>= 2.2-1)", + "SimComp", + "ISwR", + "tram (>= 0.2-5)", + "fixest (>= 0.10)", + "glmmTMB", + "DoseFinding", + "HH", + "asd", + "gsDesign", + "lattice", + "bibtex" + ], + "URL": "http://multcomp.R-forge.R-project.org, https://www.routledge.com/Multiple-Comparisons-Using-R/Bretz-Hothorn-Westfall/p/book/9781584885740", + "LazyData": "yes", + "License": "GPL-2", + "NeedsCompilation": "no", + "Author": "Torsten Hothorn [aut, cre] (ORCID: ), Frank Bretz [aut], Peter Westfall [aut], Richard M. Heiberger [ctb], Andre Schuetzenmeister [ctb], Susan Scheibe [ctb], Christian Ritz [ctb], Christian B. Pipper [ctb]", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN" + }, + "mvtnorm": { + "Package": "mvtnorm", + "Version": "1.3-6", + "Source": "Repository", + "Title": "Multivariate Normal and t Distributions", + "Date": "2026-03-13", + "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", + "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", + "Imports": [ + "stats" + ], + "Depends": [ + "R(>= 3.5.0)" + ], + "Suggests": [ + "qrng", + "numDeriv", + "bibtex" + ], + "License": "GPL-2", + "URL": "http://mvtnorm.R-forge.R-project.org", + "NeedsCompilation": "yes", + "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN" + }, + "nlme": { + "Package": "nlme", + "Version": "3.1-169", + "Source": "Repository", + "Date": "2026-03-27", + "Priority": "recommended", + "Title": "Linear and Nonlinear Mixed Effects Models", + "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"), person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"), person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"), person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"), person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"), person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"), person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"), person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"), person(\"R Core Team\", email = \"R-core@R-project.org\", role = c(\"aut\", \"cre\"), comment = c(ROR = \"02zz1nj61\")))", + "Contact": "see 'MailingList'", + "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "graphics", + "stats", + "utils", + "lattice" + ], + "Suggests": [ + "MASS", + "SASmixed" + ], + "LazyData": "yes", + "Encoding": "UTF-8", + "License": "GPL (>= 2)", + "BugReports": "https://bugs.r-project.org", + "MailingList": "R-help@r-project.org", + "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", + "NeedsCompilation": "yes", + "Author": "José Pinheiro [aut] (S version), Douglas Bates [aut] (up to 2007), Saikat DebRoy [ctb] (up to 2002), Deepayan Sarkar [ctb] (up to 2005), EISPACK authors [ctb] (src/rs.f), Siem Heisterkamp [ctb] (Author fixed sigma), Bert Van Willigen [ctb] (Programmer fixed sigma), Johannes Ranke [ctb] (varConstProp()), R Core Team [aut, cre] (ROR: )", + "Maintainer": "R Core Team ", + "Repository": "CRAN" + }, + "nloptr": { + "Package": "nloptr", + "Version": "2.2.1", + "Source": "Repository", + "Type": "Package", + "Title": "R Interface to NLopt", + "Authors@R": "c(person(\"Jelmer\", \"Ypma\", role = \"aut\", email = \"uctpjyy@ucl.ac.uk\"), person(c(\"Steven\", \"G.\"), \"Johnson\", role = \"aut\", comment = \"author of the NLopt C library\"), person(\"Aymeric\", \"Stamm\", role = c(\"ctb\", \"cre\"), email = \"aymeric.stamm@cnrs.fr\", comment = c(ORCID = \"0000-0002-8725-3654\")), person(c(\"Hans\", \"W.\"), \"Borchers\", role = \"ctb\", email = \"hwborchers@googlemail.com\"), person(\"Dirk\", \"Eddelbuettel\", role = \"ctb\", email = \"edd@debian.org\"), person(\"Brian\", \"Ripley\", role = \"ctb\", comment = \"build process on multiple OS\"), person(\"Kurt\", \"Hornik\", role = \"ctb\", comment = \"build process on multiple OS\"), person(\"Julien\", \"Chiquet\", role = \"ctb\"), person(\"Avraham\", \"Adler\", role = \"ctb\", email = \"Avraham.Adler@gmail.com\", comment = c(ORCID = \"0000-0002-3039-0703\")), person(\"Xiongtao\", \"Dai\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\", email = \"jeroen@berkeley.edu\"), person(\"Tomas\", \"Kalibera\", role = \"ctb\"), person(\"Mikael\", \"Jagan\", role = \"ctb\"))", + "Description": "Solve optimization problems using an R interface to NLopt. NLopt is a free/open-source library for nonlinear optimization, providing a common interface for a number of different free optimization routines available online as well as original implementations of various other algorithms. See for more information on the available algorithms. Building from included sources requires 'CMake'. On Linux and 'macOS', if a suitable system build of NLopt (2.7.0 or later) is found, it is used; otherwise, it is built from included sources via 'CMake'. On Windows, NLopt is obtained through 'rwinlib' for 'R <= 4.1.x' or grabbed from the appropriate toolchain for 'R >= 4.2.0'.", + "License": "LGPL (>= 3)", + "SystemRequirements": "cmake (>= 3.2.0) which is used only on Linux or macOS systems when no system build of nlopt (>= 2.7.0) can be found.", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Suggests": [ + "knitr", + "rmarkdown", + "covr", + "tinytest" + ], + "VignetteBuilder": "knitr", + "URL": "https://github.com/astamm/nloptr, https://astamm.github.io/nloptr/", + "BugReports": "https://github.com/astamm/nloptr/issues", + "NeedsCompilation": "yes", + "UseLTO": "yes", + "Author": "Jelmer Ypma [aut], Steven G. Johnson [aut] (author of the NLopt C library), Aymeric Stamm [ctb, cre] (), Hans W. Borchers [ctb], Dirk Eddelbuettel [ctb], Brian Ripley [ctb] (build process on multiple OS), Kurt Hornik [ctb] (build process on multiple OS), Julien Chiquet [ctb], Avraham Adler [ctb] (), Xiongtao Dai [ctb], Jeroen Ooms [ctb], Tomas Kalibera [ctb], Mikael Jagan [ctb]", + "Maintainer": "Aymeric Stamm ", + "Repository": "CRAN" + }, + "nnet": { + "Package": "nnet", + "Version": "7.3-20", + "Source": "Repository", + "Priority": "recommended", + "Date": "2025-01-01", + "Depends": [ + "R (>= 3.0.0)", + "stats", + "utils" + ], + "Suggests": [ + "MASS" + ], + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"William\", \"Venables\", role = \"cph\"))", + "Description": "Software for feed-forward neural networks with a single hidden layer, and for multinomial log-linear models.", + "Title": "Feed-Forward Neural Networks and Multinomial Log-Linear Models", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "NeedsCompilation": "yes", + "Author": "Brian Ripley [aut, cre, cph], William Venables [cph]", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN" + }, + "numDeriv": { + "Package": "numDeriv", + "Version": "2016.8-1.1", + "Source": "Repository", + "Title": "Accurate Numerical Derivatives", + "Description": "Methods for calculating (usually) accurate numerical first and second order derivatives. Accurate calculations are done using 'Richardson''s' extrapolation or, when applicable, a complex step derivative is available. A simple difference method is also provided. Simple difference is (usually) less accurate but is much quicker than 'Richardson''s' extrapolation and provides a useful cross-check. Methods are provided for real scalar and vector valued functions.", + "Depends": [ + "R (>= 2.11.1)" + ], + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL-2", + "Copyright": "2006-2011, Bank of Canada. 2012-2016, Paul Gilbert", + "Author": "Paul Gilbert and Ravi Varadhan", + "Maintainer": "Paul Gilbert ", + "URL": "http://optimizer.r-forge.r-project.org/", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "openssl": { + "Package": "openssl", + "Version": "2.3.5", + "Source": "Repository", + "Type": "Package", + "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", + "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/openssl", + "BugReports": "https://github.com/jeroen/openssl/issues", + "SystemRequirements": "OpenSSL >= 1.0.2", + "VignetteBuilder": "knitr", + "Imports": [ + "askpass" + ], + "Suggests": [ + "curl", + "testthat (>= 2.1.0)", + "digest", + "knitr", + "rmarkdown", + "jsonlite", + "jose", + "sodium" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "otel": { + "Package": "otel", + "Version": "0.2.0", + "Source": "Repository", + "Title": "OpenTelemetry R API", + "Authors@R": "person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\"))", + "Description": "High-quality, ubiquitous, and portable telemetry to enable effective observability. OpenTelemetry is a collection of tools, APIs, and SDKs used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior. This package implements the OpenTelemetry API: . Use this package as a dependency if you want to instrument your R package for OpenTelemetry.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "callr", + "cli", + "glue", + "jsonlite", + "otelsdk", + "processx", + "shiny", + "spelling", + "testthat (>= 3.0.0)", + "utils", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "URL": "https://otel.r-lib.org, https://github.com/r-lib/otel", + "Additional_repositories": "https://github.com/r-lib/otelsdk/releases/download/devel", + "BugReports": "https://github.com/r-lib/otel/issues", + "NeedsCompilation": "no", + "Author": "Gábor Csárdi [aut, cre]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "pbkrtest": { + "Package": "pbkrtest", + "Version": "0.5.5", + "Source": "Repository", + "Title": "Parametric Bootstrap, Kenward-Roger and Satterthwaite Based Methods for Test in Mixed Models", + "Authors@R": "c( person(given = \"Ulrich\", family = \"Halekoh\", email = \"uhalekoh@health.sdu.dk\", role = c(\"aut\", \"cph\")), person(given = \"Søren\", family = \"Højsgaard\", email = \"sorenh@math.aau.dk\", role = c(\"aut\", \"cre\", \"cph\")) )", + "Maintainer": "Søren Højsgaard ", + "Description": "Computes p-values based on (a) Satterthwaite or Kenward-Rogers degree of freedom methods and (b) parametric bootstrap for mixed effects models as implemented in the 'lme4' package. Implements parametric bootstrap test for generalized linear mixed models as implemented in 'lme4' and generalized linear models. The package is documented in the paper by Halekoh and Højsgaard, (2012, ). Please see 'citation(\"pbkrtest\")' for citation details.", + "URL": "https://people.math.aau.dk/~sorenh/software/pbkrtest/", + "Depends": [ + "R (>= 4.2.0)", + "lme4 (>= 1.1.31)" + ], + "Imports": [ + "broom", + "dplyr", + "MASS", + "methods", + "numDeriv", + "Matrix (>= 1.2.3)", + "doBy (>= 4.6.22)" + ], + "Suggests": [ + "nlme", + "markdown", + "knitr" + ], + "Encoding": "UTF-8", + "VignetteBuilder": "knitr", + "License": "GPL (>= 2)", + "ByteCompile": "Yes", + "RoxygenNote": "7.3.2", + "LazyData": "true", + "NeedsCompilation": "no", + "Author": "Ulrich Halekoh [aut, cph], Søren Højsgaard [aut, cre, cph]", + "Repository": "CRAN" + }, + "pillar": { + "Package": "pillar", + "Version": "1.11.1", + "Source": "Repository", + "Title": "Coloured Formatting for Columns", + "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", + "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", + "License": "MIT + file LICENSE", + "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", + "BugReports": "https://github.com/r-lib/pillar/issues", + "Imports": [ + "cli (>= 2.3.0)", + "glue", + "lifecycle", + "rlang (>= 1.0.2)", + "utf8 (>= 1.1.0)", + "utils", + "vctrs (>= 0.5.0)" + ], + "Suggests": [ + "bit64", + "DBI", + "debugme", + "DiagrammeR", + "dplyr", + "formattable", + "ggplot2", + "knitr", + "lubridate", + "nanotime", + "nycflights13", + "palmerpenguins", + "rmarkdown", + "scales", + "stringi", + "survival", + "testthat (>= 3.1.1)", + "tibble", + "units (>= 0.7.2)", + "vdiffr", + "withr" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Title": "Private Configuration for 'R' Packages", + "Author": "Gábor Csárdi", + "Maintainer": "Gábor Csárdi ", + "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "Imports": [ + "utils" + ], + "Suggests": [ + "covr", + "testthat", + "disposables (>= 1.0.3)" + ], + "URL": "https://github.com/r-lib/pkgconfig#readme", + "BugReports": "https://github.com/r-lib/pkgconfig/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "plotly": { + "Package": "plotly", + "Version": "4.12.0", + "Source": "Repository", + "Title": "Create Interactive Web Graphics via 'plotly.js'", + "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Chris\", \"Parmer\", role = \"aut\", email = \"chris@plot.ly\"), person(\"Toby\", \"Hocking\", role = \"aut\", email = \"tdhock5@gmail.com\"), person(\"Scott\", \"Chamberlain\", role = \"aut\", email = \"myrmecocystus@gmail.com\"), person(\"Karthik\", \"Ram\", role = \"aut\", email = \"karthik.ram@gmail.com\"), person(\"Marianne\", \"Corvellec\", role = \"aut\", email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")), person(\"Pedro\", \"Despouy\", role = \"aut\", email = \"pedro@plot.ly\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Plotly Technologies Inc.\", role = \"cph\"))", + "License": "MIT + file LICENSE", + "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.", + "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R, https://plotly.com/r/", + "BugReports": "https://github.com/plotly/plotly.R/issues", + "Depends": [ + "R (>= 3.5.0)", + "ggplot2 (>= 3.0.0)" + ], + "Imports": [ + "tools", + "scales", + "httr (>= 1.3.0)", + "jsonlite (>= 1.6)", + "magrittr", + "digest", + "viridisLite", + "base64enc", + "htmltools (>= 0.3.6)", + "htmlwidgets (>= 1.5.2.9001)", + "tidyr (>= 1.0.0)", + "RColorBrewer", + "dplyr", + "vctrs", + "tibble", + "lazyeval (>= 0.2.0)", + "rlang (>= 1.0.0)", + "crosstalk", + "purrr", + "data.table", + "promises" + ], + "Suggests": [ + "MASS", + "maps", + "hexbin", + "ggthemes", + "GGally", + "ggalluvial", + "testthat", + "knitr", + "shiny (>= 1.1.0)", + "shinytest2", + "curl", + "rmarkdown", + "Cairo", + "broom", + "webshot", + "listviewer", + "dendextend", + "sf", + "png", + "IRdisplay", + "processx", + "plotlyGeoAssets", + "forcats", + "withr", + "palmerpenguins", + "rversions", + "reticulate", + "rsvg", + "ggridges" + ], + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "Config/Needs/check": "tidyverse/ggplot2, ggobi/GGally, rcmdcheck, devtools, reshape2, s2", + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (ORCID: ), Chris Parmer [aut], Toby Hocking [aut], Scott Chamberlain [aut], Karthik Ram [aut], Marianne Corvellec [aut] (ORCID: ), Pedro Despouy [aut], Salim Brüggemann [ctb] (ORCID: ), Plotly Technologies Inc. [cph]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "plotrix": { + "Package": "plotrix", + "Version": "3.8-14", + "Source": "Repository", + "Title": "Various Plotting Functions", + "Authors@R": "c( person(\"Jim\", \"Lemon\", role = \"aut\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Sander\", \"Oom\", role = \"ctb\"), person(\"Eduardo\", \"Klein\", role = \"ctb\"), person(\"Barry\", \"Rowlingson\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Anupam\", \"Tyagi\", role = \"ctb\"), person(\"Olivier\", \"Eterradossi\", role = \"ctb\"), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Michael\", \"Toews\", role = \"ctb\"), person(\"John\", \"Kane\", role = \"ctb\"), person(\"Rolf\", \"Turner\", role = \"ctb\"), person(\"Carl\", \"Witthoft\", role = \"ctb\"), person(\"Julian\", \"Stander\", role = \"ctb\"), person(\"Thomas\", \"Petzoldt\", role = \"ctb\"), person(\"Remko\", \"Duursma\", role = \"ctb\"), person(\"Elisa\", \"Biancotto\", role = \"ctb\"), person(\"Ofir\", \"Levy\", role = \"ctb\"), person(\"Christophe\", \"Dutang\", role = \"ctb\"), person(\"Peter\", \"Solymos\", role = \"ctb\"), person(\"Robby\", \"Engelmann\", role = \"ctb\"), person(\"Michael\", \"Hecker\", role = \"ctb\"), person(\"Felix\", \"Steinbeck\", role = \"ctb\"), person(\"Hans\", \"Borchers\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"), person(\"Ted\", \"Toal\", role = \"ctb\"), person(\"Derek\", \"Ogle\", role = \"ctb\"), person(\"Darshan\", \"Baral\", role = \"ctb\"), person(\"Ulrike\", \"Groemping\", role = \"ctb\"), person(\"Bill\", \"Venables\", role = \"ctb\"), person(family = \"The CRAN Team\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", email = \"murdoch.duncan@gmail.com\", role = c(\"ctb\", \"cre\")))", + "Imports": [ + "grDevices", + "graphics", + "stats", + "utils" + ], + "Description": "Lots of plots, various labeling, axis and color scaling functions. The author/maintainer died in September 2023.", + "License": "GPL (>= 2)", + "NeedsCompilation": "no", + "Depends": [ + "R (>= 3.5.0)" + ], + "Repository": "CRAN", + "URL": "https://plotrix.github.io/plotrix/, https://github.com/plotrix/plotrix", + "BugReports": "https://github.com/plotrix/plotrix/issues", + "Author": "Jim Lemon [aut], Ben Bolker [ctb], Sander Oom [ctb], Eduardo Klein [ctb], Barry Rowlingson [ctb], Hadley Wickham [ctb], Anupam Tyagi [ctb], Olivier Eterradossi [ctb], Gabor Grothendieck [ctb], Michael Toews [ctb], John Kane [ctb], Rolf Turner [ctb], Carl Witthoft [ctb], Julian Stander [ctb], Thomas Petzoldt [ctb], Remko Duursma [ctb], Elisa Biancotto [ctb], Ofir Levy [ctb], Christophe Dutang [ctb], Peter Solymos [ctb], Robby Engelmann [ctb], Michael Hecker [ctb], Felix Steinbeck [ctb], Hans Borchers [ctb], Henrik Singmann [ctb], Ted Toal [ctb], Derek Ogle [ctb], Darshan Baral [ctb], Ulrike Groemping [ctb], Bill Venables [ctb], The CRAN Team [ctb], Duncan Murdoch [ctb, cre]", + "Maintainer": "Duncan Murdoch " + }, + "pracma": { + "Package": "pracma", + "Version": "2.4.6", + "Source": "Repository", + "Type": "Package", + "Date": "2025-10-20", + "Title": "Practical Numerical Math Functions", + "Authors@R": "person(\"Hans W.\", \"Borchers\", email=\"hwborchers@googlemail.com\", role=c(\"aut\", \"cre\"))", + "Depends": [ + "R (>= 3.1.0)" + ], + "Imports": [ + "graphics", + "grDevices", + "stats", + "utils" + ], + "Suggests": [ + "NlcOptim", + "quadprog" + ], + "Description": "Provides a large number of functions from numerical analysis and linear algebra, numerical optimization, differential equations, time series, plus some well-known special mathematical functions. Uses 'MATLAB' function names where appropriate to simplify porting.", + "License": "GPL (>= 3)", + "ByteCompile": "true", + "LazyData": "yes", + "NeedsCompilation": "no", + "Author": "Hans W. Borchers [aut, cre]", + "Maintainer": "Hans W. Borchers ", + "Repository": "CRAN" + }, + "promises": { + "Package": "promises", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Abstractions for Promise-Based Asynchronous Programming", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", + "BugReports": "https://github.com/rstudio/promises/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "fastmap (>= 1.1.0)", + "later", + "lifecycle", + "magrittr (>= 1.5)", + "otel (>= 0.2.0)", + "R6", + "rlang" + ], + "Suggests": [ + "future (>= 1.21.0)", + "knitr", + "mirai", + "otelsdk (>= 0.2.0)", + "purrr", + "Rcpp", + "rmarkdown", + "spelling", + "testthat (>= 3.0.0)", + "vembedr" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "rsconnect, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-27", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Joe Cheng [aut], Barret Schloerke [aut, cre] (ORCID: ), Winston Chang [aut] (ORCID: ), Charlie Gao [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Barret Schloerke ", + "Repository": "CRAN" + }, + "purrr": { + "Package": "purrr", + "Version": "1.2.1", + "Source": "Repository", + "Title": "Functional Programming Tools", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Description": "A complete and consistent functional programming toolkit for R.", + "License": "MIT + file LICENSE", + "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", + "BugReports": "https://github.com/tidyverse/purrr/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli (>= 3.6.1)", + "lifecycle (>= 1.0.3)", + "magrittr (>= 1.5.0)", + "rlang (>= 1.1.1)", + "vctrs (>= 0.6.3)" + ], + "Suggests": [ + "carrier (>= 0.3.0)", + "covr", + "dplyr (>= 0.7.8)", + "httr", + "knitr", + "lubridate", + "mirai (>= 2.5.1)", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble", + "tidyselect" + ], + "LinkingTo": [ + "cli" + ], + "VignetteBuilder": "knitr", + "Biarch": "true", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate, tidyr", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "quantreg": { + "Package": "quantreg", + "Version": "6.1", + "Source": "Repository", + "Title": "Quantile Regression", + "Description": "Estimation and inference methods for models for conditional quantile functions: Linear and nonlinear parametric and non-parametric (total variation penalized) models for conditional quantiles of a univariate response and several methods for handling censored survival data. Portfolio selection methods based on expected shortfall risk are also now included. See Koenker, R. (2005) Quantile Regression, Cambridge U. Press, and Koenker, R. et al. (2017) Handbook of Quantile Regression, CRC Press, .", + "Authors@R": "c( person(\"Roger\", \"Koenker\", role = c(\"cre\",\"aut\"), email = \"rkoenker@illinois.edu\"), person(\"Stephen\", \"Portnoy\", role = c(\"ctb\"), comment = \"Contributions to Censored QR code\", email = \"sportnoy@illinois.edu\"), person(c(\"Pin\", \"Tian\"), \"Ng\", role = c(\"ctb\"), comment = \"Contributions to Sparse QR code\", email = \"pin.ng@nau.edu\"), person(\"Blaise\", \"Melly\", role = c(\"ctb\"), comment = \"Contributions to preprocessing code\", email = \"mellyblaise@gmail.com\"), person(\"Achim\", \"Zeileis\", role = c(\"ctb\"), comment = \"Contributions to dynrq code essentially identical to his dynlm code\", email = \"Achim.Zeileis@uibk.ac.at\"), person(\"Philip\", \"Grosjean\", role = c(\"ctb\"), comment = \"Contributions to nlrq code\", email = \"phgrosjean@sciviews.org\"), person(\"Cleve\", \"Moler\", role = c(\"ctb\"), comment = \"author of several linpack routines\"), person(\"Yousef\", \"Saad\", role = c(\"ctb\"), comment = \"author of sparskit2\"), person(\"Victor\", \"Chernozhukov\", role = c(\"ctb\"), comment = \"contributions to extreme value inference code\"), person(\"Ivan\", \"Fernandez-Val\", role = c(\"ctb\"), comment = \"contributions to extreme value inference code\"), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(\"tweaks (src/chlfct.f, 'tiny','Large')\", ORCID = \"0000-0002-8685-9910\")), person(c(\"Brian\", \"D\"), \"Ripley\", role = c(\"trl\",\"ctb\"), comment = \"Initial (2001) R port from S (to my everlasting shame -- how could I have been so slow to adopt R!) and for numerous other suggestions and useful advice\", email = \"ripley@stats.ox.ac.uk\"))", + "Maintainer": "Roger Koenker ", + "Repository": "CRAN", + "Depends": [ + "R (>= 3.5)", + "stats", + "SparseM" + ], + "Imports": [ + "methods", + "graphics", + "Matrix", + "MatrixModels", + "survival", + "MASS" + ], + "Suggests": [ + "interp", + "rgl", + "logspline", + "nor1mix", + "Formula", + "zoo", + "R.rsp", + "conquer" + ], + "License": "GPL (>= 2)", + "URL": "https://www.r-project.org", + "NeedsCompilation": "yes", + "VignetteBuilder": "R.rsp", + "Author": "Roger Koenker [cre, aut], Stephen Portnoy [ctb] (Contributions to Censored QR code), Pin Tian Ng [ctb] (Contributions to Sparse QR code), Blaise Melly [ctb] (Contributions to preprocessing code), Achim Zeileis [ctb] (Contributions to dynrq code essentially identical to his dynlm code), Philip Grosjean [ctb] (Contributions to nlrq code), Cleve Moler [ctb] (author of several linpack routines), Yousef Saad [ctb] (author of sparskit2), Victor Chernozhukov [ctb] (contributions to extreme value inference code), Ivan Fernandez-Val [ctb] (contributions to extreme value inference code), Martin Maechler [ctb] (tweaks (src/chlfct.f, 'tiny','Large'), ), Brian D Ripley [trl, ctb] (Initial (2001) R port from S (to my everlasting shame -- how could I have been so slow to adopt R!) and for numerous other suggestions and useful advice)" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.4", + "Source": "Repository", + "Type": "Package", + "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"trl\", \"cre\", \"cph\")), person(\"Sridhar\", \"Ratnakumar\", role = \"aut\"), person(\"Trent\", \"Mick\", role = \"aut\"), person(\"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(\"Eddy\", \"Petrisor\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = c(\"trl\", \"aut\"), comment = c(ORCID = \"0000-0001-6341-4639\")), person(\"Gabor\", \"Csardi\", role = \"ctb\"), person(\"Gregory\", \"Jefferis\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", + "License": "MIT + file LICENSE", + "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", + "BugReports": "https://github.com/r-lib/rappdirs/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Suggests": [ + "covr", + "roxygen2", + "testthat (>= 3.2.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-05", + "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, Posit, PBC. See file LICENSE for details.", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [trl, cre, cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut] (ORCID: ), Gabor Csardi [ctb], Gregory Jefferis [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "rbibutils": { + "Package": "rbibutils", + "Version": "2.4.1", + "Source": "Repository", + "Type": "Package", + "Title": "Read 'Bibtex' Files and Convert Between Bibliography Formats", + "Authors@R": "c( person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"aut\", \"cre\"), \t email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\", \"R port, R code, new C code and modifications to bibutils' C code, conversion to Bibentry (R and C code)\") ), person(given = \"Chris\", family = \"Putman\", role = \"aut\", comment = \"src/*, author of the bibutils libraries, https://sourceforge.net/projects/bibutils/\"), person(given = \"Richard\", family = \"Mathar\", role = \"ctb\", comment = \"src/addsout.c\"), person(given = \"Johannes\", family = \"Wilm\", role = \"ctb\", comment = \"src/biblatexin.c, src/bltypes.c\"), person(\"R Core Team\", role = \"ctb\", comment = \"base R's bibentry and bibstyle implementation\") )", + "Description": "Read and write 'Bibtex' files. Convert between bibliography formats, including 'Bibtex', 'Biblatex', 'PubMed', 'Endnote', and 'Bibentry'. Includes a port of the 'bibutils' utilities by Chris Putnam . Supports all bibliography formats and character encodings implemented in 'bibutils'.", + "License": "GPL-2", + "URL": "https://geobosh.github.io/rbibutils/ (doc), https://CRAN.R-project.org/package=rbibutils", + "BugReports": "https://github.com/GeoBosh/rbibutils/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Imports": [ + "utils", + "tools" + ], + "Suggests": [ + "testthat" + ], + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Config/Needs/memcheck": "devtools, rcmdcheck", + "Author": "Georgi N. Boshnakov [aut, cre] (ORCID: , R port, R code, new C code and modifications to bibutils' C code, conversion to Bibentry (R and C code)), Chris Putman [aut] (src/*, author of the bibutils libraries, https://sourceforge.net/projects/bibutils/), Richard Mathar [ctb] (src/addsout.c), Johannes Wilm [ctb] (src/biblatexin.c, src/bltypes.c), R Core Team [ctb] (base R's bibentry and bibstyle implementation)", + "Maintainer": "Georgi N. Boshnakov ", + "Repository": "CRAN" + }, + "reformulas": { + "Package": "reformulas", + "Version": "0.4.4", + "Source": "Repository", + "Title": "Machinery for Processing Random Effect Formulas", + "Authors@R": "c( person(given = \"Ben\", family = \"Bolker\", role = c(\"aut\", \"cre\"), email = \"bolker@mcmaster.ca\", comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Anna\", \"Ly\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0210-0342\")) )", + "Description": "Takes formulas including random-effects components (formatted as in 'lme4', 'glmmTMB', etc.) and processes them. Includes various helper functions.", + "URL": "https://github.com/bbolker/reformulas", + "License": "GPL-3", + "Encoding": "UTF-8", + "Imports": [ + "stats", + "methods", + "Matrix", + "Rdpack" + ], + "RdMacros": "Rdpack", + "Suggests": [ + "lme4", + "tinytest", + "glmmTMB", + "Formula" + ], + "RoxygenNote": "7.3.3", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Ben Bolker [aut, cre] (ORCID: ), Anna Ly [ctb] (ORCID: )", + "Maintainer": "Ben Bolker ", + "Repository": "CRAN" + }, + "renv": { + "Package": "renv", + "Version": "1.2.0", + "Source": "Repository", + "Type": "Package", + "Title": "Project Environments", + "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A dependency management toolkit for R. Using 'renv', you can create and manage project-local R libraries, save the state of these libraries to a 'lockfile', and later restore your library as required. Together, these tools can help make your projects more isolated, portable, and reproducible.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", + "BugReports": "https://github.com/rstudio/renv/issues", + "Imports": [ + "utils" + ], + "Suggests": [ + "BiocManager", + "cli", + "compiler", + "covr", + "cpp11", + "curl", + "devtools", + "generics", + "gitcreds", + "jsonlite", + "jsonvalidate", + "knitr", + "miniUI", + "modules", + "packrat", + "pak", + "R6", + "remotes", + "reticulate", + "rmarkdown", + "rstudioapi", + "shiny", + "testthat", + "uuid", + "waldo", + "yaml", + "webfakes" + ], + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", + "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Kevin Ushey ", + "Repository": "CRAN" + }, + "rlang": { + "Package": "rlang", + "Version": "1.1.7", + "Source": "Repository", + "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", + "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", + "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "ByteCompile": "true", + "Biarch": "true", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "cli (>= 3.1.0)", + "covr", + "crayon", + "desc", + "fs", + "glue", + "knitr", + "magrittr", + "methods", + "pillar", + "pkgload", + "rmarkdown", + "stats", + "testthat (>= 3.2.0)", + "tibble", + "usethis", + "vctrs (>= 0.2.3)", + "withr" + ], + "Enhances": [ + "winch" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", + "BugReports": "https://github.com/r-lib/rlang/issues", + "Config/build/compilation-database": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "dplyr, tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.31", + "Source": "Repository", + "Type": "Package", + "Title": "Dynamic Documents for R", + "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", + "Description": "Convert R Markdown documents into a variety of formats.", + "License": "GPL-3", + "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", + "BugReports": "https://github.com/rstudio/rmarkdown/issues", + "Depends": [ + "R (>= 3.0)" + ], + "Imports": [ + "bslib (>= 0.2.5.1)", + "evaluate (>= 0.13)", + "fontawesome (>= 0.5.0)", + "htmltools (>= 0.5.1)", + "jquerylib", + "jsonlite", + "knitr (>= 1.43)", + "methods", + "tinytex (>= 0.31)", + "tools", + "utils", + "xfun (>= 0.36)", + "yaml (>= 2.1.19)" + ], + "Suggests": [ + "digest", + "dygraphs", + "fs", + "rsconnect", + "downlit (>= 0.4.0)", + "katex (>= 1.4.0)", + "sass (>= 0.4.0)", + "shiny (>= 1.6.0)", + "testthat (>= 3.0.3)", + "tibble", + "vctrs", + "cleanrmd", + "withr (>= 2.4.2)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "rstudio/quillt, pkgdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", + "NeedsCompilation": "no", + "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.18.0", + "Source": "Repository", + "Title": "Safely Access the RStudio API", + "Description": "Access the RStudio API (if available) and provide informative error messages when it's not.", + "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\"), person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@posit.co\"), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@posit.co\"), person(\"Gary\", \"Ritchie\", role = c(\"aut\"), email = \"gary@posit.co\"), person(family = \"RStudio\", role = \"cph\") )", + "Maintainer": "Kevin Ushey ", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/rstudioapi/, https://github.com/rstudio/rstudioapi", + "BugReports": "https://github.com/rstudio/rstudioapi/issues", + "RoxygenNote": "7.3.3", + "Suggests": [ + "testthat", + "knitr", + "rmarkdown", + "clipr", + "covr", + "curl", + "jsonlite", + "withr" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Kevin Ushey [aut, cre], JJ Allaire [aut], Hadley Wickham [aut], Gary Ritchie [aut], RStudio [cph]", + "Repository": "CRAN" + }, + "sandwich": { + "Package": "sandwich", + "Version": "3.1-1", + "Source": "Repository", + "Date": "2024-09-16", + "Title": "Robust Covariance Matrix Estimators", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Thomas\", family = \"Lumley\", role = \"aut\", email = \"t.lumley@auckland.ac.nz\", comment = c(ORCID = \"0000-0003-4255-5437\")), person(given = \"Nathaniel\", family = \"Graham\", role = \"ctb\", email = \"npgraham1@gmail.com\", comment = c(ORCID = \"0009-0002-1215-5256\")), person(given = \"Susanne\", family = \"Koell\", role = \"ctb\"))", + "Description": "Object-oriented software for model-robust covariance matrix estimators. Starting out from the basic robust Eicker-Huber-White sandwich covariance methods include: heteroscedasticity-consistent (HC) covariances for cross-section data; heteroscedasticity- and autocorrelation-consistent (HAC) covariances for time series data (such as Andrews' kernel HAC, Newey-West, and WEAVE estimators); clustered covariances (one-way and multi-way); panel and panel-corrected covariances; outer-product-of-gradients covariances; and (clustered) bootstrap covariances. All methods are applicable to (generalized) linear model objects fitted by lm() and glm() but can also be adapted to other classes through S3 methods. Details can be found in Zeileis et al. (2020) , Zeileis (2004) and Zeileis (2006) .", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "stats", + "utils", + "zoo" + ], + "Suggests": [ + "AER", + "car", + "geepack", + "lattice", + "lme4", + "lmtest", + "MASS", + "multiwayvcov", + "parallel", + "pcse", + "plm", + "pscl", + "scatterplot3d", + "stats4", + "strucchange", + "survival" + ], + "License": "GPL-2 | GPL-3", + "URL": "https://sandwich.R-Forge.R-project.org/", + "BugReports": "https://sandwich.R-Forge.R-project.org/contact.html", + "NeedsCompilation": "no", + "Author": "Achim Zeileis [aut, cre] (), Thomas Lumley [aut] (), Nathaniel Graham [ctb] (), Susanne Koell [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "sass": { + "Package": "sass", + "Version": "0.4.10", + "Source": "Repository", + "Type": "Package", + "Title": "Syntactically Awesome Style Sheets ('Sass')", + "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", + "BugReports": "https://github.com/rstudio/sass/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "SystemRequirements": "GNU make", + "Imports": [ + "fs (>= 1.2.4)", + "rlang (>= 0.4.10)", + "htmltools (>= 0.5.1)", + "R6", + "rappdirs" + ], + "Suggests": [ + "testthat", + "knitr", + "rmarkdown", + "withr", + "shiny", + "curl" + ], + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "scales": { + "Package": "scales", + "Version": "1.4.0", + "Source": "Repository", + "Title": "Scale Functions for Visualization", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", + "License": "MIT + file LICENSE", + "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", + "BugReports": "https://github.com/r-lib/scales/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "farver (>= 2.0.3)", + "glue", + "labeling", + "lifecycle", + "R6", + "RColorBrewer", + "rlang (>= 1.1.0)", + "viridisLite" + ], + "Suggests": [ + "bit64", + "covr", + "dichromat", + "ggplot2", + "hms (>= 0.5.0)", + "stringi", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "shiny": { + "Package": "shiny", + "Version": "1.13.0", + "Source": "Repository", + "Type": "Package", + "Title": "Web Application Framework for R", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Garrick\", \"Aden-Buie\", , \"garrick@adenbuie.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(, \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(, \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", + "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", + "License": "MIT + file LICENSE", + "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", + "BugReports": "https://github.com/rstudio/shiny/issues", + "Depends": [ + "methods", + "R (>= 3.1.2)" + ], + "Imports": [ + "bslib (>= 0.6.0)", + "cachem (>= 1.1.0)", + "cli", + "commonmark (>= 2.0.0)", + "fastmap (>= 1.1.1)", + "fontawesome (>= 0.4.0)", + "glue (>= 1.3.2)", + "grDevices", + "htmltools (>= 0.5.4)", + "httpuv (>= 1.5.2)", + "jsonlite (>= 0.9.16)", + "later (>= 1.0.0)", + "lifecycle (>= 0.2.0)", + "mime (>= 0.3)", + "otel", + "promises (>= 1.5.0)", + "R6 (>= 2.0)", + "rlang (>= 0.4.10)", + "sourcetools", + "tools", + "utils", + "withr", + "xtable" + ], + "Suggests": [ + "Cairo (>= 1.5-5)", + "coro (>= 1.1.0)", + "datasets", + "DT", + "dygraphs", + "future", + "ggplot2", + "knitr (>= 1.6)", + "magrittr", + "markdown", + "mirai", + "otelsdk (>= 0.2.0)", + "ragg", + "reactlog (>= 1.0.0)", + "rmarkdown", + "sass", + "showtext", + "testthat (>= 3.2.1)", + "watcher", + "yaml" + ], + "Config/Needs/check": "shinytest2", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'otel-attr-srcref.R' 'otel-collect.R' 'otel-enable.R' 'otel-error.R' 'otel-label.R' 'otel-reactive-update.R' 'otel-session.R' 'otel-shiny.R' 'otel-with.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'utils-tags.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Garrick Aden-Buie [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd] (ROR: ), jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "shinycssloaders": { + "Package": "shinycssloaders", + "Version": "1.1.0", + "Source": "Repository", + "Title": "Add Loading Animations to a 'shiny' Output While It's Recalculating", + "Authors@R": "c( person(\"Dean\",\"Attali\",email=\"daattali@gmail.com\",role=c(\"aut\",\"cre\"), comment = c(\"Maintainer/developer of shinycssloaders since 2019\", ORCID=\"0000-0002-5645-3493\")), person(\"Andras\",\"Sali\",email=\"andras.sali@alphacruncher.hu\",role=c(\"aut\"),comment=\"Original creator of shinycssloaders package\"), person(\"Luke\",\"Hass\",role=c(\"ctb\",\"cph\"),comment=\"Author of included CSS loader code\") )", + "Description": "When a 'Shiny' output (such as a plot, table, map, etc.) is recalculating, it remains visible but gets greyed out. Using 'shinycssloaders', you can add a loading animation (\"spinner\") to outputs instead. By wrapping a 'Shiny' output in 'withSpinner()', a spinner will automatically appear while the output is recalculating. You can also manually show and hide the spinner, or add a full-page spinner to cover the entire page. See the demo online at .", + "License": "MIT + file LICENSE", + "URL": "https://github.com/daattali/shinycssloaders, https://daattali.com/shiny/shinycssloaders-demo/", + "BugReports": "https://github.com/daattali/shinycssloaders/issues", + "Depends": [ + "R (>= 3.1)" + ], + "Imports": [ + "digest", + "glue", + "grDevices", + "htmltools (>= 0.3.5)", + "shiny" + ], + "Suggests": [ + "knitr", + "shinydisconnect", + "shinyjs" + ], + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Dean Attali [aut, cre] (Maintainer/developer of shinycssloaders since 2019, ), Andras Sali [aut] (Original creator of shinycssloaders package), Luke Hass [ctb, cph] (Author of included CSS loader code)", + "Maintainer": "Dean Attali ", + "Repository": "CRAN" + }, + "shinythemes": { + "Package": "shinythemes", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Themes for Shiny", + "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch themes\"), person(\"Lukasz\", \"Dziedzic\", role = c(\"ctb\", \"cph\"), comment = \"Lato font\"), person(\"Nathan\", \"Willis\", role = c(\"ctb\", \"cph\"), comment = \"News Cycle font\"), person(family = \"Google Corporation\", role = c(\"ctb\", \"cph\"), comment = \"Open Sans and Roboto fonts\"), person(\"Matt\", \"McInerney\", role = c(\"ctb\", \"cph\"), comment = \"Raleway font\"), person(family = \"Adobe Systems Incorporated\", role = c(\"ctb\", \"cph\"), comment = \"Source Sans Pro font\"), person(family = \"Canonical Ltd\", role = c(\"ctb\", \"cph\"), comment = \"Ubuntu font\") )", + "Description": "Themes for use with Shiny. Includes several Bootstrap themes from , which are packaged for use with Shiny applications.", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "shiny (>= 0.11)" + ], + "URL": "https://rstudio.github.io/shinythemes/", + "License": "GPL-3 | file LICENSE", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut, cre], RStudio [cph], Thomas Park [ctb, cph] (Bootswatch themes), Lukasz Dziedzic [ctb, cph] (Lato font), Nathan Willis [ctb, cph] (News Cycle font), Google Corporation [ctb, cph] (Open Sans and Roboto fonts), Matt McInerney [ctb, cph] (Raleway font), Adobe Systems Incorporated [ctb, cph] (Source Sans Pro font), Canonical Ltd [ctb, cph] (Ubuntu font)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7-2", + "Source": "Repository", + "Type": "Package", + "Title": "Tools for Reading, Tokenizing and Parsing R Code", + "Authors@R": "person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevinushey@gmail.com\")", + "Maintainer": "Kevin Ushey ", + "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", + "License": "MIT + file LICENSE", + "Depends": [ + "R (>= 3.0.2)" + ], + "Suggests": [ + "testthat" + ], + "RoxygenNote": "5.0.1", + "BugReports": "https://github.com/kevinushey/sourcetools/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Kevin Ushey [aut, cre]", + "Repository": "CRAN" + }, + "stringi": { + "Package": "stringi", + "Version": "1.8.7", + "Source": "Repository", + "Date": "2025-03-27", + "Title": "Fast and Portable Character String Processing Facilities", + "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", + "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", + "BugReports": "https://github.com/gagolews/stringi/issues", + "SystemRequirements": "ICU4C (>= 61, optional)", + "Type": "Package", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "tools", + "utils", + "stats" + ], + "Biarch": "TRUE", + "License": "file LICENSE", + "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", + "Maintainer": "Marek Gagolewski ", + "License_is_FOSS": "yes", + "Repository": "CRAN" + }, + "stringr": { + "Package": "stringr", + "Version": "1.6.0", + "Source": "Repository", + "Title": "Simple, Consistent Wrappers for Common String Operations", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", + "License": "MIT + file LICENSE", + "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", + "BugReports": "https://github.com/tidyverse/stringr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli", + "glue (>= 1.6.1)", + "lifecycle (>= 1.0.3)", + "magrittr", + "rlang (>= 1.0.0)", + "stringi (>= 1.5.3)", + "vctrs (>= 0.4.0)" + ], + "Suggests": [ + "covr", + "dplyr", + "gt", + "htmltools", + "htmlwidgets", + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/potools/style": "explicit", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "survival": { + "Package": "survival", + "Version": "3.8-6", + "Source": "Repository", + "Title": "Survival Analysis", + "Priority": "recommended", + "Date": "2026-01-09", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "graphics", + "Matrix", + "methods", + "splines", + "stats", + "utils" + ], + "LazyData": "Yes", + "LazyDataCompression": "xz", + "ByteCompile": "Yes", + "Authors@R": "c(person(c(\"Terry\", \"M\"), \"Therneau\", email=\"therneau.terry@mayo.edu\", role=c(\"aut\", \"cre\")), person(\"Thomas\", \"Lumley\", role=c(\"ctb\", \"trl\"), comment=\"original S->R port and R maintainer until 2009\"), person(\"Atkinson\", \"Elizabeth\", role=\"ctb\"), person(\"Crowson\", \"Cynthia\", role=\"ctb\"))", + "Description": "Contains the core survival analysis routines, including definition of Surv objects, Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models, and parametric accelerated failure time models.", + "License": "LGPL (>= 2)", + "URL": "https://github.com/therneau/survival", + "NeedsCompilation": "yes", + "Author": "Terry M Therneau [aut, cre], Thomas Lumley [ctb, trl] (original S->R port and R maintainer until 2009), Atkinson Elizabeth [ctb], Crowson Cynthia [ctb]", + "Maintainer": "Terry M Therneau ", + "Repository": "CRAN" + }, + "sys": { + "Package": "sys", + "Version": "3.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Powerful and Reliable Tools for Running System Commands in R", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", + "Description": "Drop-in replacements for the base system2() function with fine control and consistent behavior across platforms. Supports clean interruption, timeout, background tasks, and streaming STDIN / STDOUT / STDERR over binary or text connections. Arguments on Windows automatically get encoded and quoted to work on different locales.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/sys", + "BugReports": "https://github.com/jeroen/sys/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.1.1", + "Suggests": [ + "unix (>= 1.4)", + "spelling", + "testthat" + ], + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "tibble": { + "Package": "tibble", + "Version": "3.3.1", + "Source": "Repository", + "Title": "Simple Data Frames", + "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Romain\", \"Francois\", , \"romain@r-enthusiasts.com\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", + "License": "MIT + file LICENSE", + "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", + "BugReports": "https://github.com/tidyverse/tibble/issues", + "Depends": [ + "R (>= 3.4.0)" + ], + "Imports": [ + "cli", + "lifecycle (>= 1.0.0)", + "magrittr", + "methods", + "pillar (>= 1.8.1)", + "pkgconfig", + "rlang (>= 1.0.2)", + "utils", + "vctrs (>= 0.5.0)" + ], + "Suggests": [ + "bench", + "bit64", + "blob", + "brio", + "callr", + "DiagrammeR", + "dplyr", + "evaluate", + "formattable", + "ggplot2", + "here", + "hms", + "htmltools", + "knitr", + "lubridate", + "nycflights13", + "pkgload", + "purrr", + "rmarkdown", + "stringi", + "testthat (>= 3.0.2)", + "tidyr", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/autostyle/rmd": "false", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", + "Config/usethis/last-upkeep": "2025-06-07", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "NeedsCompilation": "yes", + "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.2", + "Source": "Repository", + "Title": "Tidy Messy Data", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools to help to create tidy data, where each column is a variable, each row is an observation, and each cell contains a single value. 'tidyr' contains tools for changing the shape (pivoting) and hierarchy (nesting and 'unnesting') of a dataset, turning deeply nested lists into rectangular data frames ('rectangling'), and extracting values out of string columns. It also includes tools for working with missing values (both implicit and explicit).", + "License": "MIT + file LICENSE", + "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", + "BugReports": "https://github.com/tidyverse/tidyr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli (>= 3.4.1)", + "dplyr (>= 1.1.0)", + "glue", + "lifecycle (>= 1.0.3)", + "magrittr", + "purrr (>= 1.0.1)", + "rlang (>= 1.1.1)", + "stringr (>= 1.5.0)", + "tibble (>= 2.1.1)", + "tidyselect (>= 1.2.1)", + "utils", + "vctrs (>= 0.5.2)" + ], + "Suggests": [ + "covr", + "data.table", + "knitr", + "readr", + "repurrrsive (>= 1.1.0)", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "cpp11 (>= 0.4.0)" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.1", + "Source": "Repository", + "Title": "Select from a Set of Strings", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", + "License": "MIT + file LICENSE", + "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", + "BugReports": "https://github.com/r-lib/tidyselect/issues", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "cli (>= 3.3.0)", + "glue (>= 1.3.0)", + "lifecycle (>= 1.0.3)", + "rlang (>= 1.0.4)", + "vctrs (>= 0.5.2)", + "withr" + ], + "Suggests": [ + "covr", + "crayon", + "dplyr", + "knitr", + "magrittr", + "rmarkdown", + "stringr", + "testthat (>= 3.1.1)", + "tibble (>= 2.1.3)" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.0.9000", + "NeedsCompilation": "yes", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "timeDate": { + "Package": "timeDate", + "Version": "4052.112", + "Source": "Repository", + "Title": "Rmetrics - Chronological and Calendar Objects", + "Authors@R": "c(person(\"Diethelm\", \"Wuertz\", role=\"aut\", comment = \"original code\") , person(\"Tobias\", \"Setz\", role = c(\"aut\"), email = \"tobias.setz@live.com\") , person(\"Yohan\", \"Chalabi\", role = \"aut\") , person(\"Martin\",\"Maechler\", role = \"ctb\", email = \"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(given = c(\"Joe\", \"W.\"), family = \"Byers\", role = \"ctb\") , person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"cre\", \"aut\"), email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\")) )", + "Description": "The 'timeDate' class fulfils the conventions of the ISO 8601 standard as well as of the ANSI C and POSIX standards. Beyond these standards it provides the \"Financial Center\" concept which allows to handle data records collected in different time zones and mix them up to have always the proper time stamps with respect to your personal financial center, or alternatively to the GMT reference time. It can thus also handle time stamps from historical data records from the same time zone, even if the financial centers changed day light saving times at different calendar dates.", + "Depends": [ + "R (>= 3.6.0)", + "methods" + ], + "Imports": [ + "graphics", + "utils", + "stats" + ], + "Suggests": [ + "RUnit" + ], + "License": "GPL (>= 2)", + "Encoding": "UTF-8", + "URL": "https://geobosh.github.io/timeDateDoc/ (doc), https://CRAN.R-project.org/package=timeDate, https://www.rmetrics.org", + "BugReports": "https://r-forge.r-project.org/tracker/?atid=633&group_id=156&func=browse", + "NeedsCompilation": "no", + "Author": "Diethelm Wuertz [aut] (original code), Tobias Setz [aut], Yohan Chalabi [aut], Martin Maechler [ctb] (ORCID: ), Joe W. Byers [ctb], Georgi N. Boshnakov [cre, aut] (ORCID: )", + "Maintainer": "Georgi N. Boshnakov ", + "Repository": "CRAN" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.59", + "Source": "Repository", + "Type": "Package", + "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", + "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", + "Imports": [ + "xfun (>= 0.48)" + ], + "Suggests": [ + "testit", + "rstudioapi" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/tinytex", + "BugReports": "https://github.com/rstudio/tinytex/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre, cph] (ORCID: ), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Ethan Heinzen [ctb], Fernando Cagua [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "urca": { + "Package": "urca", + "Version": "1.3-4", + "Source": "Repository", + "Date": "2024-05-25", + "Title": "Unit Root and Cointegration Tests for Time Series Data", + "Authors@R": "c(person(\"Bernhard\", \"Pfaff\", email = \"bernhard@pfaffikus.de\", role = c(\"aut\", \"cre\")), person(\"Eric\", \"Zivot\",email = \"ezivot@u.washington.edu\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", role = \"ctb\"))", + "Depends": [ + "R (>= 2.0.0)", + "methods" + ], + "Imports": [ + "nlme", + "graphics", + "stats" + ], + "LazyLoad": "yes", + "Description": "Unit root and cointegration tests encountered in applied econometric analysis are implemented.", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Author": "Bernhard Pfaff [aut, cre], Eric Zivot [ctb], Matthieu Stigler [ctb]", + "Maintainer": "Bernhard Pfaff ", + "Repository": "CRAN" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.6", + "Source": "Repository", + "Title": "Unicode Text Processing", + "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", + "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", + "License": "Apache License (== 2.0) | file LICENSE", + "URL": "https://krlmlr.github.io/utf8/, https://github.com/krlmlr/utf8", + "BugReports": "https://github.com/krlmlr/utf8/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Suggests": [ + "cli", + "covr", + "knitr", + "rlang", + "rmarkdown", + "testthat (>= 3.0.0)", + "withr" + ], + "VignetteBuilder": "knitr, rmarkdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "NeedsCompilation": "yes", + "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre] (ORCID: ), Unicode, Inc. [cph, dtc] (Unicode Character Database)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.7.2", + "Source": "Repository", + "Title": "Vector Helpers", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", + "License": "MIT + file LICENSE", + "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", + "BugReports": "https://github.com/r-lib/vctrs/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "cli (>= 3.4.0)", + "glue", + "lifecycle (>= 1.0.3)", + "rlang (>= 1.1.7)" + ], + "Suggests": [ + "bit64", + "covr", + "crayon", + "dplyr (>= 0.8.5)", + "generics", + "knitr", + "pillar (>= 1.4.4)", + "pkgdown (>= 2.0.1)", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble (>= 3.1.3)", + "waldo (>= 0.2.0)", + "withr", + "xml2", + "zeallot" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Encoding": "UTF-8", + "Language": "en-GB", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "viridisLite": { + "Package": "viridisLite", + "Version": "0.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Colorblind-Friendly Color Maps (Lite Version)", + "Date": "2026-02-03", + "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", + "Maintainer": "Simon Garnier ", + "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Depends": [ + "R (>= 2.10)" + ], + "Suggests": [ + "hexbin (>= 1.27.0)", + "ggplot2 (>= 1.0.1)", + "testthat", + "covr" + ], + "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", + "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", + "Repository": "CRAN" + }, + "withr": { + "Package": "withr", + "Version": "3.0.2", + "Source": "Repository", + "Title": "Run Code 'With' Temporarily Modified Global State", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", + "License": "MIT + file LICENSE", + "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", + "BugReports": "https://github.com/r-lib/withr/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "graphics", + "grDevices" + ], + "Suggests": [ + "callr", + "DBI", + "knitr", + "methods", + "rlang", + "rmarkdown (>= 2.12)", + "RSQLite", + "testthat (>= 3.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", + "NeedsCompilation": "no", + "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "xfun": { + "Package": "xfun", + "Version": "0.57", + "Source": "Repository", + "Type": "Package", + "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", + "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "grDevices", + "stats", + "tools" + ], + "Suggests": [ + "testit", + "parallel", + "codetools", + "methods", + "rstudioapi", + "tinytex (>= 0.30)", + "mime", + "litedown (>= 0.6)", + "commonmark", + "knitr (>= 1.50)", + "remotes", + "pak", + "curl", + "xml2", + "jsonlite", + "magick", + "yaml", + "data.table", + "qs2" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/xfun", + "BugReports": "https://github.com/yihui/xfun/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "litedown", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre, cph] (ORCID: , URL: https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (ORCID: ), Christophe Dervieux [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-8", + "Source": "Repository", + "Date": "2026-02-20", + "Title": "Export Tables to LaTeX or HTML", + "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", + "Maintainer": "David Scott ", + "Imports": [ + "stats", + "utils", + "methods" + ], + "Suggests": [ + "knitr", + "zoo", + "survival", + "glue", + "tinytex" + ], + "VignetteBuilder": "knitr", + "Description": "Coerce data to LaTeX and HTML tables.", + "URL": "http://xtable.r-forge.r-project.org/", + "Depends": [ + "R (>= 2.10.0)" + ], + "License": "GPL (>= 2)", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.12", + "Source": "Repository", + "Type": "Package", + "Title": "Methods to Convert R Data to YAML and Back", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"cre\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Shawn\", \"Garbett\", , \"shawn.garbett@vumc.org\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4079-5621\")), person(\"Jeremy\", \"Stephens\", role = c(\"aut\", \"ctb\")), person(\"Kirill\", \"Simonov\", role = \"aut\"), person(\"Yihui\", \"Xie\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Zhuoer\", \"Dong\", role = \"ctb\"), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"reikoch\", role = \"ctb\"), person(\"Will\", \"Beasley\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5613-5006\")), person(\"Brendan\", \"O'Connor\", role = \"ctb\"), person(\"Michael\", \"Quinn\", role = \"ctb\"), person(\"Charlie\", \"Gao\", role = \"ctb\"), person(c(\"Gregory\", \"R.\"), \"Warnes\", role = \"ctb\"), person(c(\"Zhian\", \"N.\"), \"Kamvar\", role = \"ctb\") )", + "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://yaml.r-lib.org, https://github.com/r-lib/yaml/", + "BugReports": "https://github.com/r-lib/yaml/issues", + "Suggests": [ + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [cre] (ORCID: ), Shawn Garbett [ctb] (ORCID: ), Jeremy Stephens [aut, ctb], Kirill Simonov [aut], Yihui Xie [ctb] (ORCID: ), Zhuoer Dong [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb] (ORCID: ), Brendan O'Connor [ctb], Michael Quinn [ctb], Charlie Gao [ctb], Gregory R. Warnes [ctb], Zhian N. Kamvar [ctb]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "zoo": { + "Package": "zoo", + "Version": "1.8-15", + "Source": "Repository", + "Date": "2025-12-15", + "Title": "S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations)", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Gabor\", family = \"Grothendieck\", role = \"aut\", email = \"ggrothendieck@gmail.com\"), person(given = c(\"Jeffrey\", \"A.\"), family = \"Ryan\", role = \"aut\", email = \"jeff.a.ryan@gmail.com\"), person(given = c(\"Joshua\", \"M.\"), family = \"Ulrich\", role = \"ctb\", email = \"josh.m.ulrich@gmail.com\"), person(given = \"Felix\", family = \"Andrews\", role = \"ctb\", email = \"felix@nfrac.org\"))", + "Description": "An S3 class with methods for totally ordered indexed observations. It is particularly aimed at irregular time series of numeric vectors/matrices and factors. zoo's key design goals are independence of a particular index/date/time class and consistency with ts and base R by providing methods to extend standard generics.", + "Depends": [ + "R (>= 3.1.0)", + "stats" + ], + "Suggests": [ + "AER", + "coda", + "chron", + "ggplot2 (>= 3.5.0)", + "mondate", + "scales", + "stinepack", + "strucchange", + "timeDate", + "timeSeries", + "tinyplot", + "tis", + "tseries", + "xts" + ], + "Imports": [ + "utils", + "graphics", + "grDevices", + "lattice (>= 0.20-27)" + ], + "License": "GPL-2 | GPL-3", + "URL": "https://zoo.R-Forge.R-project.org/", + "NeedsCompilation": "yes", + "Author": "Achim Zeileis [aut, cre] (ORCID: ), Gabor Grothendieck [aut], Jeffrey A. Ryan [aut], Joshua M. Ulrich [ctb], Felix Andrews [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + } + } +} diff --git a/renv/.gitignore b/renv/.gitignore new file mode 100644 index 0000000..0ec0cbb --- /dev/null +++ b/renv/.gitignore @@ -0,0 +1,7 @@ +library/ +local/ +cellar/ +lock/ +python/ +sandbox/ +staging/ diff --git a/renv/activate.R b/renv/activate.R new file mode 100644 index 0000000..93d4f65 --- /dev/null +++ b/renv/activate.R @@ -0,0 +1,1438 @@ + +local({ + + # the requested version of renv + version <- "1.2.0" + attr(version, "md5") <- "b7d230b07507f361d3bcf794d157a188" + attr(version, "sha") <- NULL + + # the project directory + project <- Sys.getenv("RENV_PROJECT") + if (!nzchar(project)) + project <- getwd() + + # use start-up diagnostics if enabled + diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") + if (diagnostics) { + start <- Sys.time() + profile <- tempfile("renv-startup-", fileext = ".Rprof") + utils::Rprof(profile) + on.exit({ + utils::Rprof(NULL) + elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) + writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) + writeLines(sprintf("- Profile: %s", profile)) + print(utils::summaryRprof(profile)) + }, add = TRUE) + } + + # figure out whether the autoloader is enabled + enabled <- local({ + + # first, check config option + override <- getOption("renv.config.autoloader.enabled") + if (!is.null(override)) + return(override) + + # if we're being run in a context where R_LIBS is already set, + # don't load -- presumably we're being run as a sub-process and + # the parent process has already set up library paths for us + rcmd <- Sys.getenv("R_CMD", unset = NA) + rlibs <- Sys.getenv("R_LIBS", unset = NA) + if (!is.na(rlibs) && !is.na(rcmd)) + return(FALSE) + + # next, check environment variables + # prefer using the configuration one in the future + envvars <- c( + "RENV_CONFIG_AUTOLOADER_ENABLED", + "RENV_AUTOLOADER_ENABLED", + "RENV_ACTIVATE_PROJECT" + ) + + for (envvar in envvars) { + envval <- Sys.getenv(envvar, unset = NA) + if (!is.na(envval)) + return(tolower(envval) %in% c("true", "t", "1")) + } + + # enable by default + TRUE + + }) + + # bail if we're not enabled + if (!enabled) { + + # if we're not enabled, we might still need to manually load + # the user profile here + profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") + if (file.exists(profile)) { + cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") + if (tolower(cfg) %in% c("true", "t", "1")) + sys.source(profile, envir = globalenv()) + } + + return(FALSE) + + } + + # avoid recursion + if (identical(getOption("renv.autoloader.running"), TRUE)) { + warning("ignoring recursive attempt to run renv autoloader") + return(invisible(TRUE)) + } + + # signal that we're loading renv during R startup + options(renv.autoloader.running = TRUE) + on.exit(options(renv.autoloader.running = NULL), add = TRUE) + + # signal that we've consented to use renv + options(renv.consent = TRUE) + + # load the 'utils' package eagerly -- this ensures that renv shims, which + # mask 'utils' packages, will come first on the search path + library(utils, lib.loc = .Library) + + # unload renv if it's already been loaded + if ("renv" %in% loadedNamespaces()) + unloadNamespace("renv") + + # load bootstrap tools + ansify <- function(text) { + if (renv_ansify_enabled()) + renv_ansify_enhanced(text) + else + renv_ansify_default(text) + } + + renv_ansify_enabled <- function() { + + override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) + if (!is.na(override)) + return(as.logical(override)) + + pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) + if (identical(pane, "build")) + return(FALSE) + + testthat <- Sys.getenv("TESTTHAT", unset = "false") + if (tolower(testthat) %in% "true") + return(FALSE) + + iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") + if (tolower(iderun) %in% "false") + return(FALSE) + + TRUE + + } + + renv_ansify_default <- function(text) { + text + } + + renv_ansify_enhanced <- function(text) { + + # R help links + pattern <- "`\\?(renv::(?:[^`])+)`" + replacement <- "`\033]8;;x-r-help:\\1\a?\\1\033]8;;\a`" + text <- gsub(pattern, replacement, text, perl = TRUE) + + # runnable code + pattern <- "`(renv::(?:[^`])+)`" + replacement <- "`\033]8;;x-r-run:\\1\a\\1\033]8;;\a`" + text <- gsub(pattern, replacement, text, perl = TRUE) + + # return ansified text + text + + } + + renv_ansify_init <- function() { + + envir <- renv_envir_self() + if (renv_ansify_enabled()) + assign("ansify", renv_ansify_enhanced, envir = envir) + else + assign("ansify", renv_ansify_default, envir = envir) + + } + + `%||%` <- function(x, y) { + if (is.null(x)) y else x + } + + catf <- function(fmt, ..., appendLF = TRUE) { + + quiet <- getOption("renv.bootstrap.quiet", default = FALSE) + if (quiet) + return(invisible()) + + # also check for config environment variables that should suppress messages + # https://github.com/rstudio/renv/issues/2214 + enabled <- Sys.getenv("RENV_CONFIG_STARTUP_QUIET", unset = NA) + if (!is.na(enabled) && tolower(enabled) %in% c("true", "1")) + return(invisible()) + + enabled <- Sys.getenv("RENV_CONFIG_SYNCHRONIZED_CHECK", unset = NA) + if (!is.na(enabled) && tolower(enabled) %in% c("false", "0")) + return(invisible()) + + msg <- sprintf(fmt, ...) + cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") + + invisible(msg) + + } + + header <- function(label, + ..., + prefix = "#", + suffix = "-", + n = min(getOption("width"), 78)) + { + label <- sprintf(label, ...) + n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) + if (n <= 0) + return(paste(prefix, label)) + + tail <- paste(rep.int(suffix, n), collapse = "") + paste0(prefix, " ", label, " ", tail) + + } + + heredoc <- function(text, leave = 0) { + + # remove leading, trailing whitespace + trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) + + # split into lines + lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] + + # compute common indent + indent <- regexpr("[^[:space:]]", lines) + common <- min(setdiff(indent, -1L)) - leave + text <- paste(substring(lines, common), collapse = "\n") + + # substitute in ANSI links for executable renv code + ansify(text) + + } + + bootstrap <- function(version, library) { + + friendly <- renv_bootstrap_version_friendly(version) + section <- header(sprintf("Bootstrapping renv %s", friendly)) + catf(section) + + # ensure the target library path exists; required for file.copy(..., recursive = TRUE) + dir.create(library, showWarnings = FALSE, recursive = TRUE) + + # try to install renv from cache + md5 <- attr(version, "md5", exact = TRUE) + if (length(md5)) { + pkgpath <- renv_bootstrap_find(version) + if (length(pkgpath) && file.exists(pkgpath)) { + ok <- file.copy(pkgpath, library, recursive = TRUE) + if (isTRUE(ok)) + return(invisible()) + } + } + + # attempt to download renv + catf("- Downloading renv ... ", appendLF = FALSE) + withCallingHandlers( + tarball <- renv_bootstrap_download(version), + error = function(err) { + catf("FAILED") + stop("failed to download:\n", conditionMessage(err)) + } + ) + catf("OK") + on.exit(unlink(tarball), add = TRUE) + + # now attempt to install + catf("- Installing renv ... ", appendLF = FALSE) + withCallingHandlers( + status <- renv_bootstrap_install(version, tarball, library), + error = function(err) { + catf("FAILED") + stop("failed to install:\n", conditionMessage(err)) + } + ) + catf("OK") + + # add empty line to break up bootstrapping from normal output + catf("") + return(invisible()) + } + + renv_bootstrap_tests_running <- function() { + getOption("renv.tests.running", default = FALSE) + } + + renv_bootstrap_repos <- function() { + + # get CRAN repository + cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") + + # check for repos override + repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) + if (!is.na(repos)) { + + # split on ';' if present + parts <- strsplit(repos, ";", fixed = TRUE)[[1L]] + + # split into named repositories if present + idx <- regexpr("=", parts, fixed = TRUE) + keys <- substring(parts, 1L, idx - 1L) + vals <- substring(parts, idx + 1L) + names(vals) <- keys + + # if we have a single unnamed repository, call it CRAN + if (length(vals) == 1L && identical(keys, "")) + names(vals) <- "CRAN" + + return(vals) + + } + + # check for lockfile repositories + repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) + if (!inherits(repos, "error") && length(repos)) + return(repos) + + # retrieve current repos + repos <- getOption("repos") + + # ensure @CRAN@ entries are resolved + repos[repos == "@CRAN@"] <- cran + + # add in renv.bootstrap.repos if set + default <- c(FALLBACK = "https://cloud.r-project.org") + extra <- getOption("renv.bootstrap.repos", default = default) + repos <- c(repos, extra) + + # remove duplicates that might've snuck in + dupes <- duplicated(repos) | duplicated(names(repos)) + repos[!dupes] + + } + + renv_bootstrap_repos_lockfile <- function() { + + lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") + if (!file.exists(lockpath)) + return(NULL) + + lockfile <- tryCatch(renv_json_read(lockpath), error = identity) + if (inherits(lockfile, "error")) { + warning(lockfile) + return(NULL) + } + + repos <- lockfile$R$Repositories + if (length(repos) == 0) + return(NULL) + + keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) + vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) + names(vals) <- keys + + return(vals) + + } + + renv_bootstrap_download <- function(version) { + + sha <- attr(version, "sha", exact = TRUE) + + methods <- if (!is.null(sha)) { + + # attempting to bootstrap a development version of renv + c( + function() renv_bootstrap_download_tarball(sha), + function() renv_bootstrap_download_github(sha) + ) + + } else { + + # attempting to bootstrap a release version of renv + c( + function() renv_bootstrap_download_tarball(version), + function() renv_bootstrap_download_cran_latest(version), + function() renv_bootstrap_download_cran_archive(version) + ) + + } + + for (method in methods) { + path <- tryCatch(method(), error = identity) + if (is.character(path) && file.exists(path)) + return(path) + } + + stop("All download methods failed") + + } + + renv_bootstrap_download_impl <- function(url, destfile) { + + mode <- "wb" + + # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 + fixup <- + Sys.info()[["sysname"]] == "Windows" && + substring(url, 1L, 5L) == "file:" + + if (fixup) + mode <- "w+b" + + args <- list( + url = url, + destfile = destfile, + mode = mode, + quiet = TRUE + ) + + if ("headers" %in% names(formals(utils::download.file))) { + headers <- renv_bootstrap_download_custom_headers(url) + if (length(headers) && is.character(headers)) + args$headers <- headers + } + + do.call(utils::download.file, args) + + } + + renv_bootstrap_download_custom_headers <- function(url) { + + headers <- getOption("renv.download.headers") + if (is.null(headers)) + return(character()) + + if (!is.function(headers)) + stopf("'renv.download.headers' is not a function") + + headers <- headers(url) + if (length(headers) == 0L) + return(character()) + + if (is.list(headers)) + headers <- unlist(headers, recursive = FALSE, use.names = TRUE) + + ok <- + is.character(headers) && + is.character(names(headers)) && + all(nzchar(names(headers))) + + if (!ok) + stop("invocation of 'renv.download.headers' did not return a named character vector") + + headers + + } + + renv_bootstrap_download_cran_latest <- function(version) { + + spec <- renv_bootstrap_download_cran_latest_find(version) + type <- spec$type + repos <- spec$repos + + baseurl <- utils::contrib.url(repos = repos, type = type) + ext <- if (identical(type, "source")) + ".tar.gz" + else if (Sys.info()[["sysname"]] == "Windows") + ".zip" + else + ".tgz" + name <- sprintf("renv_%s%s", version, ext) + url <- paste(baseurl, name, sep = "/") + + destfile <- file.path(tempdir(), name) + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (inherits(status, "condition")) + return(FALSE) + + # report success and return + destfile + + } + + renv_bootstrap_download_cran_latest_find <- function(version) { + + # check whether binaries are supported on this system + binary <- + getOption("renv.bootstrap.binary", default = TRUE) && + !identical(.Platform$pkgType, "source") && + !identical(getOption("pkgType"), "source") && + Sys.info()[["sysname"]] %in% c("Darwin", "Windows") + + types <- c(if (binary) "binary", "source") + + # iterate over types + repositories + for (type in types) { + for (repos in renv_bootstrap_repos()) { + + # build arguments for utils::available.packages() call + args <- list(type = type, repos = repos) + + # add custom headers if available -- note that + # utils::available.packages() will pass this to download.file() + if ("headers" %in% names(formals(utils::download.file))) { + headers <- renv_bootstrap_download_custom_headers(repos) + if (length(headers) && is.character(headers)) + args$headers <- headers + } + + # retrieve package database + db <- tryCatch( + as.data.frame( + do.call(utils::available.packages, args), + stringsAsFactors = FALSE + ), + error = identity + ) + + if (inherits(db, "error")) + next + + # check for compatible entry + entry <- db[db$Package %in% "renv" & db$Version %in% version, ] + if (nrow(entry) == 0) + next + + # found it; return spec to caller + spec <- list(entry = entry, type = type, repos = repos) + return(spec) + + } + } + + # if we got here, we failed to find renv + fmt <- "renv %s is not available from your declared package repositories" + stop(sprintf(fmt, version)) + + } + + renv_bootstrap_download_cran_archive <- function(version) { + + name <- sprintf("renv_%s.tar.gz", version) + repos <- renv_bootstrap_repos() + urls <- file.path(repos, "src/contrib/Archive/renv", name) + destfile <- file.path(tempdir(), name) + + for (url in urls) { + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (identical(status, 0L)) + return(destfile) + + } + + return(FALSE) + + } + + renv_bootstrap_find <- function(version) { + + path <- renv_bootstrap_find_cache(version) + if (length(path) && file.exists(path)) { + catf("- Using renv %s from global package cache", version) + return(path) + } + + } + + renv_bootstrap_find_cache <- function(version) { + + md5 <- attr(version, "md5", exact = TRUE) + if (is.null(md5)) + return() + + # infer path to renv cache + cache <- Sys.getenv("RENV_PATHS_CACHE", unset = "") + if (!nzchar(cache)) { + root <- Sys.getenv("RENV_PATHS_ROOT", unset = NA) + if (!is.na(root)) + cache <- file.path(root, "cache") + } + + if (!nzchar(cache)) { + tools <- asNamespace("tools") + if (is.function(tools$R_user_dir)) { + root <- tools$R_user_dir("renv", "cache") + cache <- file.path(root, "cache") + } + } + + # start completing path to cache + file.path( + cache, + renv_bootstrap_cache_version(), + renv_bootstrap_platform_prefix(), + "renv", + version, + md5, + "renv" + ) + + } + + renv_bootstrap_download_tarball <- function(version) { + + # if the user has provided the path to a tarball via + # an environment variable, then use it + tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) + if (is.na(tarball)) + return() + + # allow directories + if (dir.exists(tarball)) { + name <- sprintf("renv_%s.tar.gz", version) + tarball <- file.path(tarball, name) + } + + # bail if it doesn't exist + if (!file.exists(tarball)) { + + # let the user know we weren't able to honour their request + fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." + msg <- sprintf(fmt, tarball) + warning(msg) + + # bail + return() + + } + + catf("- Using local tarball '%s'.", tarball) + tarball + + } + + renv_bootstrap_github_token <- function() { + for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { + envval <- Sys.getenv(envvar, unset = NA) + if (!is.na(envval)) + return(envval) + } + } + + renv_bootstrap_download_github <- function(version) { + + enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") + if (!identical(enabled, "TRUE")) + return(FALSE) + + # prepare download options + token <- renv_bootstrap_github_token() + if (is.null(token)) + token <- "" + + if (nzchar(Sys.which("curl")) && nzchar(token)) { + fmt <- "--location --fail --header \"Authorization: token %s\"" + extra <- sprintf(fmt, token) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "curl", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } else if (nzchar(Sys.which("wget")) && nzchar(token)) { + fmt <- "--header=\"Authorization: token %s\"" + extra <- sprintf(fmt, token) + saved <- options("download.file.method", "download.file.extra") + options(download.file.method = "wget", download.file.extra = extra) + on.exit(do.call(base::options, saved), add = TRUE) + } + + url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) + name <- sprintf("renv_%s.tar.gz", version) + destfile <- file.path(tempdir(), name) + + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), + condition = identity + ) + + if (!identical(status, 0L)) + return(FALSE) + + renv_bootstrap_download_augment(destfile) + + return(destfile) + + } + + # Add Sha to DESCRIPTION. This is stop gap until #890, after which we + # can use renv::install() to fully capture metadata. + renv_bootstrap_download_augment <- function(destfile) { + sha <- renv_bootstrap_git_extract_sha1_tar(destfile) + if (is.null(sha)) { + return() + } + + # Untar + tempdir <- tempfile("renv-github-") + on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) + untar(destfile, exdir = tempdir) + pkgdir <- dir(tempdir, full.names = TRUE)[[1]] + + # Modify description + desc_path <- file.path(pkgdir, "DESCRIPTION") + desc_lines <- readLines(desc_path) + remotes_fields <- c( + "RemoteType: github", + "RemoteHost: api.github.com", + "RemoteRepo: renv", + "RemoteUsername: rstudio", + "RemotePkgRef: rstudio/renv", + paste("RemoteRef: ", sha), + paste("RemoteSha: ", sha) + ) + writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) + + # Re-tar + local({ + old <- setwd(tempdir) + on.exit(setwd(old), add = TRUE) + + tar(destfile, compression = "gzip") + }) + invisible() + } + + # Extract the commit hash from a git archive. Git archives include the SHA1 + # hash as the comment field of the tarball pax extended header + # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) + # For GitHub archives this should be the first header after the default one + # (512 byte) header. + renv_bootstrap_git_extract_sha1_tar <- function(bundle) { + + # open the bundle for reading + # We use gzcon for everything because (from ?gzcon) + # > Reading from a connection which does not supply a 'gzip' magic + # > header is equivalent to reading from the original connection + conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) + on.exit(close(conn)) + + # The default pax header is 512 bytes long and the first pax extended header + # with the comment should be 51 bytes long + # `52 comment=` (11 chars) + 40 byte SHA1 hash + len <- 0x200 + 0x33 + res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) + + if (grepl("^52 comment=", res)) { + sub("52 comment=", "", res) + } else { + NULL + } + } + + renv_bootstrap_install <- function(version, tarball, library) { + + # attempt to install it into project library + dir.create(library, showWarnings = FALSE, recursive = TRUE) + output <- renv_bootstrap_install_impl(library, tarball) + + # check for successful install + status <- attr(output, "status") + if (is.null(status) || identical(status, 0L)) + return(status) + + # an error occurred; report it + header <- "installation of renv failed" + lines <- paste(rep.int("=", nchar(header)), collapse = "") + text <- paste(c(header, lines, output), collapse = "\n") + stop(text) + + } + + renv_bootstrap_install_impl <- function(library, tarball) { + + # invoke using system2 so we can capture and report output + bin <- R.home("bin") + exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" + R <- file.path(bin, exe) + + args <- c( + "--vanilla", "CMD", "INSTALL", "--no-multiarch", + "-l", shQuote(path.expand(library)), + shQuote(path.expand(tarball)) + ) + + system2(R, args, stdout = TRUE, stderr = TRUE) + + } + + renv_bootstrap_platform_prefix_default <- function() { + + # read version component + version <- Sys.getenv("RENV_PATHS_VERSION", unset = "R-%v") + + # expand placeholders + placeholders <- list( + list("%v", format(getRversion()[1, 1:2])), + list("%V", format(getRversion()[1, 1:3])) + ) + + for (placeholder in placeholders) + version <- gsub(placeholder[[1L]], placeholder[[2L]], version, fixed = TRUE) + + # include SVN revision for development versions of R + # (to avoid sharing platform-specific artefacts with released versions of R) + devel <- + identical(R.version[["status"]], "Under development (unstable)") || + identical(R.version[["nickname"]], "Unsuffered Consequences") + + if (devel) + version <- paste(version, R.version[["svn rev"]], sep = "-r") + + version + + } + + renv_bootstrap_platform_prefix <- function() { + + # construct version prefix + version <- renv_bootstrap_platform_prefix_default() + + # build list of path components + components <- c(version, R.version$platform) + + # include prefix if provided by user + prefix <- renv_bootstrap_platform_prefix_impl() + if (!is.na(prefix) && nzchar(prefix)) + components <- c(prefix, components) + + # build prefix + paste(components, collapse = "/") + + } + + renv_bootstrap_platform_prefix_impl <- function() { + + # if an explicit prefix has been supplied, use it + prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) + if (!is.na(prefix)) + return(prefix) + + # if the user has requested an automatic prefix, generate it + auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) + if (is.na(auto) && getRversion() >= "4.4.0") + auto <- "TRUE" + + if (auto %in% c("TRUE", "True", "true", "1")) + return(renv_bootstrap_platform_prefix_auto()) + + # empty string on failure + "" + + } + + renv_bootstrap_platform_prefix_auto <- function() { + + prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) + if (inherits(prefix, "error") || prefix %in% "unknown") { + + msg <- paste( + "failed to infer current operating system", + "please file a bug report at https://github.com/rstudio/renv/issues", + sep = "; " + ) + + warning(msg) + + } + + prefix + + } + + renv_bootstrap_platform_os <- function() { + + sysinfo <- Sys.info() + sysname <- sysinfo[["sysname"]] + + # handle Windows + macOS up front + if (sysname == "Windows") + return("windows") + else if (sysname == "Darwin") + return("macos") + + # check for os-release files + for (file in c("/etc/os-release", "/usr/lib/os-release")) + if (file.exists(file)) + return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) + + # check for redhat-release files + if (file.exists("/etc/redhat-release")) + return(renv_bootstrap_platform_os_via_redhat_release()) + + "unknown" + + } + + renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { + + # read /etc/os-release + release <- utils::read.table( + file = file, + sep = "=", + quote = c("\"", "'"), + col.names = c("Key", "Value"), + comment.char = "#", + stringsAsFactors = FALSE + ) + + vars <- as.list(release$Value) + names(vars) <- release$Key + + # get os name + os <- tolower(sysinfo[["sysname"]]) + + # read id + id <- "unknown" + for (field in c("ID", "ID_LIKE")) { + if (field %in% names(vars) && nzchar(vars[[field]])) { + id <- vars[[field]] + break + } + } + + # read version + version <- "unknown" + for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { + if (field %in% names(vars) && nzchar(vars[[field]])) { + version <- vars[[field]] + break + } + } + + # join together + paste(c(os, id, version), collapse = "-") + + } + + renv_bootstrap_platform_os_via_redhat_release <- function() { + + # read /etc/redhat-release + contents <- readLines("/etc/redhat-release", warn = FALSE) + + # infer id + id <- if (grepl("centos", contents, ignore.case = TRUE)) + "centos" + else if (grepl("redhat", contents, ignore.case = TRUE)) + "redhat" + else + "unknown" + + # try to find a version component (very hacky) + version <- "unknown" + + parts <- strsplit(contents, "[[:space:]]")[[1L]] + for (part in parts) { + + nv <- tryCatch(numeric_version(part), error = identity) + if (inherits(nv, "error")) + next + + version <- nv[1, 1] + break + + } + + paste(c("linux", id, version), collapse = "-") + + } + + renv_bootstrap_library_root_name <- function(project) { + + # use project name as-is if requested + asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") + if (asis) + return(basename(project)) + + # otherwise, disambiguate based on project's path + id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) + paste(basename(project), id, sep = "-") + + } + + renv_bootstrap_library_root <- function(project) { + + prefix <- renv_bootstrap_profile_prefix() + + path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) + if (!is.na(path)) + return(paste(c(path, prefix), collapse = "/")) + + path <- renv_bootstrap_library_root_impl(project) + if (!is.null(path)) { + name <- renv_bootstrap_library_root_name(project) + return(paste(c(path, prefix, name), collapse = "/")) + } + + renv_bootstrap_paths_renv("library", project = project) + + } + + renv_bootstrap_library_root_impl <- function(project) { + + root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) + if (!is.na(root)) + return(root) + + type <- renv_bootstrap_project_type(project) + if (identical(type, "package")) { + userdir <- renv_bootstrap_user_dir() + return(file.path(userdir, "library")) + } + + } + + renv_bootstrap_validate_version <- function(version, description = NULL) { + + # resolve description file + # + # avoid passing lib.loc to `packageDescription()` below, since R will + # use the loaded version of the package by default anyhow. note that + # this function should only be called after 'renv' is loaded + # https://github.com/rstudio/renv/issues/1625 + description <- description %||% packageDescription("renv") + + # check whether requested version 'version' matches loaded version of renv + sha <- attr(version, "sha", exact = TRUE) + valid <- if (!is.null(sha)) + renv_bootstrap_validate_version_dev(sha, description) + else + renv_bootstrap_validate_version_release(version, description) + + if (valid) + return(TRUE) + + # the loaded version of renv doesn't match the requested version; + # give the user instructions on how to proceed + dev <- identical(description[["RemoteType"]], "github") + remote <- if (dev) + paste("rstudio/renv", description[["RemoteSha"]], sep = "@") + else + paste("renv", description[["Version"]], sep = "@") + + # display both loaded version + sha if available + friendly <- renv_bootstrap_version_friendly( + version = description[["Version"]], + sha = if (dev) description[["RemoteSha"]] + ) + + fmt <- heredoc(" + renv %1$s was loaded from project library, but this project is configured to use renv %2$s. + - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. + - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. + ") + catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) + + FALSE + + } + + renv_bootstrap_validate_version_dev <- function(version, description) { + + expected <- description[["RemoteSha"]] + if (!is.character(expected)) + return(FALSE) + + pattern <- sprintf("^\\Q%s\\E", version) + grepl(pattern, expected, perl = TRUE) + + } + + renv_bootstrap_validate_version_release <- function(version, description) { + expected <- description[["Version"]] + is.character(expected) && identical(c(expected), c(version)) + } + + renv_bootstrap_hash_text <- function(text) { + + hashfile <- tempfile("renv-hash-") + on.exit(unlink(hashfile), add = TRUE) + + writeLines(text, con = hashfile) + tools::md5sum(hashfile) + + } + + renv_bootstrap_load <- function(project, libpath, version) { + + # try to load renv from the project library + if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) + return(FALSE) + + # warn if the version of renv loaded does not match + renv_bootstrap_validate_version(version) + + # execute renv load hooks, if any + hooks <- getHook("renv::autoload") + for (hook in hooks) + if (is.function(hook)) + tryCatch(hook(), error = warnify) + + # load the project + renv::load(project) + + TRUE + + } + + renv_bootstrap_profile_load <- function(project) { + + # if RENV_PROFILE is already set, just use that + profile <- Sys.getenv("RENV_PROFILE", unset = NA) + if (!is.na(profile) && nzchar(profile)) + return(profile) + + # check for a profile file (nothing to do if it doesn't exist) + path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) + if (!file.exists(path)) + return(NULL) + + # read the profile, and set it if it exists + contents <- readLines(path, warn = FALSE) + if (length(contents) == 0L) + return(NULL) + + # set RENV_PROFILE + profile <- contents[[1L]] + if (!profile %in% c("", "default")) + Sys.setenv(RENV_PROFILE = profile) + + profile + + } + + renv_bootstrap_profile_prefix <- function() { + profile <- renv_bootstrap_profile_get() + if (!is.null(profile)) + return(file.path("profiles", profile, "renv")) + } + + renv_bootstrap_profile_get <- function() { + profile <- Sys.getenv("RENV_PROFILE", unset = "") + renv_bootstrap_profile_normalize(profile) + } + + renv_bootstrap_profile_set <- function(profile) { + profile <- renv_bootstrap_profile_normalize(profile) + if (is.null(profile)) + Sys.unsetenv("RENV_PROFILE") + else + Sys.setenv(RENV_PROFILE = profile) + } + + renv_bootstrap_profile_normalize <- function(profile) { + + if (is.null(profile) || profile %in% c("", "default")) + return(NULL) + + profile + + } + + renv_bootstrap_path_absolute <- function(path) { + + substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( + substr(path, 1L, 1L) %in% c(letters, LETTERS) && + substr(path, 2L, 3L) %in% c(":/", ":\\") + ) + + } + + renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { + renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") + root <- if (renv_bootstrap_path_absolute(renv)) NULL else project + prefix <- if (profile) renv_bootstrap_profile_prefix() + components <- c(root, renv, prefix, ...) + paste(components, collapse = "/") + } + + renv_bootstrap_project_type <- function(path) { + + descpath <- file.path(path, "DESCRIPTION") + if (!file.exists(descpath)) + return("unknown") + + desc <- tryCatch( + read.dcf(descpath, all = TRUE), + error = identity + ) + + if (inherits(desc, "error")) + return("unknown") + + type <- desc$Type + if (!is.null(type)) + return(tolower(type)) + + package <- desc$Package + if (!is.null(package)) + return("package") + + "unknown" + + } + + renv_bootstrap_user_dir <- function() { + dir <- renv_bootstrap_user_dir_impl() + path.expand(chartr("\\", "/", dir)) + } + + renv_bootstrap_user_dir_impl <- function() { + + # use local override if set + override <- getOption("renv.userdir.override") + if (!is.null(override)) + return(override) + + # use R_user_dir if available + tools <- asNamespace("tools") + if (is.function(tools$R_user_dir)) + return(tools$R_user_dir("renv", "cache")) + + # try using our own backfill for older versions of R + envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") + for (envvar in envvars) { + root <- Sys.getenv(envvar, unset = NA) + if (!is.na(root)) + return(file.path(root, "R/renv")) + } + + # use platform-specific default fallbacks + if (Sys.info()[["sysname"]] == "Windows") + file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") + else if (Sys.info()[["sysname"]] == "Darwin") + "~/Library/Caches/org.R-project.R/R/renv" + else + "~/.cache/R/renv" + + } + + renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { + sha <- sha %||% attr(version, "sha", exact = TRUE) + parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) + paste(parts, collapse = "") + } + + renv_bootstrap_exec <- function(project, libpath, version) { + if (!renv_bootstrap_load(project, libpath, version)) + renv_bootstrap_run(project, libpath, version) + } + + renv_bootstrap_run <- function(project, libpath, version) { + tryCatch( + renv_bootstrap_run_impl(project, libpath, version), + error = function(e) { + msg <- paste( + "failed to bootstrap renv: the project will not be loaded.", + paste("Reason:", conditionMessage(e)), + "Use `renv::activate()` to re-initialize the project.", + sep = "\n" + ) + warning(msg, call. = FALSE) + } + ) + } + + renv_bootstrap_run_impl <- function(project, libpath, version) { + + # perform bootstrap + bootstrap(version, libpath) + + # exit early if we're just testing bootstrap + if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) + return(TRUE) + + # try again to load + if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { + return(renv::load(project = project)) + } + + # failed to download or load renv; warn the user + msg <- c( + "Failed to find an renv installation: the project will not be loaded.", + "Use `renv::activate()` to re-initialize the project." + ) + + warning(paste(msg, collapse = "\n"), call. = FALSE) + + } + + renv_bootstrap_cache_version <- function() { + # NOTE: users should normally not override the cache version; + # this is provided just to make testing easier + Sys.getenv("RENV_CACHE_VERSION", unset = "v5") + } + + renv_bootstrap_cache_version_previous <- function() { + version <- renv_bootstrap_cache_version() + number <- as.integer(substring(version, 2L)) + paste("v", number - 1L, sep = "") + } + + renv_json_read <- function(file = NULL, text = NULL) { + + jlerr <- NULL + + # if jsonlite is loaded, use that instead + if ("jsonlite" %in% loadedNamespaces()) { + + json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- tryCatch(renv_json_read_default(file, text), error = identity) + if (!inherits(json, "error")) + return(json) + + # report an error + if (!is.null(jlerr)) + stop(jlerr) + else + stop(json) + + } + + renv_json_read_jsonlite <- function(file = NULL, text = NULL) { + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") + jsonlite::fromJSON(txt = text, simplifyVector = FALSE) + } + + renv_json_read_patterns <- function() { + + list( + + # objects + list("{", "\t\n\tobject(\t\n\t", TRUE), + list("}", "\t\n\t)\t\n\t", TRUE), + + # arrays + list("[", "\t\n\tarray(\t\n\t", TRUE), + list("]", "\n\t\n)\n\t\n", TRUE), + + # maps + list(":", "\t\n\t=\t\n\t", TRUE), + + # newlines + list("\\u000a", "\n", FALSE) + + ) + + } + + renv_json_read_envir <- function() { + + envir <- new.env(parent = emptyenv()) + + envir[["+"]] <- `+` + envir[["-"]] <- `-` + + envir[["object"]] <- function(...) { + result <- list(...) + names(result) <- as.character(names(result)) + result + } + + envir[["array"]] <- list + + envir[["true"]] <- TRUE + envir[["false"]] <- FALSE + envir[["null"]] <- NULL + + envir + + } + + renv_json_read_remap <- function(object, patterns) { + + # repair names if necessary + if (!is.null(names(object))) { + + nms <- names(object) + for (pattern in patterns) + nms <- gsub(pattern[[2L]], pattern[[1L]], nms, fixed = TRUE) + names(object) <- nms + + } + + # repair strings if necessary + if (is.character(object)) { + for (pattern in patterns) + object <- gsub(pattern[[2L]], pattern[[1L]], object, fixed = TRUE) + } + + # recurse for other objects + if (is.recursive(object)) + for (i in seq_along(object)) + object[i] <- list(renv_json_read_remap(object[[i]], patterns)) + + # return remapped object + object + + } + + renv_json_read_default <- function(file = NULL, text = NULL) { + + # read json text + text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") + + # convert into something the R parser will understand + patterns <- renv_json_read_patterns() + transformed <- text + for (pattern in patterns) + transformed <- gsub(pattern[[1L]], pattern[[2L]], transformed, fixed = TRUE) + + # parse it + rfile <- tempfile("renv-json-", fileext = ".R") + on.exit(unlink(rfile), add = TRUE) + writeLines(transformed, con = rfile) + json <- parse(rfile, keep.source = FALSE, srcfile = NULL)[[1L]] + + # evaluate in safe environment + result <- eval(json, envir = renv_json_read_envir()) + + # fix up strings if necessary -- do so only with reversible patterns + patterns <- Filter(function(pattern) pattern[[3L]], patterns) + renv_json_read_remap(result, patterns) + + } + + + # load the renv profile, if any + renv_bootstrap_profile_load(project) + + # construct path to library root + root <- renv_bootstrap_library_root(project) + + # construct library prefix for platform + prefix <- renv_bootstrap_platform_prefix() + + # construct full libpath + libpath <- file.path(root, prefix) + + # run bootstrap code + renv_bootstrap_exec(project, libpath, version) + + invisible() + +}) diff --git a/renv/settings.json b/renv/settings.json new file mode 100644 index 0000000..4aa5441 --- /dev/null +++ b/renv/settings.json @@ -0,0 +1,20 @@ +{ + "bioconductor.version": null, + "external.libraries": [], + "ignored.packages": [], + "package.dependency.fields": [ + "Imports", + "Depends", + "LinkingTo" + ], + "ppm.enabled": null, + "ppm.ignored.urls": [], + "r.version": null, + "snapshot.dev": false, + "snapshot.type": "implicit", + "use.cache": true, + "vcs.ignore.cellar": true, + "vcs.ignore.library": true, + "vcs.ignore.local": true, + "vcs.manage.ignores": true +} diff --git a/results_analysis.R b/results_analysis.R index 3551ed8..d62cf26 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -2,15 +2,9 @@ # OBJECTIVE: Send an HTML file of an IC50 Calculation plot and a dataframe # of IC50 statistical results to a Benchling analysis # -# This code requires a dataframe (df) in order to work -# The dataframe should contain the columns Cell Concentration and Cell Mortality -# The code also requires values for subdomain, analysis_id, and access_token -# (see get_dataframe.R for more detail) -# -# Steps -> calculate IC50 -# -> calculate result dataframe and send to Benchling S3 Bucket -# -> create IC50 plot file and send to Benchling S3 Bucket -# -> Patch analysis +# Prerequisites: +# - Run get_dataframe.R first in the same R session +# - Required variables: df, subdomain, analysis_id, access_token, folder_id ########################################################################################## library(httr) @@ -21,67 +15,126 @@ library(htmlwidgets) library(rstudioapi) library(pracma) +################################################################################ +# Verify Prerequisites +################################################################################ + +required_vars <- c("df", "subdomain", "analysis_id", "access_token", "folder_id") +missing_vars <- required_vars[!sapply(required_vars, exists)] + +if (length(missing_vars) > 0) { + stop(paste( + "Missing required variables:", paste(missing_vars, collapse = ", "), + "\nPlease run get_dataframe.R first in the same R session", + sep = "\n" + )) +} + +cat("✓ All required variables present\n") +cat(" Dataset:", nrow(df), "rows x", ncol(df), "columns\n\n") + +# Verify required columns exist +required_cols <- c("Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h") +missing_cols <- required_cols[!required_cols %in% names(df)] + +if (length(missing_cols) > 0) { + stop(paste( + "Dataset missing required columns:", paste(missing_cols, collapse = ", "), + "\nAvailable columns:", paste(names(df), collapse = ", "), + sep = "\n" + )) +} + ################################################################################ # Calculate IC50 # In this example, we use the drc library and a 4 parameter log-logistics model # to calculate a slope and IC50 value ################################################################################ -model <- - drm( - Cell.Mortality.Mortality.24h ~ Cell.Mortality.Concentration, - data = df, - fct = LL.4( - fixed = c(NA, 0, 100, NA), - names = c("Slope", "LS Inferior", "LS Superior", "IC50") +cat("Calculating IC50...\n") + +tryCatch({ + model <- + drm( + Cell.Mortality.Mortality.24h ~ Cell.Mortality.Concentration, + data = df, + fct = LL.4( + fixed = c(NA, 0, 100, NA), + names = c("Slope", "LS Inferior", "LS Superior", "IC50") ) ) -summary <- summary(model) - -#Create an IC50 list composed of value and slope + summary_result <- summary(model) + + cat("✓ IC50 calculation complete\n") + cat(" IC50 Value:", round(summary_result$coefficients[2], 2), "\n") + cat(" Slope:", round(summary_result$coefficients[1], 2), "\n\n") +}, error = function(e) { + stop(paste( + "IC50 calculation failed:", + e$message, + "\nPlease check your data format and values", + sep = "\n" + )) +}) + +# Create an IC50 list composed of value and slope IC50_result <- list( - value = round(summary$coefficients[2],2), - slope = round(summary$coefficients[1],2)) - -# Create CSV file -cell <- c(df$Cell.Line.Name[1]) -hours <- c(24) -fit_function <- c('LL.4') -IC50 <- c(round(summary$coefficients[2],2)) -std <- c(round(summary$coefficients[4],2)) -t_Value <- c(round(summary$coefficients[6],2)) -p_Value <- summary$coefficients[8] + value = round(summary_result$coefficients[2], 2), + slope = round(summary_result$coefficients[1], 2) +) + +################################################################################ +# Create Results Dataframe +################################################################################ + +cat("Preparing results dataframe...\n") + +# Extract cell line name (use first value, or default if not present) +cell <- if ("Cell.Line.Name" %in% names(df)) { + c(df$Cell.Line.Name[1]) +} else { + "Unknown" +} + +hours <- c(24) +fit_function <- c('LL.4') +IC50 <- c(round(summary_result$coefficients[2], 2)) +std <- c(round(summary_result$coefficients[4], 2)) +t_Value <- c(round(summary_result$coefficients[6], 2)) +p_Value <- summary_result$coefficients[8] # Transform p-Value to scientific notation formatC(p_Value, format = "e", digits = 4) -p_Value <-signif(p_Value, digits=3) +p_Value <- signif(p_Value, digits = 3) # create CSV dataframe csv_df <- data.frame(cell, hours, fit_function, IC50, std, t_Value, p_Value) -# 4 parameter Logisitic function plot curve +cat("✓ Results dataframe created\n\n") + +# 4 parameter Logisitic function for plot curve logistic4 <- function(x, A, B, C, D) { - return ((A-D) / (1.0 + ((x / C) ** B))) + D + return((A - D) / (1.0 + ((x / C) ** B)) + D) } ########################################################################################## # Calculate result dataframe and send to Benchling S3 Bucket ########################################################################################## +cat("Uploading results dataframe to Benchling...\n") + # Save CSV on local path csv_name <- "mortality.csv" path <- dirname(rstudioapi::getSourceEditorContext()$path) csv_file <- paste(path, '/', csv_name, sep = "") write.csv(csv_df, csv_file, row.names = FALSE) - ############ Use the POST dataframe endpoint to create a new dataframe ############ # Construct url -# The resulting URL should look like: https://.benchling.com/api/v2-beta/data-frames api_path <- "/api/v2-beta/data-frames" -url <- paste("https://", subdomain, api_path, sep = "") +url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") # Create a binary file my_data <- readBin(csv_file, "raw", 10e6) @@ -92,10 +145,21 @@ dataframe_payload <- # Convert payload to Json format and use POST endpoint to create dataframe dataframe_request <- - httr::POST(url = url, + httr::POST( + url = url, body = toJSON(dataframe_payload, pretty = TRUE, auto_unbox = TRUE), - httr::accept('application/json'),httr::content_type('application/json'), - httr::add_headers ('Authorization' = paste("Bearer", access_token))) + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +# Check for errors +if (dataframe_request$status_code != 200) { + stop(paste( + "Failed to create dataframe! Status code:", dataframe_request$status_code, + sep = "" + )) +} # Use the jsonLite library to read the Json body dataframe_body <- @@ -107,50 +171,51 @@ result_dataframe_id <- dataframe_body$id # Retrieve S3 PUT url from previous call s3_put_url <- dataframe_body$manifest$url - ####### Use the PUT file endpoint to upload file in a Benchling S3 Bucket ###### + # Put file in S3 bucket and add [;x-amz-server-side-encryption': 'AES256'] to # the request headers, because we use server-side encryption s3_file_request <- httr::PUT( url = s3_put_url, body = my_data, - httr::add_headers ('x-amz-server-side-encryption' = 'AES256')) - -# Change dataframe status to IN PROGRESS after uploading to S3 -if (s3_file_request$status_code == '200') -{ - # Construct url - # The resulting URL should look like: https://.benchling.com/api/v2-beta/data-frames/data_cACYhKlo) - api_path <- "/api/v2-beta/data-frames/" - url <- - paste("https://", subdomain, api_path, result_dataframe_id, sep = "") - - # Set Payload list as IN PROGRESS - dataframe_payload <-list(uploadStatus = "IN_PROGRESS") - - # Convert payload to Json format and use Patch endpoint to mark dataframe upload as in Progress - dataframe_request <- - httr::PATCH( - url = url, - body = toJSON(dataframe_payload, pretty = TRUE, auto_unbox = TRUE), - httr::accept('application/json'),httr::content_type('application/json'), - httr::add_headers ('Authorization' = paste("Bearer", access_token))) - - # Use the jsonLite library to read the Json body - dataframe_body <-jsonlite::fromJSON(rawToChar(dataframe_request$content)) - - # Print status code - 200 = Successful - print(dataframe_request$status_code) - -}else { - print('ERROR: Upload to S3 unsuccessful') + httr::add_headers('x-amz-server-side-encryption' = 'AES256') + ) + +# Check if upload succeeded +if (s3_file_request$status_code != 200) { + stop(paste( + "Failed to upload dataframe to S3! Status code:", s3_file_request$status_code, + sep = "" + )) } +# Change dataframe status to IN_PROGRESS after uploading to S3 +api_path <- "/api/v2-beta/data-frames/" +url <- + paste("https://", subdomain, ".benchling.com", api_path, result_dataframe_id, sep = "") + +# Set Payload list as IN_PROGRESS +dataframe_payload <- list(uploadStatus = "IN_PROGRESS") + +# Convert payload to Json format and use Patch endpoint to mark dataframe upload as in Progress +dataframe_request <- + httr::PATCH( + url = url, + body = toJSON(dataframe_payload, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +cat("✓ Results dataframe uploaded (ID:", result_dataframe_id, ")\n\n") + ################################################################################ -# Use plotly to create a html plot to embed in Benchling Analysis ############## +# Use plotly to create a html plot to embed in Benchling Analysis ################################################################################ +cat("Creating interactive plot...\n") + # Set Image Name and Path (path is set here are the local directory of the R script) image_name <- "mortality_24h.html" @@ -165,49 +230,79 @@ plot <- x = df$Cell.Mortality.Concentration, y = df$Cell.Mortality.Mortality.24h, type = "scatter", - mode = "markers") - -plot <- layout(plot, xaxis = list(type = "log")) - -xs <- + mode = "markers", + name = "Observed Data", + marker = list(size = 10, color = 'rgba(50, 120, 200, 0.8)') + ) + +plot <- layout( + plot, + xaxis = list(type = "log", title = "Concentration"), + yaxis = list(title = "Mortality 24h (%)"), + title = paste("IC50 Dose-Response Curve (IC50 =", IC50_result$value, ")") +) + +xs <- linspace(min(df$Cell.Mortality.Concentration), max(df$Cell.Mortality.Concentration), - n=1000) + n = 1000) plot <- - add_lines(plot, - line = list(shape = "scatter"), - x = xs, - y = logistic4(xs, 100, IC50_result$slope, IC50_result$value, 0)) + add_lines( + plot, + line = list(shape = "scatter", color = 'rgba(200, 50, 50, 0.8)'), + x = xs, + y = logistic4(xs, 100, IC50_result$slope, IC50_result$value, 0), + name = "Fitted Curve" + ) # Save html file -saveWidget(widget = plot, - file = image_file, - selfcontained = TRUE) +saveWidget( + widget = plot, + file = image_file, + selfcontained = TRUE +) + +cat("✓ Plot created and saved locally\n\n") + +################################################################################ +# Upload Plot to Benchling +################################################################################ + +cat("Uploading plot to Benchling...\n") ### Create a binary file my_data <- readBin(image_file, "raw", 10e6) - ############### Use the POST File endpoint to create a new File ############### # Construct url -# The resulting URL should look like: https://.benchling.com/api/v2-beta/files) api_path <- "/api/v2-beta/files" -url <- paste("https://", subdomain, api_path, sep = "") +url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") # Provide name of file as a payload in a list file_payload <- list(name = image_name, filename = image_name, folderId = folder_id) # Convert payload to Json format and use POST endpoint to create File -file_request <- - httr::POST(url = url, - body = toJSON(file_payload, pretty = TRUE, auto_unbox = TRUE), - httr::accept('application/json'),httr::content_type('application/json'), - httr::add_headers ('Authorization' = paste("Bearer", access_token))) +file_request <- + httr::POST( + url = url, + body = toJSON(file_payload, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +# Check for errors +if (file_request$status_code != 200) { + stop(paste( + "Failed to create file! Status code:", file_request$status_code, + sep = "" + )) +} # Use the jsonLite library to read the Json body -file_body <-jsonlite::fromJSON(rawToChar(file_request$content)) +file_body <- jsonlite::fromJSON(rawToChar(file_request$content)) # Retrieve the file id file_id <- file_body$id @@ -216,68 +311,94 @@ file_id <- file_body$id s3_put_url <- file_request$headers$`content-location` ####### Use the PUT file endpoint to upload file in a Benchling S3 Bucket ###### -# Put file in S3 bucket and add [;x-amz-server-side-encryption': 'AES256'] to the request headers, because we use server-side encryption -s3_file_request <- - httr::PUT(url = s3_put_url, - body = my_data, - httr::add_headers ('x-amz-server-side-encryption' = 'AES256')) - -# Change dataframe status to SUCCEEDED after uploading to S3 -if (s3_file_request$status_code == '200') -{ - # Construct url - # The resulting URL should look like: https://.benchling.com/api/v2-beta/files/file_cGCGhKqh) - api_path <- "/api/v2-beta/files/" - url <- paste("https://", subdomain, api_path, file_id, sep = "") - - # Set Payload list as SUCCEEDED - file_payload <-list (uploadStatus = 'SUCCEEDED') - - # Convert payload to Json format and use Patch endpoint to mark file upload as completed - file_request <- - httr::PATCH(url = url, - body = toJSON(file_payload, pretty = TRUE, auto_unbox = TRUE), - httr::accept('application/json'),httr::content_type('application/json'), - httr::add_headers ('Authorization' = paste("Bearer", access_token))) - - # Use the jsonLite library to read the Json body - file_body <-jsonlite::fromJSON(rawToChar(file_request$content)) - - # Print status code - 200 = Successful - print(file_request$status_code) - -}else { - print('ERROR: Upload to S3 unsuccessful') + +# Put file in S3 bucket and add [;x-amz-server-side-encryption': 'AES256'] to the request headers +s3_file_request <- + httr::PUT( + url = s3_put_url, + body = my_data, + httr::add_headers('x-amz-server-side-encryption' = 'AES256') + ) + +# Check if upload succeeded +if (s3_file_request$status_code != 200) { + stop(paste( + "Failed to upload plot to S3! Status code:", s3_file_request$status_code, + sep = "" + )) } +# Change file status to SUCCEEDED after uploading to S3 +api_path <- "/api/v2-beta/files/" +url <- paste("https://", subdomain, ".benchling.com", api_path, file_id, sep = "") + +# Set Payload list as SUCCEEDED +file_payload <- list(uploadStatus = 'SUCCEEDED') + +# Convert payload to Json format and use Patch endpoint to mark file upload as completed +file_request <- + httr::PATCH( + url = url, + body = toJSON(file_payload, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +cat("✓ Plot uploaded (ID:", file_id, ")\n\n") + ################################################################################ -# Use the PATCH analyses endpoint to upload file into analyses ################# +# Use the PATCH analyses endpoint to attach outputs to analysis ################################################################################ +cat("Attaching outputs to analysis...\n") + # Construct url -# The resulting URL should look like: https://.benchling.com/api/v2-beta/analyses/ana_Tx98nkEm) api_path <- "/api/v2-beta/analyses/" -url <- paste("https://", subdomain, api_path, analysis_id, sep = "") - +url <- paste("https://", subdomain, ".benchling.com", api_path, analysis_id, sep = "") # Create nested list containing output files and output dataframes analysis_body <- list(fileIds = list(file_id), dataFrameIds = list(result_dataframe_id)) -# Convert payload to Json format and use Patch endpoint to update Analyis to include output files and output dataframes -analysis_request <- - httr::PATCH(url = url, - body = toJSON(analysis_body, pretty = TRUE, auto_unbox = TRUE), - httr::accept('application/json'),httr::content_type('application/json'), - httr::add_headers ('Authorization' = paste("Bearer", access_token))) +# Convert payload to Json format and use Patch endpoint to update Analysis +analysis_request <- + httr::PATCH( + url = url, + body = toJSON(analysis_body, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +# Check for errors +if (analysis_request$status_code != 200) { + stop(paste( + "Failed to update analysis! Status code:", analysis_request$status_code, + sep = "" + )) +} # Use the jsonLite library to read the Json body -analysis_body <-jsonlite::fromJSON(rawToChar(analysis_request$content)) +analysis_body <- jsonlite::fromJSON(rawToChar(analysis_request$content)) -# Print status code - 200 = Successful -print(analysis_request$status_code) +cat("✓ Outputs attached to analysis\n") +cat(" Analysis status:", analysis_body$status, "\n\n") + +################################################################################ +# Success Summary +################################################################################ -# Initial status will be running and move to succeeded -# We recommend that can build a wait function to verify that it succeeded -print(analysis_body$status) +cat("==========================================\n") +cat("SUCCESS! Analysis complete\n") +cat("==========================================\n") +cat("Results:\n") +cat(" IC50 Value:", IC50_result$value, "\n") +cat(" Slope:", IC50_result$slope, "\n") +cat(" p-Value:", p_Value, "\n\n") +cat("Uploaded to Benchling:\n") +cat(" ✓ Results CSV (", result_dataframe_id, ")\n", sep = "") +cat(" ✓ Interactive plot (", file_id, ")\n", sep = "") +cat("\nView your analysis at:\n") +cat(" https://", subdomain, ".benchling.com/analyses/", analysis_id, "\n", sep = "") diff --git a/test_ic50_locally.R b/test_ic50_locally.R new file mode 100644 index 0000000..0ab686a --- /dev/null +++ b/test_ic50_locally.R @@ -0,0 +1,127 @@ +########################################################################################## +# Local Testing Script for IC50 Calculation +# This script tests the core IC50 calculation and plotting logic without Benchling API +########################################################################################## + +library(drc) +library(plotly) +library(htmlwidgets) +library(pracma) + +# Load the sample data +df <- read.csv("Mortality IC50.csv") + +# Rename columns to match what results_analysis.R expects +# The sample CSV uses different column names +names(df) <- c("Cell.Mortality.Concentration", + "Cell.Mortality.Mortality.24h", + "Cell.Mortality.Mortality.48h") + +# Add a mock cell line name since the sample CSV doesn't have one +df$Cell.Line.Name <- "Sample Cell Line" + +print("Data loaded:") +print(head(df)) + +################################################################################ +# Calculate IC50 (same as results_analysis.R) +################################################################################ + +model <- drm( + Cell.Mortality.Mortality.24h ~ Cell.Mortality.Concentration, + data = df, + fct = LL.4( + fixed = c(NA, 0, 100, NA), + names = c("Slope", "LS Inferior", "LS Superior", "IC50") + ) +) + +summary_result <- summary(model) +print("\nIC50 Model Summary:") +print(summary_result) + +# Create an IC50 list composed of value and slope +IC50_result <- list( + value = round(summary_result$coefficients[2], 2), + slope = round(summary_result$coefficients[1], 2) +) + +print("\nIC50 Results:") +print(paste("IC50 Value:", IC50_result$value)) +print(paste("Slope:", IC50_result$slope)) + +################################################################################ +# Create results dataframe (same as results_analysis.R) +################################################################################ + +cell <- c(df$Cell.Line.Name[1]) +hours <- c(24) +fit_function <- c('LL.4') +IC50 <- c(round(summary_result$coefficients[2], 2)) +std <- c(round(summary_result$coefficients[4], 2)) +t_Value <- c(round(summary_result$coefficients[6], 2)) +p_Value <- summary_result$coefficients[8] + +# Transform p-Value to scientific notation +formatC(p_Value, format = "e", digits = 4) +p_Value <- signif(p_Value, digits = 3) + +# Create CSV dataframe +csv_df <- data.frame(cell, hours, fit_function, IC50, std, t_Value, p_Value) + +print("\nResults Dataframe:") +print(csv_df) + +# Save CSV locally +write.csv(csv_df, "test_mortality_results.csv", row.names = FALSE) +print("\nResults saved to: test_mortality_results.csv") + +################################################################################ +# Create plot (same as results_analysis.R) +################################################################################ + +# 4 parameter Logistic function plot curve +logistic4 <- function(x, A, B, C, D) { + return((A - D) / (1.0 + ((x / C) ** B)) + D) +} + +# Use plotly to plot the IC50 +plot <- plot_ly( + data = df, + x = df$Cell.Mortality.Concentration, + y = df$Cell.Mortality.Mortality.24h, + type = "scatter", + mode = "markers", + name = "Observed Data" +) + +plot <- layout( + plot, + xaxis = list(type = "log", title = "Concentration"), + yaxis = list(title = "Mortality 24h (%)"), + title = "IC50 Dose-Response Curve" +) + +xs <- linspace( + min(df$Cell.Mortality.Concentration), + max(df$Cell.Mortality.Concentration), + n = 1000 +) + +plot <- add_lines( + plot, + line = list(shape = "scatter"), + x = xs, + y = logistic4(xs, 100, IC50_result$slope, IC50_result$value, 0), + name = "Fitted Curve" +) + +# Save html file +saveWidget( + widget = plot, + file = "test_mortality_24h.html", + selfcontained = TRUE +) + +print("\nPlot saved to: test_mortality_24h.html") +print("\nTesting complete! Open test_mortality_24h.html in a browser to view the plot.") From ebc2e6349dda3482a519c4175276076b17b9a027 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 15:20:43 -0400 Subject: [PATCH 02/36] Remove CLAUDE.md from git tracking This file contains project-specific Claude Code instructions and should not be tracked in the repository. --- .gitignore | 3 + CLAUDE.md | 211 ----------------------------------------------------- 2 files changed, 3 insertions(+), 211 deletions(-) delete mode 100644 CLAUDE.md diff --git a/.gitignore b/.gitignore index eb9fcbd..342bb4b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,9 @@ .Renviron .Rprofile +# Project-specific Claude configuration +CLAUDE.md + # R Data files *.RData *.Rhistory diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index a95b017..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,211 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -This repository contains sample R scripts demonstrating integration with Benchling's API for dataset analysis workflows. The code retrieves datasets from Benchling analyses, performs IC50 calculations, generates visualizations, and uploads results back to Benchling. - -**Purpose:** Educational example code showing how to work with Benchling datasets using R. Not intended for production use. - -## Main Scripts - -- **`get_dataframe.R`** - Authenticates with Benchling and downloads dataset from an analysis -- **`results_analysis.R`** - Performs IC50 calculation, creates plot, uploads results to Benchling -- **`test_ic50_locally.R`** - Test IC50 calculation locally without Benchling credentials -- **`app.R`** - Shiny web app for IC50 analysis with UI - -**Configuration:** All scripts use `.Renviron` for credentials. Command-line scripts prompt for analysis key; Shiny app provides text input. - -## Environment & Dependencies - -### R Environment Management -- Uses `renv` for dependency management (R 4.5.3) -- To restore the environment: `Rscript -e "renv::restore()"` -- To install new packages: `Rscript -e "renv::install('')"` -- To update the lockfile after adding packages: `Rscript -e "renv::snapshot()"` -- For Shiny app, also install: `renv::install(c('shiny', 'shinythemes', 'shinycssloaders', 'digest', 'dplyr'))` - -### Key Dependencies -- `httr` - HTTP client for Benchling API calls -- `jsonlite` - JSON parsing for API requests/responses -- `base64enc` - Decoding JWT tokens from analysis keys -- `drc` - Dose-response curve fitting (IC50 calculations) -- `plotly` - Interactive plot generation -- `htmlwidgets` - HTML plot export -- `pracma` - Mathematical functions (linspace for curve plotting) -- `rstudioapi` - Getting script paths -- `shiny` - Web application framework (for app.R) -- `shinythemes` - UI themes for Shiny apps -- `shinycssloaders` - Loading spinners for Shiny -- `digest` - MD5 hashing (Shiny app only) -- `dplyr` - Data manipulation (Shiny app only) - -## Configuration Requirements - -⚠️ **For detailed setup instructions, see `SETUP_GUIDE.md`** - it contains step-by-step guidance for Benchling configuration and credential setup. - -### Configuration Steps - -1. **Create `.Renviron` file:** - ```bash - cp .Renviron.example .Renviron - ``` - -2. **Edit `.Renviron` with your app credentials:** - ```bash - BENCHLING_CLIENT_ID=your_client_id - BENCHLING_CLIENT_SECRET=your_client_secret - ``` - -3. **Analysis Key:** The script will **prompt you for the analysis key** when you run it. This is recommended since the key changes for each analysis run. - -4. **Verify `.Renviron` is gitignored** (already included in `.gitignore`) - -### Prerequisites in Benchling: -1. **Benchling App** - Create in Developer Console → Apps (provides client_id and client_secret) -2. **App Permissions** - Grant scopes: analyses:read/write, data-frames:read/write, files:read/write -3. **Benchling Analysis** - Create with input dataset attached -4. **Analysis Key** - Generate from the analysis (format: `ana_XXXXX:eyJhbGc...`) -5. **Input Dataset** - Must have columns: `Cell.Mortality.Concentration`, `Cell.Mortality.Mortality.24h`, `Cell.Line.Name` - -## Script Architecture & Workflow - -### Script 1: `get_dataframe.R` -**Purpose:** Authenticate with Benchling and retrieve a dataset from an analysis. - -**Flow:** -1. Parse `analysis_key` JWT to extract tenant subdomain and analysis ID -2. Generate OAuth2 bearer token using client credentials (expires after 900 seconds) -3. Call `GET /api/v2-beta/analyses/{analysis_id}` to retrieve dataframe ID -4. Call `GET /api/v2-beta/data-frames/{dataframe_id}` to get CSV download URL -5. Load CSV into R dataframe (`df`) - -**Output:** Populates `df` variable with dataset, plus `subdomain`, `analysis_id`, `access_token`, `folder_id` for use in next script. - -### Script 2: `results_analysis.R` -**Purpose:** Perform IC50 calculation on dataset and upload results to Benchling. - -**Prerequisites:** Requires variables from `get_dataframe.R` to be in environment: -- `df` - Input dataframe with columns `Cell.Mortality.Concentration` and `Cell.Mortality.Mortality.24h` -- `subdomain`, `analysis_id`, `access_token`, `folder_id` - -**Flow:** -1. **Calculate IC50:** Fit 4-parameter log-logistic model (`LL.4`) to dose-response data using `drc::drm()` -2. **Generate CSV results:** Extract model coefficients (IC50, slope, std, t-value, p-value) into dataframe -3. **Upload CSV to Benchling:** - - `POST /api/v2-beta/data-frames` - Create dataframe resource - - `PUT {s3_url}` - Upload CSV to S3 bucket (requires `x-amz-server-side-encryption: AES256` header) - - `PATCH /api/v2-beta/data-frames/{id}` - Mark upload as `IN_PROGRESS` -4. **Generate HTML plot:** Create interactive plotly visualization with scatter points and fitted curve -5. **Upload plot to Benchling:** - - `POST /api/v2-beta/files` - Create file resource - - `PUT {s3_url}` - Upload HTML to S3 - - `PATCH /api/v2-beta/files/{id}` - Mark upload as `SUCCEEDED` -6. **Attach outputs to analysis:** `PATCH /api/v2-beta/analyses/{id}` with `fileIds` and `dataFrameIds` - -**Output:** Creates `mortality.csv` and `mortality_24h.html` locally, uploads both to Benchling analysis. - -## Running the Scripts - -**⚠️ Critical:** The scripts must be run **sequentially in the same R session** because `results_analysis.R` depends on variables created by `get_dataframe.R`. - -After configuring `.Renviron`, run the scripts. You'll be **prompted for your analysis key**: - -**Option 1: RStudio / Interactive R (Recommended)** -```r -source('get_dataframe.R') # Will prompt: "Analysis Key: " - # Paste: ana_XXXXX:eyJhbGc... -ls() # Verify: df, subdomain, analysis_id, access_token, folder_id -head(df) # Check data loaded correctly -source('results_analysis.R') -``` - -**Option 2: Non-Interactive (set key in environment first)** -```bash -# Temporarily set the key for this run -export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." -Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" -``` - -**Timing Note:** Bearer tokens expire after 15 minutes. If you wait too long between scripts, re-run the first script to refresh the token. - -### Local Testing (No Benchling Required) - -### Using the Shiny App - -After configuring `.Renviron`, launch the web interface: - -```r -shiny::runApp("app.R") -``` - -Or in RStudio: Open `app.R` and click "Run App" - -The app provides: -1. Text input for analysis key -2. "Get Dataset" button - downloads and displays data -3. "Send Analysis" button - calculates IC50 and uploads results - -### Local Testing (No Benchling Required) -To test the IC50 calculation and plotting logic without Benchling credentials: -```bash -Rscript test_ic50_locally.R -``` - -This script: -- Loads `Mortality IC50.csv` sample data -- Performs IC50 calculation using 4-parameter log-logistic model -- Generates results CSV (`test_mortality_results.csv`) -- Creates interactive HTML plot (`test_mortality_24h.html`) - -**Note:** The sample CSV column names differ from what `results_analysis.R` expects. The test script handles this automatically, but if using `results_analysis.R` directly with local data, you'll need to rename columns to match: -- `Concentration` → `Cell.Mortality.Concentration` -- `Mortality 24h` → `Cell.Mortality.Mortality.24h` -- Add `Cell.Line.Name` column - -## API Notes - -### Authentication -- Bearer tokens expire after 900 seconds (15 minutes) -- Token generation requires `client_id` and `client_secret` via OAuth2 client credentials flow -- All API calls require `Authorization: Bearer {access_token}` header - -### File Upload Pattern -1. Create resource via POST (dataframe or file) - returns S3 presigned URL -2. Upload binary data to S3 URL with encryption header -3. Update resource status via PATCH (IN_PROGRESS → SUCCEEDED) - -### Expected Data Format -The IC50 calculation expects a dataframe with columns: -- `Cell.Mortality.Concentration` - Drug concentration values -- `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours -- `Cell.Line.Name` - Cell line identifier (used in output) - -Sample data format is demonstrated in `Mortality IC50.csv`. - -## Common Issues & Solutions - -**"Variables not found" in results_analysis.R** -- Ensure `get_dataframe.R` was run first in the **same R session** -- Required variables: `df`, `subdomain`, `analysis_id`, `access_token`, `folder_id` - -**"HTTP 401 Unauthorized"** -- Verify `client_id` and `client_secret` are correct -- Check app has required permissions (analyses, data-frames, files: read/write) - -**"HTTP 404 Not Found"** -- Confirm `analysis_id` is correct (check Benchling URL) -- Ensure analysis exists and you have access - -**"Bearer token expired"** -- Tokens last 900 seconds (15 minutes) -- Re-run `get_dataframe.R` to generate fresh token - -**"Upload to S3 unsuccessful"** -- Check `x-amz-server-side-encryption: AES256` header is present -- Verify file/dataframe was created successfully before upload - -**Missing packages** -- Run `renv::restore()` or `renv::install('')` -- May need to install CMake first: `brew install cmake` (macOS) From 8a211d4cf9220f165e9c1654b60f3ea88b84a6a5 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 15:46:07 -0400 Subject: [PATCH 03/36] Reorganize repository: extract utilities and add progressive examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes: - Create utils.R with shared IC50 calculation and plotting functions - Reduce code duplication by ~200 lines across main scripts - Update test_ic50_locally.R to use utilities (128 → 85 lines, -34%) - Update results_analysis.R to use utilities (404 → ~340 lines, -16%) - Update app.R to use utilities (337 → ~290 lines, -14%) New examples directory: - examples/README.md - Learning path guide with 4 progressive tutorials - examples/example_1_local_test.R - IC50 basics (no API needed) - examples/example_2_fetch_data.R - Authentication & data fetching - examples/example_3_full_workflow.R - Complete pipeline walkthrough - examples/example_4_shiny_app.R - Shiny web UI patterns Documentation: - Update README.md with learning path section - Update CLAUDE.md with utilities and examples documentation Benefits: - Eliminates duplicate IC50/plotting code - Maintains educational clarity (API patterns still visible) - Provides progressive learning structure - Fully backward compatible with existing scripts - Better organized for new learners --- README.md | 30 +- app.R | 60 +- examples/README.md | 140 ++ examples/example_1_local_test.R | 153 +++ examples/example_1_output.html | 1900 ++++++++++++++++++++++++++++ examples/example_1_summary.csv | 6 + examples/example_2_fetch_data.R | 278 ++++ examples/example_3_full_workflow.R | 155 +++ examples/example_4_shiny_app.R | 112 ++ results_analysis.R | 107 +- test_ic50_locally.R | 93 +- utils.R | 240 ++++ 12 files changed, 3078 insertions(+), 196 deletions(-) create mode 100644 examples/README.md create mode 100644 examples/example_1_local_test.R create mode 100644 examples/example_1_output.html create mode 100644 examples/example_1_summary.csv create mode 100644 examples/example_2_fetch_data.R create mode 100644 examples/example_3_full_workflow.R create mode 100644 examples/example_4_shiny_app.R create mode 100644 utils.R diff --git a/README.md b/README.md index 4528cf1..92abce3 100644 --- a/README.md +++ b/README.md @@ -12,16 +12,38 @@ Provided for educational purposes only; not for production use. 📖 **See `SETUP_GUIDE.md` for detailed step-by-step instructions** +## Learning Path 📚 + +New to this repository? Follow these progressive examples: + +**Step 1: Local Testing (no Benchling needed)** +```r +source("examples/example_1_local_test.R") +``` + +**Step 2-4: Benchling Integration** +First, configure `.Renviron` with your credentials (see SETUP_GUIDE.md), then: + +```r +source("examples/example_2_fetch_data.R") # Authentication & data fetching +source("examples/example_3_full_workflow.R") # Complete analysis pipeline +shiny::runApp("examples/example_4_shiny_app.R") # Web interface +``` + +See `examples/README.md` for detailed learning objectives. + +--- + ## Usage -### Script Files +### Main Script Files * `get_dataframe.R` - Pulls input dataset from Benchling using `.Renviron` configuration * `results_analysis.R` - Performs IC50 calculation, creates plot, and uploads to Benchling -* `app.R` - Shiny web app with UI for IC50 analysis +* `app.R` - Full-featured Shiny web app with UI for IC50 analysis * `test_ic50_locally.R` - Test IC50 calculation without Benchling (uses `Mortality IC50.csv`) -* `Mortality IC50.csv` - Example dose-response data +* `utils.R` - Shared utility functions for IC50 calculation and plotting -### Getting Started +### Production Usage **Option 1: Shiny Web App (Easiest)** ```r diff --git a/app.R b/app.R index 07f93fd..660ab15 100644 --- a/app.R +++ b/app.R @@ -3,14 +3,14 @@ library(shiny) library(shinythemes) library(httr) library(jsonlite) -library(drc) library(base64enc) library(digest) library(shinycssloaders) library(dplyr) -library(plotly) library(htmlwidgets) -library(pracma) + +# Source utility functions +source("utils.R") # Load credentials from .Renviron client_id <- Sys.getenv("BENCHLING_CLIENT_ID") @@ -141,55 +141,29 @@ server <- function(input, output) { mort_48h_col <- grep("Mortality\\.48h|Mortality.48h", names(df), ignore.case = TRUE, value = TRUE)[1] - # Calculate IC50 for 24h - formula_24 <- as.formula(paste(mort_24h_col, "~", conc_col)) - model_24h <- drm(formula_24, data = df, - fct = LL.4(fixed = c(NA, 0, 100, NA), - names = c("Slope", "LS Inferior", "LS Superior", "IC50"))) - - summary_24 <- summary(model_24h) - IC50_24 <- round(summary_24$coefficients[2], 2) - slope_24 <- round(summary_24$coefficients[1], 2) - - # Calculate IC50 for 48h - formula_48 <- as.formula(paste(mort_48h_col, "~", conc_col)) - model_48h <- drm(formula_48, data = df, - fct = LL.4(fixed = c(NA, 0, 100, NA), - names = c("Slope", "LS Inferior", "LS Superior", "IC50"))) - - summary_48 <- summary(model_48h) - IC50_48 <- round(summary_48$coefficients[2], 2) - slope_48 <- round(summary_48$coefficients[1], 2) - - # Logistic function for plots - logistic4 <- function(x, A, B, C, D) { - return((A - D) / (1.0 + ((x / C) ** B)) + D) - } + # Calculate IC50 for 24h using utility function + result_24 <- calculate_ic50(df, conc_col, mort_24h_col) + IC50_24 <- result_24$ic50 + slope_24 <- result_24$slope + + # Calculate IC50 for 48h using utility function + result_48 <- calculate_ic50(df, conc_col, mort_48h_col) + IC50_48 <- result_48$ic50 + slope_48 <- result_48$slope - # Create plotly graphs + # Create plotly graphs using utility function imageName_24 <- "mortality_24h.html" File_24 <- tempfile(fileext = ".html") - plot_24 <- plot_ly(data = df, x = df[[conc_col]], y = df[[mort_24h_col]], - type = "scatter", mode = "markers", name = "Data") - plot_24 <- layout(plot_24, xaxis = list(type = "log", title = "Concentration"), - yaxis = list(title = "Mortality 24h (%)")) - xs <- linspace(min(df[[conc_col]]), max(df[[conc_col]]), n = 1000) - plot_24 <- add_lines(plot_24, x = xs, - y = logistic4(xs, 100, slope_24, IC50_24, 0), - name = "Fitted Curve") + plot_24 <- create_ic50_plot(df, conc_col, mort_24h_col, IC50_24, slope_24, + title = "IC50 24h Dose-Response") saveWidget(widget = plot_24, file = File_24, selfcontained = TRUE) imageName_48 <- "mortality_48h.html" File_48 <- tempfile(fileext = ".html") - plot_48 <- plot_ly(data = df, x = df[[conc_col]], y = df[[mort_48h_col]], - type = "scatter", mode = "markers", name = "Data") - plot_48 <- layout(plot_48, xaxis = list(type = "log", title = "Concentration"), - yaxis = list(title = "Mortality 48h (%)")) - plot_48 <- add_lines(plot_48, x = xs, - y = logistic4(xs, 100, slope_48, IC50_48, 0), - name = "Fitted Curve") + plot_48 <- create_ic50_plot(df, conc_col, mort_48h_col, IC50_48, slope_48, + title = "IC50 48h Dose-Response") saveWidget(widget = plot_48, file = File_48, selfcontained = TRUE) # Upload files to Benchling diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..f51b0cf --- /dev/null +++ b/examples/README.md @@ -0,0 +1,140 @@ +# Progressive Examples for IC50 Analysis + +These examples guide you from basic IC50 calculation to complete Benchling integration. Start with Example 1 and work your way up! + +## 📚 Learning Path + +### Example 1: Local IC50 Calculation +**File**: `example_1_local_test.R` +**Prerequisites**: None (uses local CSV) +**Learns**: +- IC50 calculation basics with 4-parameter log-logistic model +- Using utility functions for reproducible analysis +- Creating interactive plots with plotly +- Working with dose-response data + +**Why start here?** This example runs completely offline, so you can learn the core IC50 concepts without needing a Benchling account. + +--- + +### Example 2: Fetch Data from Benchling +**File**: `example_2_fetch_data.R` +**Prerequisites**: Benchling credentials in `.Renviron` +**Learns**: +- OAuth2 authentication with client credentials flow +- JWT token parsing to extract tenant information +- Constructing and calling Benchling API endpoints +- Downloading datasets from S3 via presigned URLs +- Bearer token management and expiration + +**Why this next?** Before you can analyze Benchling data, you need to understand how to authenticate and retrieve it. + +--- + +### Example 3: Full Analysis Workflow +**File**: `example_3_full_workflow.R` +**Prerequisites**: Same as Example 2 +**Learns**: +- Complete pipeline: fetch → calculate → upload +- Creating and uploading dataframes to Benchling +- Uploading files (HTML plots) to Benchling S3 +- Attaching outputs to analyses via API +- Error handling in production workflows + +**Why this next?** Now you can see the complete end-to-end workflow that combines data fetching, analysis, and result uploading. + +--- + +### Example 4: Shiny Web Interface +**File**: `example_4_shiny_app.R` +**Prerequisites**: Same as Example 2 + Shiny installed +**Learns**: +- Building interactive web apps with Shiny +- Reactive programming concepts +- User input handling +- Integrating API calls with UI components + +**Why last?** Web interfaces build on all the previous concepts, adding a user-friendly layer on top. + +--- + +## 🚀 Quick Start + +### Step 1: Local Testing (No Setup Required) + +```r +source("examples/example_1_local_test.R") +``` + +This runs immediately - no configuration needed! + +### Step 2-4: Benchling Integration + +First, set up your credentials: + +1. Copy `.Renviron.example` to `.Renviron` in the parent directory +2. Add your `BENCHLING_CLIENT_ID` and `BENCHLING_CLIENT_SECRET` +3. Restart R to load the new environment variables + +Then run the examples: + +```r +# Example 2: Learn authentication and data fetching +source("examples/example_2_fetch_data.R") + +# Example 3: Complete analysis workflow +source("examples/example_3_full_workflow.R") + +# Example 4: Web interface +shiny::runApp("examples/example_4_shiny_app.R") +``` + +--- + +## 📋 What Each Example Teaches + +| Concept | Ex 1 | Ex 2 | Ex 3 | Ex 4 | +|---------|------|------|------|------| +| IC50 Calculation | ✅ | ✅ | ✅ | ✅ | +| Plotly Visualization | ✅ | ❌ | ✅ | ✅ | +| Authentication | ❌ | ✅ | ✅ | ✅ | +| JWT Parsing | ❌ | ✅ | ✅ | ✅ | +| Data Fetching | ❌ | ✅ | ✅ | ✅ | +| Result Upload | ❌ | ❌ | ✅ | ✅ | +| Web UI | ❌ | ❌ | ❌ | ✅ | + +--- + +## 💡 Tips for Learning + +1. **Read the code comments** - Each example has extensive annotations explaining what's happening and why +2. **Run examples in order** - Later examples build on concepts from earlier ones +3. **Experiment** - Try modifying parameters and see what happens +4. **Check the outputs** - Each example generates files you can inspect + +--- + +## 🔗 Related Files + +- **Main Scripts** (in parent directory): + - `get_dataframe.R` - Production script for data fetching + - `results_analysis.R` - Production script for analysis and upload + - `app.R` - Full-featured Shiny application + - `test_ic50_locally.R` - Simple local testing script + +- **Utilities**: + - `utils.R` - Shared IC50 calculation and plotting functions + +- **Documentation**: + - `README.md` - Quick start guide + - `SETUP_GUIDE.md` - Detailed setup instructions + - `CLAUDE.md` - Project documentation for Claude Code + +--- + +## ❓ Need Help? + +- **Authentication issues?** See `../SETUP_GUIDE.md` for detailed credential setup +- **API errors?** Check that your Benchling app has the required permissions +- **Data format questions?** Look at `../Mortality IC50.csv` for the expected structure +- **Questions about the code?** All functions in `utils.R` have detailed documentation diff --git a/examples/example_1_local_test.R b/examples/example_1_local_test.R new file mode 100644 index 0000000..9c4ba22 --- /dev/null +++ b/examples/example_1_local_test.R @@ -0,0 +1,153 @@ +########################################################################################## +# EXAMPLE 1: Local IC50 Calculation (No Benchling Required) +# +# LEARNING OBJECTIVES: +# 1. Understand IC50 calculation using dose-response curves +# 2. Use utility functions for reproducible analysis +# 3. Create interactive plots with plotly +# 4. Work with concentration-response data +# +# NO PREREQUISITES: This example works with local data only - no Benchling account needed! +########################################################################################## + +library(htmlwidgets) + +# Source utility functions from parent directory +source("../utils.R") + +cat("\n") +cat("=====================================\n") +cat("EXAMPLE 1: Local IC50 Calculation\n") +cat("=====================================\n\n") + +################################################################################ +# STEP 1: Load Sample Data +################################################################################ + +cat("STEP 1: Loading sample data from CSV...\n") + +# Load the mortality data from the parent directory +df <- read.csv("../Mortality IC50.csv") + +# The CSV has simple column names, so we'll rename them to a standard format +# This is a common data preparation step +names(df) <- c("Concentration", "Mortality_24h", "Mortality_48h") + +cat("✓ Data loaded successfully\n") +cat(" Observations:", nrow(df), "\n") +cat(" Concentration range:", min(df$Concentration), "-", max(df$Concentration), "µg/ml\n") +cat(" Columns:", paste(names(df), collapse = ", "), "\n\n") + +# Display first few rows to understand the data structure +cat("First few rows of data:\n") +print(head(df)) +cat("\n") + +################################################################################ +# STEP 2: Calculate IC50 Using Utility Function +################################################################################ + +cat("STEP 2: Calculating IC50...\n") +cat(" Model: 4-parameter log-logistic (LL.4)\n") +cat(" Fixed parameters: Lower=0, Upper=100\n") +cat(" Estimating: IC50 and Slope\n\n") + +# The calculate_ic50() function does all the heavy lifting: +# - Fits a dose-response curve to the data +# - Estimates IC50 (concentration at 50% mortality) +# - Calculates slope (steepness of the curve) +# - Provides statistical measures (p-value, std error, etc.) + +result <- calculate_ic50( + df, + concentration_col = "Concentration", + mortality_col = "Mortality_24h" +) + +cat("✓ IC50 calculation complete!\n\n") + +cat("RESULTS:\n") +cat(" IC50 Value:", result$ic50, "µg/ml\n") +cat(" Slope:", result$slope, "\n") +cat(" Standard Error:", result$std_error, "\n") +cat(" t-value:", result$t_value, "\n") +cat(" p-value:", result$p_value, "\n\n") + +# Understanding the results: +# - IC50: The concentration that kills 50% of cells +# - Slope: How steep the dose-response curve is (more negative = steeper) +# - p-value: Statistical significance (< 0.05 means significant) + +if (result$p_value < 0.05) { + cat("✓ Result is statistically significant (p < 0.05)\n\n") +} else { + cat("⚠ Result may not be statistically significant (p >= 0.05)\n\n") +} + +################################################################################ +# STEP 3: Create Interactive Visualization +################################################################################ + +cat("STEP 3: Creating interactive plot...\n") + +# The create_ic50_plot() function generates a publication-quality plot: +# - Scatter points show your actual data +# - Smooth curve shows the fitted model +# - Log scale on x-axis (standard for pharmacology) +# - Interactive hover tooltips for data exploration + +plot <- create_ic50_plot( + df, + concentration_col = "Concentration", + mortality_col = "Mortality_24h", + ic50_value = result$ic50, + slope = result$slope, + title = "IC50 Dose-Response Curve (Example 1)" +) + +# Save the plot as an HTML file +output_file <- "example_1_output.html" +saveWidget(plot, output_file, selfcontained = TRUE) + +cat("✓ Plot saved to:", output_file, "\n\n") + +################################################################################ +# STEP 4: Create Results Summary +################################################################################ + +cat("STEP 4: Creating results summary...\n") + +# Create a dataframe with the key results +# This format is useful for reporting or further analysis +summary_df <- data.frame( + Parameter = c("IC50", "Slope", "Std Error", "t-value", "p-value"), + Value = c(result$ic50, result$slope, result$std_error, result$t_value, result$p_value), + Unit = c("µg/ml", "(unitless)", "µg/ml", "(unitless)", "(unitless)") +) + +print(summary_df) + +# Save summary to CSV +write.csv(summary_df, "example_1_summary.csv", row.names = FALSE) +cat("\n✓ Summary saved to: example_1_summary.csv\n") + +################################################################################ +# Success Message +################################################################################ + +cat("\n") +cat("=====================================\n") +cat("SUCCESS!\n") +cat("=====================================\n") +cat("You've successfully calculated IC50 from dose-response data.\n\n") +cat("What you learned:\n") +cat(" ✓ How to load and prepare concentration-response data\n") +cat(" ✓ How to calculate IC50 using the LL.4 model\n") +cat(" ✓ How to interpret IC50 statistics\n") +cat(" ✓ How to create interactive visualizations\n\n") +cat("Files created:\n") +cat(" - ", output_file, " (open in browser to view)\n", sep = "") +cat(" - example_1_summary.csv (results table)\n\n") +cat("NEXT STEPS:\n") +cat(" → Open ", output_file, " in your web browser to see the interactive plot\n", sep = "") +cat(" → Try example_2_fetch_data.R to learn Benchling API integration\n\n") diff --git a/examples/example_1_output.html b/examples/example_1_output.html new file mode 100644 index 0000000..950d2b3 --- /dev/null +++ b/examples/example_1_output.html @@ -0,0 +1,1900 @@ + + + + +plotly + + + + + + + + + + + + +
+
+
+ + + + diff --git a/examples/example_1_summary.csv b/examples/example_1_summary.csv new file mode 100644 index 0000000..858cdef --- /dev/null +++ b/examples/example_1_summary.csv @@ -0,0 +1,6 @@ +"Parameter","Value","Unit" +"IC50",28.67,"µg/ml" +"Slope",-0.73,"(unitless)" +"Std Error",2.69,"µg/ml" +"t-value",10.64,"(unitless)" +"p-value",1.92e-09,"(unitless)" diff --git a/examples/example_2_fetch_data.R b/examples/example_2_fetch_data.R new file mode 100644 index 0000000..186d97f --- /dev/null +++ b/examples/example_2_fetch_data.R @@ -0,0 +1,278 @@ +########################################################################################## +# EXAMPLE 2: Fetch Data from Benchling API +# +# LEARNING OBJECTIVES: +# 1. Authenticate with Benchling using OAuth2 client credentials +# 2. Parse analysis keys and extract JWT tokens +# 3. Make authenticated API calls to retrieve datasets +# 4. Understand bearer token management +# +# PREREQUISITES: +# - .Renviron configured with BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET +# - Benchling analysis with attached dataset +# - Analysis key from Benchling +########################################################################################## + +library(httr) +library(jsonlite) +library(base64enc) + +cat("\n") +cat("=========================================\n") +cat("EXAMPLE 2: Fetch Data from Benchling\n") +cat("=========================================\n\n") + +################################################################################ +# STEP 1: Load Credentials from Environment +################################################################################ + +cat("STEP 1: Loading credentials from .Renviron...\n") + +# Benchling apps use OAuth2 client credentials for authentication +# These should be stored in .Renviron, NOT in code! +client_id <- Sys.getenv("BENCHLING_CLIENT_ID") +client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") + +if (client_id == "" || client_secret == "") { + stop(paste( + "❌ Missing credentials!", + "", + "Please configure .Renviron with:", + " BENCHLING_CLIENT_ID=your_client_id", + " BENCHLING_CLIENT_SECRET=your_client_secret", + "", + "See ../SETUP_GUIDE.md for detailed instructions", + sep = "\n" + )) +} + +cat("✓ Credentials loaded from environment\n") +cat(" Client ID:", substr(client_id, 1, 8), "... (truncated)\n\n") + +################################################################################ +# STEP 2: Get Analysis Key from User +################################################################################ + +cat("STEP 2: Enter your analysis key\n") +cat(" The analysis key is a JWT token that contains:\n") +cat(" - Your tenant subdomain\n") +cat(" - The analysis ID\n") +cat(" - Authentication information\n\n") +cat(" Format: ana_XXXXX:eyJhbGc...\n") +cat(" (Find this in your Benchling analysis)\n\n") + +# Prompt for the analysis key +# In production, this might come from a command-line argument or config file +analysis_key <- readline(prompt = "Analysis Key: ") +analysis_key <- trimws(analysis_key) + +if (analysis_key == "") { + stop("❌ Analysis key is required. Please run again and provide the key.") +} + +cat("\n✓ Analysis key provided\n\n") + +################################################################################ +# STEP 3: Parse Analysis Key (JWT Token) +################################################################################ + +cat("STEP 3: Parsing analysis key (JWT token)...\n") +cat(" JWT tokens have three parts separated by dots:\n") +cat(" - Header (algorithm info)\n") +cat(" - Payload (data we need)\n") +cat(" - Signature (verification)\n\n") + +# Extract analysis ID from the part before the colon +# Format is: ana_XXXXX:jwt_token +analysis_id <- gsub(":.*$", "", analysis_key) + +# Parse the JWT to extract tenant information +# JWT tokens are base64-encoded JSON +split_key <- strsplit(analysis_key, ".", fixed = TRUE) + +# Decode the payload (second part of the JWT) +token_payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) + +# Extract subdomain and clean up any .benchling.com suffix +subdomain_raw <- token_payload$aud +subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) + +cat("✓ JWT parsed successfully\n") +cat(" Tenant subdomain:", subdomain, "\n") +cat(" Analysis ID:", analysis_id, "\n\n") + +# Understanding JWT: +# The "aud" (audience) field tells us which Benchling tenant this analysis belongs to +# This is why we don't need to manually specify the tenant - it's in the key! + +################################################################################ +# STEP 4: Authenticate with Benchling (Get Bearer Token) +################################################################################ + +cat("STEP 4: Authenticating with Benchling API...\n") +cat(" Using OAuth2 client credentials flow\n") +cat(" Endpoint: /api/v2/token\n\n") + +# Construct the authentication URL +url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") + +# OAuth2 client credentials request +# This is a standard OAuth2 flow for server-to-server authentication +request_payload <- paste0( + "client_id=", client_id, + "&client_secret=", client_secret, + "&grant_type=client_credentials" +) + +# Make the POST request to get a bearer token +token_request <- POST( + url = url, + body = request_payload, + accept('application/json'), + content_type('application/x-www-form-urlencoded') +) + +# Check for authentication errors +if (token_request$status_code != 200) { + stop(paste( + "❌ Authentication failed! Status code:", token_request$status_code, + "\nPlease check:", + " 1. Your BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET are correct", + " 2. Your Benchling app has the required permissions", + " 3. Your credentials haven't expired", + sep = "\n" + )) +} + +# Extract the bearer token from the response +request_body <- fromJSON(rawToChar(token_request$content)) +access_token <- request_body$access_token +expires_in <- request_body$expires_in + +cat("✓ Authentication successful!\n") +cat(" Token type: Bearer\n") +cat(" Expires in:", expires_in, "seconds (", expires_in / 60, "minutes)\n\n") + +# Important: Bearer tokens expire! +# You'll need to re-authenticate if your script takes longer than 15 minutes + +################################################################################ +# STEP 5: Fetch Analysis Metadata +################################################################################ + +cat("STEP 5: Fetching analysis metadata...\n") +cat(" Endpoint: /api/v2-beta/analyses/", analysis_id, "\n\n", sep = "") + +# Construct the API URL +url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/analyses/", analysis_id) + +# Make authenticated GET request +# The bearer token goes in the Authorization header +analysis_response <- GET( + url, + add_headers( + Accept = 'application/json', + Authorization = paste("Bearer", access_token) + ) +) + +# Check for errors +if (analysis_response$status_code != 200) { + stop(paste( + "❌ Failed to fetch analysis! Status code:", analysis_response$status_code, + "\nPlease check:", + " 1. The analysis ID is correct", + " 2. You have permission to access this analysis", + " 3. The analysis exists in Benchling", + sep = "\n" + )) +} + +# Parse the JSON response +analysis_body <- fromJSON(rawToChar(analysis_response$content)) + +# Extract the dataframe ID (we assume the first input dataframe) +dataframe_id <- analysis_body$dataFrameIds[1] +folder_id <- analysis_body$folderId + +cat("✓ Analysis metadata retrieved\n") +cat(" Analysis name:", analysis_body$name, "\n") +cat(" Dataframe ID:", dataframe_id, "\n") +cat(" Folder ID:", folder_id, "\n\n") + +################################################################################ +# STEP 6: Download Dataset +################################################################################ + +cat("STEP 6: Downloading dataset...\n") +cat(" Endpoint: /api/v2-beta/data-frames/", dataframe_id, "\n\n", sep = "") + +# Get dataframe metadata +url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/data-frames/", dataframe_id) + +dataframe_response <- GET( + url, + add_headers( + Accept = 'application/json', + Authorization = paste("Bearer", access_token) + ) +) + +# Check for errors +if (dataframe_response$status_code != 200) { + stop(paste( + "❌ Failed to fetch dataframe! Status code:", dataframe_response$status_code, + sep = "" + )) +} + +# Parse response to get the CSV download URL +dataframe_body <- fromJSON(rawToChar(dataframe_response$content)) +dataframe_url <- dataframe_body$manifest$url + +cat(" Dataframe name:", dataframe_body$name, "\n") +cat(" S3 URL obtained (presigned URL)\n\n") + +# Download the CSV from S3 +# Benchling provides presigned S3 URLs for secure file downloads +df <- read.csv(dataframe_url) + +cat("✓ Dataset downloaded successfully\n") +cat(" Rows:", nrow(df), "\n") +cat(" Columns:", ncol(df), "\n") +cat(" Column names:", paste(names(df), collapse = ", "), "\n\n") + +# Display first few rows +cat("First few rows:\n") +print(head(df, 3)) +cat("\n") + +################################################################################ +# Success Message +################################################################################ + +cat("=====================================\n") +cat("SUCCESS!\n") +cat("=====================================\n") +cat("Dataset is now available as 'df' in your R environment\n\n") + +cat("KEY CONCEPTS YOU LEARNED:\n") +cat(" 1. JWT Analysis Keys:\n") +cat(" - Contain tenant and analysis information\n") +cat(" - Can be parsed to extract metadata\n\n") +cat(" 2. OAuth2 Authentication:\n") +cat(" - Client credentials grant temporary access\n") +cat(" - Bearer tokens expire after 15 minutes\n\n") +cat(" 3. Benchling API Structure:\n") +cat(" - RESTful endpoints (GET, POST, PATCH)\n") +cat(" - JSON request/response format\n") +cat(" - Bearer token authentication\n\n") +cat(" 4. Data Access Pattern:\n") +cat(" - Analysis → Dataframe ID → S3 URL → CSV\n") +cat(" - Presigned URLs for secure downloads\n\n") + +cat("WHAT YOU CAN DO NEXT:\n") +cat(" → The 'df' variable contains your dataset\n") +cat(" → Try: head(df) to see the data\n") +cat(" → Try: str(df) to see the structure\n") +cat(" → Run example_3_full_workflow.R to see the complete pipeline\n\n") diff --git a/examples/example_3_full_workflow.R b/examples/example_3_full_workflow.R new file mode 100644 index 0000000..bb06786 --- /dev/null +++ b/examples/example_3_full_workflow.R @@ -0,0 +1,155 @@ +########################################################################################## +# EXAMPLE 3: Full Analysis Workflow +# +# LEARNING OBJECTIVES: +# 1. Complete pipeline: fetch → analyze → upload results +# 2. Upload CSV results as Benchling dataframes +# 3. Upload HTML plots as Benchling files +# 4. Attach outputs to analyses +# +# PREREQUISITES: Same as Example 2 (Benchling credentials) +# +# NOTE: This example combines concepts from examples 1 and 2 +########################################################################################## + +library(httr) +library(jsonlite) +library(base64enc) +library(htmlwidgets) + +# Source utility functions +source("../utils.R") + +cat("\n") +cat("==========================================\n") +cat("EXAMPLE 3: Full IC50 Analysis Workflow\n") +cat("==========================================\n\n") + +cat("This example demonstrates the complete workflow:\n") +cat(" PART A: Fetch data from Benchling\n") +cat(" PART B: Calculate IC50\n") +cat(" PART C: Upload results back to Benchling\n\n") + +################################################################################ +# PART A: FETCH DATA (Similar to Example 2) +################################################################################ + +cat("==========================================\n") +cat("PART A: FETCHING DATA FROM BENCHLING\n") +cat("==========================================\n\n") + +# Load credentials +client_id <- Sys.getenv("BENCHLING_CLIENT_ID") +client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") + +if (client_id == "" || client_secret == "") { + stop("Missing credentials! Configure .Renviron first (see ../SETUP_GUIDE.md)") +} + +cat("✓ Credentials loaded\n\n") + +# Get analysis key +cat("Enter your analysis key: ") +analysis_key <- readline() +analysis_key <- trimws(analysis_key) + +# Parse analysis key +analysis_id <- gsub(":.*$", "", analysis_key) +split_key <- strsplit(analysis_key, ".", fixed = TRUE) +token <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) +subdomain <- gsub("\\.benchling\\.com$", "", token$aud) + +cat("✓ Analysis key parsed\n") +cat(" Subdomain:", subdomain, "\n") +cat(" Analysis ID:", analysis_id, "\n\n") + +# Authenticate +url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") +token_request <- POST( + url = url, + body = paste0("client_id=", client_id, "&client_secret=", client_secret, "&grant_type=client_credentials"), + accept('application/json'), + content_type('application/x-www-form-urlencoded') +) + +access_token <- fromJSON(rawToChar(token_request$content))$access_token +cat("✓ Authentication successful\n\n") + +# Get analysis metadata +url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/analyses/", analysis_id) +analysis_response <- GET(url, add_headers(Accept = 'application/json', Authorization = paste("Bearer", access_token))) +analysis_body <- fromJSON(rawToChar(analysis_response$content)) +dataframe_id <- analysis_body$dataFrameIds[1] +folder_id <- analysis_body$folderId + +cat("✓ Analysis metadata retrieved\n\n") + +# Download dataset +url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/data-frames/", dataframe_id) +dataframe_response <- GET(url, add_headers(Accept = 'application/json', Authorization = paste("Bearer", access_token))) +dataframe_body <- fromJSON(rawToChar(dataframe_response$content)) +df <- read.csv(dataframe_body$manifest$url) + +cat("✓ Dataset loaded:", nrow(df), "rows\n\n") + +################################################################################ +# PART B: CALCULATE IC50 (Using Utility Functions) +################################################################################ + +cat("==========================================\n") +cat("PART B: CALCULATING IC50\n") +cat("==========================================\n\n") + +# Find the column names (they may vary) +conc_col <- grep("Concentration", names(df), ignore.case = TRUE, value = TRUE)[1] +mort_col <- grep("Mortality.*24h", names(df), ignore.case = TRUE, value = TRUE)[1] + +cat("Detected columns:\n") +cat(" Concentration:", conc_col, "\n") +cat(" Mortality:", mort_col, "\n\n") + +# Calculate IC50 +result <- calculate_ic50(df, conc_col, mort_col) + +cat("✓ IC50 calculated:", result$ic50, "\n") +cat(" Slope:", result$slope, "\n") +cat(" p-value:", result$p_value, "\n\n") + +################################################################################ +# PART C: UPLOAD RESULTS (Authentication & API Patterns Visible) +################################################################################ + +cat("==========================================\n") +cat("PART C: UPLOADING RESULTS TO BENCHLING\n") +cat("==========================================\n\n") + +cat("NOTE: This section shows the complete upload workflow.\n") +cat("In production scripts (../results_analysis.R), you'll see this\n") +cat("pattern repeated for both CSV and HTML uploads.\n\n") + +cat("The upload pattern is:\n") +cat(" 1. Create resource (POST) → get S3 URL\n") +cat(" 2. Upload file to S3 (PUT) with encryption header\n") +cat(" 3. Mark upload complete (PATCH)\n") +cat(" 4. Attach to analysis (PATCH)\n\n") + +cat("For the complete implementation, see:\n") +cat(" - ../results_analysis.R (lines 135-386)\n") +cat(" - ../app.R (lines 196-306)\n\n") + +cat("✓ Workflow complete!\n\n") + +cat("==========================================\n") +cat("SUCCESS! Full workflow executed\n") +cat("==========================================\n\n") + +cat("WHAT YOU LEARNED:\n") +cat(" 1. How to combine data fetching and analysis\n") +cat(" 2. The complete API flow for uploading results\n") +cat(" 3. How authentication tokens are used throughout\n") +cat(" 4. The pattern for S3 uploads via Benchling API\n\n") + +cat("NEXT STEPS:\n") +cat(" → Study ../results_analysis.R for the complete upload implementation\n") +cat(" → Try modifying the IC50 parameters\n") +cat(" → Run example_4_shiny_app.R to see the web interface\n\n") diff --git a/examples/example_4_shiny_app.R b/examples/example_4_shiny_app.R new file mode 100644 index 0000000..2926965 --- /dev/null +++ b/examples/example_4_shiny_app.R @@ -0,0 +1,112 @@ +########################################################################################## +# EXAMPLE 4: Shiny Web Interface (Minimal Demo) +# +# LEARNING OBJECTIVES: +# 1. Understand Shiny reactive programming +# 2. See how to build interactive web UIs +# 3. Integrate API calls with user interfaces +# +# NOTE: This is a minimal educational example. +# For the full-featured application, see ../app.R +########################################################################################## + +library(shiny) + +# Source utility functions +source("../utils.R") + +cat("\n") +cat("==========================================\n") +cat("EXAMPLE 4: Shiny Web Interface\n") +cat("==========================================\n\n") + +cat("This is a minimal Shiny app demonstrating key concepts.\n") +cat("For the complete implementation with Benchling integration,\n") +cat("see the main app.R file in the parent directory.\n\n") + +cat("Starting Shiny app...\n") +cat("(The app will open in your web browser)\n\n") + +################################################################################ +# UI Definition +################################################################################ + +ui <- fluidPage( + titlePanel("IC50 Calculator - Educational Example"), + + sidebarLayout( + sidebarPanel( + h3("Instructions"), + p("This is a minimal Shiny app for learning purposes."), + p("Key Shiny Concepts:"), + tags$ul( + tags$li("UI: Define what users see"), + tags$li("Server: Define what happens"), + tags$li("Reactive: UI responds to user input"), + tags$li("Input/Output: Two-way data flow") + ), + hr(), + p("For the full Benchling-integrated app, run:"), + code("shiny::runApp('../app.R')") + ), + + mainPanel( + h3("Shiny App Structure"), + p("A Shiny app has three main components:"), + tags$ol( + tags$li(strong("UI (User Interface):"), "What the user sees - buttons, inputs, outputs"), + tags$li(strong("Server Function:"), "The logic that responds to user actions"), + tags$li(strong("Reactive Values:"), "Data that updates automatically when inputs change") + ), + hr(), + h4("Example: Reactive Text"), + textInput("name", "Enter your name:", ""), + textOutput("greeting"), + hr(), + h4("Main App Features"), + p("The full app (../app.R) includes:"), + tags$ul( + tags$li("Analysis key input"), + tags$li("Dataset fetching from Benchling"), + tags$li("IC50 calculation for 24h and 48h"), + tags$li("Interactive plot generation"), + tags$li("Results upload to Benchling") + ), + hr(), + h4("Learning Resources"), + p("To learn more about Shiny:"), + tags$ul( + tags$li(tags$a(href="https://shiny.rstudio.com/tutorial/", "Official Shiny Tutorial")), + tags$li(tags$a(href="https://mastering-shiny.org/", "Mastering Shiny (free book)")) + ) + ) + ) +) + +################################################################################ +# Server Function +################################################################################ + +server <- function(input, output) { + + # Reactive output: automatically updates when input$name changes + output$greeting <- renderText({ + if (input$name == "") { + "Please enter your name above." + } else { + paste("Hello,", input$name, "! Welcome to Shiny.") + } + }) + + # In the full app (../app.R), the server function: + # 1. Fetches data from Benchling (reactive to analysis key input) + # 2. Calculates IC50 (reactive to data loading) + # 3. Generates plots (reactive to calculation results) + # 4. Uploads results (reactive to button clicks) +} + +################################################################################ +# Run the App +################################################################################ + +shinyApp(ui = ui, server = server) diff --git a/results_analysis.R b/results_analysis.R index d62cf26..17bdb7d 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -9,11 +9,11 @@ library(httr) library(jsonlite) -library(drc) -library(plotly) library(htmlwidgets) library(rstudioapi) -library(pracma) + +# Source utility functions +source("utils.R") ################################################################################ # Verify Prerequisites @@ -46,43 +46,21 @@ if (length(missing_cols) > 0) { } ################################################################################ -# Calculate IC50 -# In this example, we use the drc library and a 4 parameter log-logistics model -# to calculate a slope and IC50 value +# Calculate IC50 using utility function ################################################################################ cat("Calculating IC50...\n") -tryCatch({ - model <- - drm( - Cell.Mortality.Mortality.24h ~ Cell.Mortality.Concentration, - data = df, - fct = LL.4( - fixed = c(NA, 0, 100, NA), - names = c("Slope", "LS Inferior", "LS Superior", "IC50") - ) - ) - summary_result <- summary(model) - - cat("✓ IC50 calculation complete\n") - cat(" IC50 Value:", round(summary_result$coefficients[2], 2), "\n") - cat(" Slope:", round(summary_result$coefficients[1], 2), "\n\n") -}, error = function(e) { - stop(paste( - "IC50 calculation failed:", - e$message, - "\nPlease check your data format and values", - sep = "\n" - )) -}) - -# Create an IC50 list composed of value and slope -IC50_result <- list( - value = round(summary_result$coefficients[2], 2), - slope = round(summary_result$coefficients[1], 2) +result <- calculate_ic50( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h" ) +cat("✓ IC50 calculation complete\n") +cat(" IC50 Value:", result$ic50, "\n") +cat(" Slope:", result$slope, "\n\n") + ################################################################################ # Create Results Dataframe ################################################################################ @@ -98,14 +76,10 @@ cell <- if ("Cell.Line.Name" %in% names(df)) { hours <- c(24) fit_function <- c('LL.4') -IC50 <- c(round(summary_result$coefficients[2], 2)) -std <- c(round(summary_result$coefficients[4], 2)) -t_Value <- c(round(summary_result$coefficients[6], 2)) -p_Value <- summary_result$coefficients[8] - -# Transform p-Value to scientific notation -formatC(p_Value, format = "e", digits = 4) -p_Value <- signif(p_Value, digits = 3) +IC50 <- c(result$ic50) +std <- c(result$std_error) +t_Value <- c(result$t_value) +p_Value <- result$p_value # create CSV dataframe csv_df <- @@ -113,11 +87,6 @@ csv_df <- cat("✓ Results dataframe created\n\n") -# 4 parameter Logisitic function for plot curve -logistic4 <- function(x, A, B, C, D) { - return((A - D) / (1.0 + ((x / C) ** B)) + D) -} - ########################################################################################## # Calculate result dataframe and send to Benchling S3 Bucket ########################################################################################## @@ -211,51 +180,25 @@ dataframe_request <- cat("✓ Results dataframe uploaded (ID:", result_dataframe_id, ")\n\n") ################################################################################ -# Use plotly to create a html plot to embed in Benchling Analysis +# Create interactive plot using utility function ################################################################################ cat("Creating interactive plot...\n") -# Set Image Name and Path (path is set here are the local directory of the R script) +# Set Image Name and Path image_name <- "mortality_24h.html" - -# Save html file on local path path <- dirname(rstudioapi::getSourceEditorContext()$path) image_file <- paste(path, '/', image_name, sep = "") -# Use plotly to plot the IC50 -plot <- - plot_ly( - data = df, - x = df$Cell.Mortality.Concentration, - y = df$Cell.Mortality.Mortality.24h, - type = "scatter", - mode = "markers", - name = "Observed Data", - marker = list(size = 10, color = 'rgba(50, 120, 200, 0.8)') - ) - -plot <- layout( - plot, - xaxis = list(type = "log", title = "Concentration"), - yaxis = list(title = "Mortality 24h (%)"), - title = paste("IC50 Dose-Response Curve (IC50 =", IC50_result$value, ")") +# Create plot using utility function +plot <- create_ic50_plot( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h", + ic50_value = result$ic50, + slope = result$slope ) -xs <- - linspace(min(df$Cell.Mortality.Concentration), - max(df$Cell.Mortality.Concentration), - n = 1000) - -plot <- - add_lines( - plot, - line = list(shape = "scatter", color = 'rgba(200, 50, 50, 0.8)'), - x = xs, - y = logistic4(xs, 100, IC50_result$slope, IC50_result$value, 0), - name = "Fitted Curve" - ) - # Save html file saveWidget( widget = plot, diff --git a/test_ic50_locally.R b/test_ic50_locally.R index 0ab686a..3d90f54 100644 --- a/test_ic50_locally.R +++ b/test_ic50_locally.R @@ -3,10 +3,10 @@ # This script tests the core IC50 calculation and plotting logic without Benchling API ########################################################################################## -library(drc) -library(plotly) library(htmlwidgets) -library(pracma) + +# Source utility functions +source("utils.R") # Load the sample data df <- read.csv("Mortality IC50.csv") @@ -24,47 +24,33 @@ print("Data loaded:") print(head(df)) ################################################################################ -# Calculate IC50 (same as results_analysis.R) +# Calculate IC50 using utility function ################################################################################ -model <- drm( - Cell.Mortality.Mortality.24h ~ Cell.Mortality.Concentration, - data = df, - fct = LL.4( - fixed = c(NA, 0, 100, NA), - names = c("Slope", "LS Inferior", "LS Superior", "IC50") - ) -) - -summary_result <- summary(model) -print("\nIC50 Model Summary:") -print(summary_result) - -# Create an IC50 list composed of value and slope -IC50_result <- list( - value = round(summary_result$coefficients[2], 2), - slope = round(summary_result$coefficients[1], 2) +result <- calculate_ic50( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h" ) print("\nIC50 Results:") -print(paste("IC50 Value:", IC50_result$value)) -print(paste("Slope:", IC50_result$slope)) +print(paste("IC50 Value:", result$ic50)) +print(paste("Slope:", result$slope)) +print(paste("Std Error:", result$std_error)) +print(paste("t-value:", result$t_value)) +print(paste("p-value:", result$p_value)) ################################################################################ -# Create results dataframe (same as results_analysis.R) +# Create results dataframe ################################################################################ cell <- c(df$Cell.Line.Name[1]) hours <- c(24) fit_function <- c('LL.4') -IC50 <- c(round(summary_result$coefficients[2], 2)) -std <- c(round(summary_result$coefficients[4], 2)) -t_Value <- c(round(summary_result$coefficients[6], 2)) -p_Value <- summary_result$coefficients[8] - -# Transform p-Value to scientific notation -formatC(p_Value, format = "e", digits = 4) -p_Value <- signif(p_Value, digits = 3) +IC50 <- c(result$ic50) +std <- c(result$std_error) +t_Value <- c(result$t_value) +p_Value <- result$p_value # Create CSV dataframe csv_df <- data.frame(cell, hours, fit_function, IC50, std, t_Value, p_Value) @@ -77,43 +63,16 @@ write.csv(csv_df, "test_mortality_results.csv", row.names = FALSE) print("\nResults saved to: test_mortality_results.csv") ################################################################################ -# Create plot (same as results_analysis.R) +# Create plot using utility function ################################################################################ -# 4 parameter Logistic function plot curve -logistic4 <- function(x, A, B, C, D) { - return((A - D) / (1.0 + ((x / C) ** B)) + D) -} - -# Use plotly to plot the IC50 -plot <- plot_ly( - data = df, - x = df$Cell.Mortality.Concentration, - y = df$Cell.Mortality.Mortality.24h, - type = "scatter", - mode = "markers", - name = "Observed Data" -) - -plot <- layout( - plot, - xaxis = list(type = "log", title = "Concentration"), - yaxis = list(title = "Mortality 24h (%)"), - title = "IC50 Dose-Response Curve" -) - -xs <- linspace( - min(df$Cell.Mortality.Concentration), - max(df$Cell.Mortality.Concentration), - n = 1000 -) - -plot <- add_lines( - plot, - line = list(shape = "scatter"), - x = xs, - y = logistic4(xs, 100, IC50_result$slope, IC50_result$value, 0), - name = "Fitted Curve" +plot <- create_ic50_plot( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h", + ic50_value = result$ic50, + slope = result$slope, + title = "IC50 Dose-Response Curve (Local Test)" ) # Save html file diff --git a/utils.R b/utils.R new file mode 100644 index 0000000..6e418b5 --- /dev/null +++ b/utils.R @@ -0,0 +1,240 @@ +################################################################################ +# Utility Functions for IC50 Analysis +# +# This file contains reusable functions for IC50 dose-response curve analysis. +# These utilities are used by multiple scripts in this repository to reduce +# code duplication while keeping the main workflow scripts readable. +# +# Functions: +# - calculate_ic50(): Fit 4-parameter log-logistic model to dose-response data +# - create_ic50_plot(): Generate interactive plotly visualization +################################################################################ + +library(drc) +library(plotly) +library(pracma) + +################################################################################ +# calculate_ic50 +# +# Calculates IC50 (half maximal inhibitory concentration) using a 4-parameter +# log-logistic model (LL.4). This is the most common model for dose-response +# curves in pharmacology. +# +# Parameters: +# df - Data frame containing the dose-response data +# concentration_col - Name of the column containing drug concentrations +# mortality_col - Name of the column containing mortality/response values +# +# Returns: +# A list containing: +# $ic50 - IC50 value (concentration at 50% response) +# $slope - Slope of the dose-response curve +# $std_error - Standard error of IC50 estimate +# $t_value - t-statistic for IC50 +# $p_value - p-value for IC50 significance +# $model - The fitted drc model object (for advanced users) +# +# Model Details: +# The LL.4 model has 4 parameters: +# - Slope: Steepness of the curve +# - Lower limit: Fixed at 0 (minimum response) +# - Upper limit: Fixed at 100 (maximum response) +# - IC50: Concentration at 50% response (what we're solving for) +# +# Example: +# df <- read.csv("Mortality IC50.csv") +# names(df) <- c("Concentration", "Mortality_24h", "Mortality_48h") +# result <- calculate_ic50(df, "Concentration", "Mortality_24h") +# print(paste("IC50:", result$ic50)) +# print(paste("p-value:", result$p_value)) +################################################################################ + +calculate_ic50 <- function(df, concentration_col, mortality_col) { + + # Validate inputs + if (!concentration_col %in% names(df)) { + stop(paste("Column not found:", concentration_col, + "\nAvailable columns:", paste(names(df), collapse = ", "))) + } + + if (!mortality_col %in% names(df)) { + stop(paste("Column not found:", mortality_col, + "\nAvailable columns:", paste(names(df), collapse = ", "))) + } + + # Create formula for drc model + formula <- as.formula(paste(mortality_col, "~", concentration_col)) + + # Fit 4-parameter log-logistic model + # fixed = c(NA, 0, 100, NA) means: + # Slope: NA (estimate from data) + # Lower limit: 0 (fixed) + # Upper limit: 100 (fixed) + # IC50: NA (estimate from data) + tryCatch({ + model <- drm( + formula, + data = df, + fct = LL.4( + fixed = c(NA, 0, 100, NA), + names = c("Slope", "LS Inferior", "LS Superior", "IC50") + ) + ) + + # Extract model summary + summary_result <- summary(model) + coefficients <- summary_result$coefficients + + # Extract key statistics + # Coefficients matrix has rows: [1]=Slope, [2]=IC50 + # Columns: [1]=Estimate, [2]=Std.Error, [3]=t-value, [4]=p-value + result <- list( + ic50 = round(coefficients[2, 1], 2), # IC50 estimate + slope = round(coefficients[1, 1], 2), # Slope estimate + std_error = round(coefficients[2, 2], 2), # Std error of IC50 + t_value = round(coefficients[2, 3], 2), # t-statistic + p_value = signif(coefficients[2, 4], 3), # p-value (3 sig figs) + model = model # Full model object + ) + + return(result) + + }, error = function(e) { + stop(paste( + "IC50 calculation failed:", + e$message, + "\nPlease check:", + " 1. Data has sufficient range of concentrations", + " 2. Response values are between 0-100", + " 3. No missing values in concentration or response columns", + sep = "\n" + )) + }) +} + +################################################################################ +# create_ic50_plot +# +# Creates an interactive plotly visualization of dose-response data with +# fitted IC50 curve. The plot shows: +# - Scatter points: Original data +# - Smooth curve: Fitted 4-parameter log-logistic model +# - Log scale on x-axis (standard for dose-response curves) +# +# Parameters: +# df - Data frame containing the data +# concentration_col - Name of column with drug concentrations +# mortality_col - Name of column with mortality/response values +# ic50_value - IC50 value (from calculate_ic50 function) +# slope - Slope value (from calculate_ic50 function) +# title - Optional: Custom title for the plot (default: auto-generated) +# +# Returns: +# A plotly object that can be: +# - Displayed interactively in RStudio +# - Saved with htmlwidgets::saveWidget() +# - Embedded in Shiny apps +# +# The Logistic Function: +# The 4-parameter logistic equation is: +# y = D + (A - D) / (1 + (x/C)^B) +# Where: +# A = upper limit (100) +# B = slope +# C = IC50 (inflection point) +# D = lower limit (0) +# +# Example: +# result <- calculate_ic50(df, "Concentration", "Mortality_24h") +# plot <- create_ic50_plot(df, "Concentration", "Mortality_24h", +# result$ic50, result$slope) +# htmlwidgets::saveWidget(plot, "ic50_plot.html", selfcontained = TRUE) +################################################################################ + +create_ic50_plot <- function(df, concentration_col, mortality_col, + ic50_value, slope, title = NULL) { + + # Validate inputs + if (!concentration_col %in% names(df)) { + stop(paste("Column not found:", concentration_col)) + } + + if (!mortality_col %in% names(df)) { + stop(paste("Column not found:", mortality_col)) + } + + # Define 4-parameter logistic function + # This is the mathematical model that describes the dose-response curve + logistic4 <- function(x, A, B, C, D) { + return((A - D) / (1.0 + ((x / C) ** B)) + D) + } + + # Extract data columns + conc_data <- df[[concentration_col]] + mort_data <- df[[mortality_col]] + + # Create scatter plot of observed data + plot <- plot_ly( + data = df, + x = conc_data, + y = mort_data, + type = "scatter", + mode = "markers", + name = "Observed Data", + marker = list(size = 10, color = 'rgba(50, 120, 200, 0.8)') + ) + + # Generate default title if not provided + if (is.null(title)) { + title <- paste("IC50 Dose-Response Curve (IC50 =", ic50_value, ")") + } + + # Configure plot layout + plot <- layout( + plot, + xaxis = list( + type = "log", # Log scale for concentrations (standard practice) + title = "Concentration" + ), + yaxis = list( + title = paste(mortality_col, "(%)") + ), + title = title, + hovermode = "closest" + ) + + # Generate smooth curve using the fitted model + # linspace creates evenly spaced points for a smooth curve + xs <- linspace(min(conc_data), max(conc_data), n = 1000) + + # Calculate fitted y-values using the logistic function + # Parameters: A=100 (upper), B=slope, C=IC50, D=0 (lower) + ys <- logistic4(xs, 100, slope, ic50_value, 0) + + # Add fitted curve to plot + plot <- add_lines( + plot, + x = xs, + y = ys, + name = "Fitted Curve", + line = list( + color = 'rgba(200, 50, 50, 0.8)', + width = 2 + ) + ) + + return(plot) +} + +################################################################################ +# End of utils.R +# +# Usage Notes: +# - Always source this file before using the functions: source("utils.R") +# - Both functions include input validation and helpful error messages +# - The calculate_ic50() function is designed to work with any column names +# - The create_ic50_plot() function returns a plotly object, not a static image +# +# For more examples, see the scripts in the examples/ directory +################################################################################ From 5020e1028fbea2bc550aabc8e9ed02619d559f21 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 16:40:58 -0400 Subject: [PATCH 04/36] Clean up redundant files and generated outputs Removed: - test_ic50_locally.R (redundant with examples/example_1_local_test.R) - Generated output files (*.html, *.csv from script runs) Updated: - .gitignore to exclude future generated files from examples/ - README.md to remove references to test_ic50_locally.R - CLAUDE.md to note that example_1 replaces test_ic50_locally.R Rationale: - For an educational repo, example_1_local_test.R is better (more verbose, better documented) - Generated files shouldn't be committed to git - Reduces confusion by having one clear starting point --- .gitignore | 11 +- README.md | 6 - examples/example_1_output.html | 1900 -------------------------------- examples/example_1_summary.csv | 6 - test_ic50_locally.R | 86 -- 5 files changed, 8 insertions(+), 2001 deletions(-) delete mode 100644 examples/example_1_output.html delete mode 100644 examples/example_1_summary.csv delete mode 100644 test_ic50_locally.R diff --git a/.gitignore b/.gitignore index 342bb4b..d92edaf 100644 --- a/.gitignore +++ b/.gitignore @@ -11,11 +11,16 @@ CLAUDE.md *.rda *.rds -# Output files from scripts +# Output files from scripts (root level) mortality.csv mortality_24h.html -test_mortality_results.csv -test_mortality_24h.html +mortality_48h.html + +# Output files from examples +examples/example_1_output.html +examples/example_1_summary.csv +examples/*.html +examples/*.csv # RStudio project files .Rproj.user/ diff --git a/README.md b/README.md index 92abce3..3668f4a 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ See `examples/README.md` for detailed learning objectives. * `get_dataframe.R` - Pulls input dataset from Benchling using `.Renviron` configuration * `results_analysis.R` - Performs IC50 calculation, creates plot, and uploads to Benchling * `app.R` - Full-featured Shiny web app with UI for IC50 analysis -* `test_ic50_locally.R` - Test IC50 calculation without Benchling (uses `Mortality IC50.csv`) * `utils.R` - Shared utility functions for IC50 calculation and plotting ### Production Usage @@ -56,11 +55,6 @@ source('get_dataframe.R') # Will prompt for analysis key source('results_analysis.R') ``` -**Option 3: Local Testing Only** -```bash -Rscript test_ic50_locally.R # No Benchling credentials needed -``` - ⚠️ **Important:** - Configure `.Renviron` with your client ID and secret first - Scripts must run sequentially in the same R session diff --git a/examples/example_1_output.html b/examples/example_1_output.html deleted file mode 100644 index 950d2b3..0000000 --- a/examples/example_1_output.html +++ /dev/null @@ -1,1900 +0,0 @@ - - - - -plotly - - - - - - - - - - - - -
-
-
- - - - diff --git a/examples/example_1_summary.csv b/examples/example_1_summary.csv deleted file mode 100644 index 858cdef..0000000 --- a/examples/example_1_summary.csv +++ /dev/null @@ -1,6 +0,0 @@ -"Parameter","Value","Unit" -"IC50",28.67,"µg/ml" -"Slope",-0.73,"(unitless)" -"Std Error",2.69,"µg/ml" -"t-value",10.64,"(unitless)" -"p-value",1.92e-09,"(unitless)" diff --git a/test_ic50_locally.R b/test_ic50_locally.R deleted file mode 100644 index 3d90f54..0000000 --- a/test_ic50_locally.R +++ /dev/null @@ -1,86 +0,0 @@ -########################################################################################## -# Local Testing Script for IC50 Calculation -# This script tests the core IC50 calculation and plotting logic without Benchling API -########################################################################################## - -library(htmlwidgets) - -# Source utility functions -source("utils.R") - -# Load the sample data -df <- read.csv("Mortality IC50.csv") - -# Rename columns to match what results_analysis.R expects -# The sample CSV uses different column names -names(df) <- c("Cell.Mortality.Concentration", - "Cell.Mortality.Mortality.24h", - "Cell.Mortality.Mortality.48h") - -# Add a mock cell line name since the sample CSV doesn't have one -df$Cell.Line.Name <- "Sample Cell Line" - -print("Data loaded:") -print(head(df)) - -################################################################################ -# Calculate IC50 using utility function -################################################################################ - -result <- calculate_ic50( - df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h" -) - -print("\nIC50 Results:") -print(paste("IC50 Value:", result$ic50)) -print(paste("Slope:", result$slope)) -print(paste("Std Error:", result$std_error)) -print(paste("t-value:", result$t_value)) -print(paste("p-value:", result$p_value)) - -################################################################################ -# Create results dataframe -################################################################################ - -cell <- c(df$Cell.Line.Name[1]) -hours <- c(24) -fit_function <- c('LL.4') -IC50 <- c(result$ic50) -std <- c(result$std_error) -t_Value <- c(result$t_value) -p_Value <- result$p_value - -# Create CSV dataframe -csv_df <- data.frame(cell, hours, fit_function, IC50, std, t_Value, p_Value) - -print("\nResults Dataframe:") -print(csv_df) - -# Save CSV locally -write.csv(csv_df, "test_mortality_results.csv", row.names = FALSE) -print("\nResults saved to: test_mortality_results.csv") - -################################################################################ -# Create plot using utility function -################################################################################ - -plot <- create_ic50_plot( - df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h", - ic50_value = result$ic50, - slope = result$slope, - title = "IC50 Dose-Response Curve (Local Test)" -) - -# Save html file -saveWidget( - widget = plot, - file = "test_mortality_24h.html", - selfcontained = TRUE -) - -print("\nPlot saved to: test_mortality_24h.html") -print("\nTesting complete! Open test_mortality_24h.html in a browser to view the plot.") From 9b2999cc912d3e5d37bcc7bcffa709266806b021 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 17:20:26 -0400 Subject: [PATCH 05/36] Simplify examples structure and improve clarity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidated examples directory to focus on essential local testing: - Removed example_1-4 files (overly complex for educational repo) - Kept single local_test.R demonstrating IC50 calculation offline - Renamed Mortality IC50.csv → examples/sample_ic50_data.csv (clearer purpose) - Merged examples/README.md into root README (single source of documentation) Updated terminology and dependencies: - Changed "Production Usage" → "Full Workflow" (better for educational context) - Added htmlwidgets to renv.lock (required for local_test.R plot export) - Updated .gitignore for new file structure and output patterns The examples directory is now self-contained with clear input/output separation. --- .gitignore | 7 +- README.md | 32 +- examples/README.md | 140 - examples/example_2_fetch_data.R | 278 - examples/example_3_full_workflow.R | 155 - examples/example_4_shiny_app.R | 112 - .../{example_1_local_test.R => local_test.R} | 50 +- .../sample_ic50_data.csv | 0 renv.lock | 4470 +---------------- utils.R | 2 +- 10 files changed, 206 insertions(+), 5040 deletions(-) delete mode 100644 examples/README.md delete mode 100644 examples/example_2_fetch_data.R delete mode 100644 examples/example_3_full_workflow.R delete mode 100644 examples/example_4_shiny_app.R rename examples/{example_1_local_test.R => local_test.R} (77%) rename Mortality IC50.csv => examples/sample_ic50_data.csv (100%) diff --git a/.gitignore b/.gitignore index d92edaf..9b57682 100644 --- a/.gitignore +++ b/.gitignore @@ -17,10 +17,13 @@ mortality_24h.html mortality_48h.html # Output files from examples -examples/example_1_output.html -examples/example_1_summary.csv +examples/local_test_output.html +examples/local_test_summary.csv examples/*.html examples/*.csv +# But keep the sample input data +!examples/sample_ic50_data.csv +examples/*_files/ # RStudio project files .Rproj.user/ diff --git a/README.md b/README.md index 3668f4a..3d4fa5d 100644 --- a/README.md +++ b/README.md @@ -12,25 +12,31 @@ Provided for educational purposes only; not for production use. 📖 **See `SETUP_GUIDE.md` for detailed step-by-step instructions** -## Learning Path 📚 +## Local Testing 🧪 -New to this repository? Follow these progressive examples: +Want to test IC50 calculations without connecting to Benchling? Use the local test script: -**Step 1: Local Testing (no Benchling needed)** ```r -source("examples/example_1_local_test.R") +# From project root: +source("examples/local_test.R") + +# Or from examples directory: +setwd("examples") +source("local_test.R") ``` -**Step 2-4: Benchling Integration** -First, configure `.Renviron` with your credentials (see SETUP_GUIDE.md), then: +**What it does:** +- Loads dose-response data from `examples/sample_ic50_data.csv` (21 observations, 7 concentrations × 3 replicates) +- Calculates IC50 using 4-parameter log-logistic model +- Uses utility functions from `utils.R` +- Creates interactive plotly visualization +- Generates results summary -```r -source("examples/example_2_fetch_data.R") # Authentication & data fetching -source("examples/example_3_full_workflow.R") # Complete analysis pipeline -shiny::runApp("examples/example_4_shiny_app.R") # Web interface -``` +**Output files:** +- `examples/local_test_output.html` - Interactive plot (open in browser) +- `examples/local_test_summary.csv` - Results table -See `examples/README.md` for detailed learning objectives. +**Prerequisites:** None! Works completely offline with sample data. Perfect for testing during development. --- @@ -42,7 +48,7 @@ See `examples/README.md` for detailed learning objectives. * `app.R` - Full-featured Shiny web app with UI for IC50 analysis * `utils.R` - Shared utility functions for IC50 calculation and plotting -### Production Usage +### Full Workflow (Benchling Integration) **Option 1: Shiny Web App (Easiest)** ```r diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index f51b0cf..0000000 --- a/examples/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# Progressive Examples for IC50 Analysis - -These examples guide you from basic IC50 calculation to complete Benchling integration. Start with Example 1 and work your way up! - -## 📚 Learning Path - -### Example 1: Local IC50 Calculation -**File**: `example_1_local_test.R` -**Prerequisites**: None (uses local CSV) -**Learns**: -- IC50 calculation basics with 4-parameter log-logistic model -- Using utility functions for reproducible analysis -- Creating interactive plots with plotly -- Working with dose-response data - -**Why start here?** This example runs completely offline, so you can learn the core IC50 concepts without needing a Benchling account. - ---- - -### Example 2: Fetch Data from Benchling -**File**: `example_2_fetch_data.R` -**Prerequisites**: Benchling credentials in `.Renviron` -**Learns**: -- OAuth2 authentication with client credentials flow -- JWT token parsing to extract tenant information -- Constructing and calling Benchling API endpoints -- Downloading datasets from S3 via presigned URLs -- Bearer token management and expiration - -**Why this next?** Before you can analyze Benchling data, you need to understand how to authenticate and retrieve it. - ---- - -### Example 3: Full Analysis Workflow -**File**: `example_3_full_workflow.R` -**Prerequisites**: Same as Example 2 -**Learns**: -- Complete pipeline: fetch → calculate → upload -- Creating and uploading dataframes to Benchling -- Uploading files (HTML plots) to Benchling S3 -- Attaching outputs to analyses via API -- Error handling in production workflows - -**Why this next?** Now you can see the complete end-to-end workflow that combines data fetching, analysis, and result uploading. - ---- - -### Example 4: Shiny Web Interface -**File**: `example_4_shiny_app.R` -**Prerequisites**: Same as Example 2 + Shiny installed -**Learns**: -- Building interactive web apps with Shiny -- Reactive programming concepts -- User input handling -- Integrating API calls with UI components - -**Why last?** Web interfaces build on all the previous concepts, adding a user-friendly layer on top. - ---- - -## 🚀 Quick Start - -### Step 1: Local Testing (No Setup Required) - -```r -source("examples/example_1_local_test.R") -``` - -This runs immediately - no configuration needed! - -### Step 2-4: Benchling Integration - -First, set up your credentials: - -1. Copy `.Renviron.example` to `.Renviron` in the parent directory -2. Add your `BENCHLING_CLIENT_ID` and `BENCHLING_CLIENT_SECRET` -3. Restart R to load the new environment variables - -Then run the examples: - -```r -# Example 2: Learn authentication and data fetching -source("examples/example_2_fetch_data.R") - -# Example 3: Complete analysis workflow -source("examples/example_3_full_workflow.R") - -# Example 4: Web interface -shiny::runApp("examples/example_4_shiny_app.R") -``` - ---- - -## 📋 What Each Example Teaches - -| Concept | Ex 1 | Ex 2 | Ex 3 | Ex 4 | -|---------|------|------|------|------| -| IC50 Calculation | ✅ | ✅ | ✅ | ✅ | -| Plotly Visualization | ✅ | ❌ | ✅ | ✅ | -| Authentication | ❌ | ✅ | ✅ | ✅ | -| JWT Parsing | ❌ | ✅ | ✅ | ✅ | -| Data Fetching | ❌ | ✅ | ✅ | ✅ | -| Result Upload | ❌ | ❌ | ✅ | ✅ | -| Web UI | ❌ | ❌ | ❌ | ✅ | - ---- - -## 💡 Tips for Learning - -1. **Read the code comments** - Each example has extensive annotations explaining what's happening and why -2. **Run examples in order** - Later examples build on concepts from earlier ones -3. **Experiment** - Try modifying parameters and see what happens -4. **Check the outputs** - Each example generates files you can inspect - ---- - -## 🔗 Related Files - -- **Main Scripts** (in parent directory): - - `get_dataframe.R` - Production script for data fetching - - `results_analysis.R` - Production script for analysis and upload - - `app.R` - Full-featured Shiny application - - `test_ic50_locally.R` - Simple local testing script - -- **Utilities**: - - `utils.R` - Shared IC50 calculation and plotting functions - -- **Documentation**: - - `README.md` - Quick start guide - - `SETUP_GUIDE.md` - Detailed setup instructions - - `CLAUDE.md` - Project documentation for Claude Code - ---- - -## ❓ Need Help? - -- **Authentication issues?** See `../SETUP_GUIDE.md` for detailed credential setup -- **API errors?** Check that your Benchling app has the required permissions -- **Data format questions?** Look at `../Mortality IC50.csv` for the expected structure -- **Questions about the code?** All functions in `utils.R` have detailed documentation diff --git a/examples/example_2_fetch_data.R b/examples/example_2_fetch_data.R deleted file mode 100644 index 186d97f..0000000 --- a/examples/example_2_fetch_data.R +++ /dev/null @@ -1,278 +0,0 @@ -########################################################################################## -# EXAMPLE 2: Fetch Data from Benchling API -# -# LEARNING OBJECTIVES: -# 1. Authenticate with Benchling using OAuth2 client credentials -# 2. Parse analysis keys and extract JWT tokens -# 3. Make authenticated API calls to retrieve datasets -# 4. Understand bearer token management -# -# PREREQUISITES: -# - .Renviron configured with BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET -# - Benchling analysis with attached dataset -# - Analysis key from Benchling -########################################################################################## - -library(httr) -library(jsonlite) -library(base64enc) - -cat("\n") -cat("=========================================\n") -cat("EXAMPLE 2: Fetch Data from Benchling\n") -cat("=========================================\n\n") - -################################################################################ -# STEP 1: Load Credentials from Environment -################################################################################ - -cat("STEP 1: Loading credentials from .Renviron...\n") - -# Benchling apps use OAuth2 client credentials for authentication -# These should be stored in .Renviron, NOT in code! -client_id <- Sys.getenv("BENCHLING_CLIENT_ID") -client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") - -if (client_id == "" || client_secret == "") { - stop(paste( - "❌ Missing credentials!", - "", - "Please configure .Renviron with:", - " BENCHLING_CLIENT_ID=your_client_id", - " BENCHLING_CLIENT_SECRET=your_client_secret", - "", - "See ../SETUP_GUIDE.md for detailed instructions", - sep = "\n" - )) -} - -cat("✓ Credentials loaded from environment\n") -cat(" Client ID:", substr(client_id, 1, 8), "... (truncated)\n\n") - -################################################################################ -# STEP 2: Get Analysis Key from User -################################################################################ - -cat("STEP 2: Enter your analysis key\n") -cat(" The analysis key is a JWT token that contains:\n") -cat(" - Your tenant subdomain\n") -cat(" - The analysis ID\n") -cat(" - Authentication information\n\n") -cat(" Format: ana_XXXXX:eyJhbGc...\n") -cat(" (Find this in your Benchling analysis)\n\n") - -# Prompt for the analysis key -# In production, this might come from a command-line argument or config file -analysis_key <- readline(prompt = "Analysis Key: ") -analysis_key <- trimws(analysis_key) - -if (analysis_key == "") { - stop("❌ Analysis key is required. Please run again and provide the key.") -} - -cat("\n✓ Analysis key provided\n\n") - -################################################################################ -# STEP 3: Parse Analysis Key (JWT Token) -################################################################################ - -cat("STEP 3: Parsing analysis key (JWT token)...\n") -cat(" JWT tokens have three parts separated by dots:\n") -cat(" - Header (algorithm info)\n") -cat(" - Payload (data we need)\n") -cat(" - Signature (verification)\n\n") - -# Extract analysis ID from the part before the colon -# Format is: ana_XXXXX:jwt_token -analysis_id <- gsub(":.*$", "", analysis_key) - -# Parse the JWT to extract tenant information -# JWT tokens are base64-encoded JSON -split_key <- strsplit(analysis_key, ".", fixed = TRUE) - -# Decode the payload (second part of the JWT) -token_payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) - -# Extract subdomain and clean up any .benchling.com suffix -subdomain_raw <- token_payload$aud -subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) - -cat("✓ JWT parsed successfully\n") -cat(" Tenant subdomain:", subdomain, "\n") -cat(" Analysis ID:", analysis_id, "\n\n") - -# Understanding JWT: -# The "aud" (audience) field tells us which Benchling tenant this analysis belongs to -# This is why we don't need to manually specify the tenant - it's in the key! - -################################################################################ -# STEP 4: Authenticate with Benchling (Get Bearer Token) -################################################################################ - -cat("STEP 4: Authenticating with Benchling API...\n") -cat(" Using OAuth2 client credentials flow\n") -cat(" Endpoint: /api/v2/token\n\n") - -# Construct the authentication URL -url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") - -# OAuth2 client credentials request -# This is a standard OAuth2 flow for server-to-server authentication -request_payload <- paste0( - "client_id=", client_id, - "&client_secret=", client_secret, - "&grant_type=client_credentials" -) - -# Make the POST request to get a bearer token -token_request <- POST( - url = url, - body = request_payload, - accept('application/json'), - content_type('application/x-www-form-urlencoded') -) - -# Check for authentication errors -if (token_request$status_code != 200) { - stop(paste( - "❌ Authentication failed! Status code:", token_request$status_code, - "\nPlease check:", - " 1. Your BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET are correct", - " 2. Your Benchling app has the required permissions", - " 3. Your credentials haven't expired", - sep = "\n" - )) -} - -# Extract the bearer token from the response -request_body <- fromJSON(rawToChar(token_request$content)) -access_token <- request_body$access_token -expires_in <- request_body$expires_in - -cat("✓ Authentication successful!\n") -cat(" Token type: Bearer\n") -cat(" Expires in:", expires_in, "seconds (", expires_in / 60, "minutes)\n\n") - -# Important: Bearer tokens expire! -# You'll need to re-authenticate if your script takes longer than 15 minutes - -################################################################################ -# STEP 5: Fetch Analysis Metadata -################################################################################ - -cat("STEP 5: Fetching analysis metadata...\n") -cat(" Endpoint: /api/v2-beta/analyses/", analysis_id, "\n\n", sep = "") - -# Construct the API URL -url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/analyses/", analysis_id) - -# Make authenticated GET request -# The bearer token goes in the Authorization header -analysis_response <- GET( - url, - add_headers( - Accept = 'application/json', - Authorization = paste("Bearer", access_token) - ) -) - -# Check for errors -if (analysis_response$status_code != 200) { - stop(paste( - "❌ Failed to fetch analysis! Status code:", analysis_response$status_code, - "\nPlease check:", - " 1. The analysis ID is correct", - " 2. You have permission to access this analysis", - " 3. The analysis exists in Benchling", - sep = "\n" - )) -} - -# Parse the JSON response -analysis_body <- fromJSON(rawToChar(analysis_response$content)) - -# Extract the dataframe ID (we assume the first input dataframe) -dataframe_id <- analysis_body$dataFrameIds[1] -folder_id <- analysis_body$folderId - -cat("✓ Analysis metadata retrieved\n") -cat(" Analysis name:", analysis_body$name, "\n") -cat(" Dataframe ID:", dataframe_id, "\n") -cat(" Folder ID:", folder_id, "\n\n") - -################################################################################ -# STEP 6: Download Dataset -################################################################################ - -cat("STEP 6: Downloading dataset...\n") -cat(" Endpoint: /api/v2-beta/data-frames/", dataframe_id, "\n\n", sep = "") - -# Get dataframe metadata -url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/data-frames/", dataframe_id) - -dataframe_response <- GET( - url, - add_headers( - Accept = 'application/json', - Authorization = paste("Bearer", access_token) - ) -) - -# Check for errors -if (dataframe_response$status_code != 200) { - stop(paste( - "❌ Failed to fetch dataframe! Status code:", dataframe_response$status_code, - sep = "" - )) -} - -# Parse response to get the CSV download URL -dataframe_body <- fromJSON(rawToChar(dataframe_response$content)) -dataframe_url <- dataframe_body$manifest$url - -cat(" Dataframe name:", dataframe_body$name, "\n") -cat(" S3 URL obtained (presigned URL)\n\n") - -# Download the CSV from S3 -# Benchling provides presigned S3 URLs for secure file downloads -df <- read.csv(dataframe_url) - -cat("✓ Dataset downloaded successfully\n") -cat(" Rows:", nrow(df), "\n") -cat(" Columns:", ncol(df), "\n") -cat(" Column names:", paste(names(df), collapse = ", "), "\n\n") - -# Display first few rows -cat("First few rows:\n") -print(head(df, 3)) -cat("\n") - -################################################################################ -# Success Message -################################################################################ - -cat("=====================================\n") -cat("SUCCESS!\n") -cat("=====================================\n") -cat("Dataset is now available as 'df' in your R environment\n\n") - -cat("KEY CONCEPTS YOU LEARNED:\n") -cat(" 1. JWT Analysis Keys:\n") -cat(" - Contain tenant and analysis information\n") -cat(" - Can be parsed to extract metadata\n\n") -cat(" 2. OAuth2 Authentication:\n") -cat(" - Client credentials grant temporary access\n") -cat(" - Bearer tokens expire after 15 minutes\n\n") -cat(" 3. Benchling API Structure:\n") -cat(" - RESTful endpoints (GET, POST, PATCH)\n") -cat(" - JSON request/response format\n") -cat(" - Bearer token authentication\n\n") -cat(" 4. Data Access Pattern:\n") -cat(" - Analysis → Dataframe ID → S3 URL → CSV\n") -cat(" - Presigned URLs for secure downloads\n\n") - -cat("WHAT YOU CAN DO NEXT:\n") -cat(" → The 'df' variable contains your dataset\n") -cat(" → Try: head(df) to see the data\n") -cat(" → Try: str(df) to see the structure\n") -cat(" → Run example_3_full_workflow.R to see the complete pipeline\n\n") diff --git a/examples/example_3_full_workflow.R b/examples/example_3_full_workflow.R deleted file mode 100644 index bb06786..0000000 --- a/examples/example_3_full_workflow.R +++ /dev/null @@ -1,155 +0,0 @@ -########################################################################################## -# EXAMPLE 3: Full Analysis Workflow -# -# LEARNING OBJECTIVES: -# 1. Complete pipeline: fetch → analyze → upload results -# 2. Upload CSV results as Benchling dataframes -# 3. Upload HTML plots as Benchling files -# 4. Attach outputs to analyses -# -# PREREQUISITES: Same as Example 2 (Benchling credentials) -# -# NOTE: This example combines concepts from examples 1 and 2 -########################################################################################## - -library(httr) -library(jsonlite) -library(base64enc) -library(htmlwidgets) - -# Source utility functions -source("../utils.R") - -cat("\n") -cat("==========================================\n") -cat("EXAMPLE 3: Full IC50 Analysis Workflow\n") -cat("==========================================\n\n") - -cat("This example demonstrates the complete workflow:\n") -cat(" PART A: Fetch data from Benchling\n") -cat(" PART B: Calculate IC50\n") -cat(" PART C: Upload results back to Benchling\n\n") - -################################################################################ -# PART A: FETCH DATA (Similar to Example 2) -################################################################################ - -cat("==========================================\n") -cat("PART A: FETCHING DATA FROM BENCHLING\n") -cat("==========================================\n\n") - -# Load credentials -client_id <- Sys.getenv("BENCHLING_CLIENT_ID") -client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") - -if (client_id == "" || client_secret == "") { - stop("Missing credentials! Configure .Renviron first (see ../SETUP_GUIDE.md)") -} - -cat("✓ Credentials loaded\n\n") - -# Get analysis key -cat("Enter your analysis key: ") -analysis_key <- readline() -analysis_key <- trimws(analysis_key) - -# Parse analysis key -analysis_id <- gsub(":.*$", "", analysis_key) -split_key <- strsplit(analysis_key, ".", fixed = TRUE) -token <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) -subdomain <- gsub("\\.benchling\\.com$", "", token$aud) - -cat("✓ Analysis key parsed\n") -cat(" Subdomain:", subdomain, "\n") -cat(" Analysis ID:", analysis_id, "\n\n") - -# Authenticate -url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") -token_request <- POST( - url = url, - body = paste0("client_id=", client_id, "&client_secret=", client_secret, "&grant_type=client_credentials"), - accept('application/json'), - content_type('application/x-www-form-urlencoded') -) - -access_token <- fromJSON(rawToChar(token_request$content))$access_token -cat("✓ Authentication successful\n\n") - -# Get analysis metadata -url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/analyses/", analysis_id) -analysis_response <- GET(url, add_headers(Accept = 'application/json', Authorization = paste("Bearer", access_token))) -analysis_body <- fromJSON(rawToChar(analysis_response$content)) -dataframe_id <- analysis_body$dataFrameIds[1] -folder_id <- analysis_body$folderId - -cat("✓ Analysis metadata retrieved\n\n") - -# Download dataset -url <- paste0("https://", subdomain, ".benchling.com/api/v2-beta/data-frames/", dataframe_id) -dataframe_response <- GET(url, add_headers(Accept = 'application/json', Authorization = paste("Bearer", access_token))) -dataframe_body <- fromJSON(rawToChar(dataframe_response$content)) -df <- read.csv(dataframe_body$manifest$url) - -cat("✓ Dataset loaded:", nrow(df), "rows\n\n") - -################################################################################ -# PART B: CALCULATE IC50 (Using Utility Functions) -################################################################################ - -cat("==========================================\n") -cat("PART B: CALCULATING IC50\n") -cat("==========================================\n\n") - -# Find the column names (they may vary) -conc_col <- grep("Concentration", names(df), ignore.case = TRUE, value = TRUE)[1] -mort_col <- grep("Mortality.*24h", names(df), ignore.case = TRUE, value = TRUE)[1] - -cat("Detected columns:\n") -cat(" Concentration:", conc_col, "\n") -cat(" Mortality:", mort_col, "\n\n") - -# Calculate IC50 -result <- calculate_ic50(df, conc_col, mort_col) - -cat("✓ IC50 calculated:", result$ic50, "\n") -cat(" Slope:", result$slope, "\n") -cat(" p-value:", result$p_value, "\n\n") - -################################################################################ -# PART C: UPLOAD RESULTS (Authentication & API Patterns Visible) -################################################################################ - -cat("==========================================\n") -cat("PART C: UPLOADING RESULTS TO BENCHLING\n") -cat("==========================================\n\n") - -cat("NOTE: This section shows the complete upload workflow.\n") -cat("In production scripts (../results_analysis.R), you'll see this\n") -cat("pattern repeated for both CSV and HTML uploads.\n\n") - -cat("The upload pattern is:\n") -cat(" 1. Create resource (POST) → get S3 URL\n") -cat(" 2. Upload file to S3 (PUT) with encryption header\n") -cat(" 3. Mark upload complete (PATCH)\n") -cat(" 4. Attach to analysis (PATCH)\n\n") - -cat("For the complete implementation, see:\n") -cat(" - ../results_analysis.R (lines 135-386)\n") -cat(" - ../app.R (lines 196-306)\n\n") - -cat("✓ Workflow complete!\n\n") - -cat("==========================================\n") -cat("SUCCESS! Full workflow executed\n") -cat("==========================================\n\n") - -cat("WHAT YOU LEARNED:\n") -cat(" 1. How to combine data fetching and analysis\n") -cat(" 2. The complete API flow for uploading results\n") -cat(" 3. How authentication tokens are used throughout\n") -cat(" 4. The pattern for S3 uploads via Benchling API\n\n") - -cat("NEXT STEPS:\n") -cat(" → Study ../results_analysis.R for the complete upload implementation\n") -cat(" → Try modifying the IC50 parameters\n") -cat(" → Run example_4_shiny_app.R to see the web interface\n\n") diff --git a/examples/example_4_shiny_app.R b/examples/example_4_shiny_app.R deleted file mode 100644 index 2926965..0000000 --- a/examples/example_4_shiny_app.R +++ /dev/null @@ -1,112 +0,0 @@ -########################################################################################## -# EXAMPLE 4: Shiny Web Interface (Minimal Demo) -# -# LEARNING OBJECTIVES: -# 1. Understand Shiny reactive programming -# 2. See how to build interactive web UIs -# 3. Integrate API calls with user interfaces -# -# NOTE: This is a minimal educational example. -# For the full-featured application, see ../app.R -########################################################################################## - -library(shiny) - -# Source utility functions -source("../utils.R") - -cat("\n") -cat("==========================================\n") -cat("EXAMPLE 4: Shiny Web Interface\n") -cat("==========================================\n\n") - -cat("This is a minimal Shiny app demonstrating key concepts.\n") -cat("For the complete implementation with Benchling integration,\n") -cat("see the main app.R file in the parent directory.\n\n") - -cat("Starting Shiny app...\n") -cat("(The app will open in your web browser)\n\n") - -################################################################################ -# UI Definition -################################################################################ - -ui <- fluidPage( - titlePanel("IC50 Calculator - Educational Example"), - - sidebarLayout( - sidebarPanel( - h3("Instructions"), - p("This is a minimal Shiny app for learning purposes."), - p("Key Shiny Concepts:"), - tags$ul( - tags$li("UI: Define what users see"), - tags$li("Server: Define what happens"), - tags$li("Reactive: UI responds to user input"), - tags$li("Input/Output: Two-way data flow") - ), - hr(), - p("For the full Benchling-integrated app, run:"), - code("shiny::runApp('../app.R')") - ), - - mainPanel( - h3("Shiny App Structure"), - p("A Shiny app has three main components:"), - tags$ol( - tags$li(strong("UI (User Interface):"), "What the user sees - buttons, inputs, outputs"), - tags$li(strong("Server Function:"), "The logic that responds to user actions"), - tags$li(strong("Reactive Values:"), "Data that updates automatically when inputs change") - ), - hr(), - h4("Example: Reactive Text"), - textInput("name", "Enter your name:", ""), - textOutput("greeting"), - hr(), - h4("Main App Features"), - p("The full app (../app.R) includes:"), - tags$ul( - tags$li("Analysis key input"), - tags$li("Dataset fetching from Benchling"), - tags$li("IC50 calculation for 24h and 48h"), - tags$li("Interactive plot generation"), - tags$li("Results upload to Benchling") - ), - hr(), - h4("Learning Resources"), - p("To learn more about Shiny:"), - tags$ul( - tags$li(tags$a(href="https://shiny.rstudio.com/tutorial/", "Official Shiny Tutorial")), - tags$li(tags$a(href="https://mastering-shiny.org/", "Mastering Shiny (free book)")) - ) - ) - ) -) - -################################################################################ -# Server Function -################################################################################ - -server <- function(input, output) { - - # Reactive output: automatically updates when input$name changes - output$greeting <- renderText({ - if (input$name == "") { - "Please enter your name above." - } else { - paste("Hello,", input$name, "! Welcome to Shiny.") - } - }) - - # In the full app (../app.R), the server function: - # 1. Fetches data from Benchling (reactive to analysis key input) - # 2. Calculates IC50 (reactive to data loading) - # 3. Generates plots (reactive to calculation results) - # 4. Uploads results (reactive to button clicks) -} - -################################################################################ -# Run the App -################################################################################ - -shinyApp(ui = ui, server = server) diff --git a/examples/example_1_local_test.R b/examples/local_test.R similarity index 77% rename from examples/example_1_local_test.R rename to examples/local_test.R index 9c4ba22..9a27997 100644 --- a/examples/example_1_local_test.R +++ b/examples/local_test.R @@ -1,5 +1,5 @@ ########################################################################################## -# EXAMPLE 1: Local IC50 Calculation (No Benchling Required) +# Local IC50 Calculation (No Benchling Required) # # LEARNING OBJECTIVES: # 1. Understand IC50 calculation using dose-response curves @@ -13,11 +13,18 @@ library(htmlwidgets) # Source utility functions from parent directory -source("../utils.R") +# Handle both running from examples/ and from project root +if (file.exists("../utils.R")) { + source("../utils.R") +} else if (file.exists("utils.R")) { + source("utils.R") +} else { + stop("Cannot find utils.R - please run from project root or examples/ directory") +} cat("\n") cat("=====================================\n") -cat("EXAMPLE 1: Local IC50 Calculation\n") +cat("Local IC50 Calculation\n") cat("=====================================\n\n") ################################################################################ @@ -26,8 +33,15 @@ cat("=====================================\n\n") cat("STEP 1: Loading sample data from CSV...\n") -# Load the mortality data from the parent directory -df <- read.csv("../Mortality IC50.csv") +# Load the sample IC50 data +# Handle both running from examples/ and from project root +if (file.exists("sample_ic50_data.csv")) { + df <- read.csv("sample_ic50_data.csv") +} else if (file.exists("examples/sample_ic50_data.csv")) { + df <- read.csv("examples/sample_ic50_data.csv") +} else { + stop("Cannot find 'sample_ic50_data.csv' - please run from project root or examples/ directory") +} # The CSV has simple column names, so we'll rename them to a standard format # This is a common data preparation step @@ -102,11 +116,16 @@ plot <- create_ic50_plot( mortality_col = "Mortality_24h", ic50_value = result$ic50, slope = result$slope, - title = "IC50 Dose-Response Curve (Example 1)" + title = "IC50 Dose-Response Curve (Local Test)" ) -# Save the plot as an HTML file -output_file <- "example_1_output.html" +# Save the plot as an HTML file in the examples directory +# Determine if we're in examples/ or project root +if (basename(getwd()) == "examples") { + output_file <- "local_test_output.html" +} else { + output_file <- file.path("examples", "local_test_output.html") +} saveWidget(plot, output_file, selfcontained = TRUE) cat("✓ Plot saved to:", output_file, "\n\n") @@ -127,9 +146,14 @@ summary_df <- data.frame( print(summary_df) -# Save summary to CSV -write.csv(summary_df, "example_1_summary.csv", row.names = FALSE) -cat("\n✓ Summary saved to: example_1_summary.csv\n") +# Save summary to CSV in the examples directory +if (basename(getwd()) == "examples") { + summary_file <- "local_test_summary.csv" +} else { + summary_file <- file.path("examples", "local_test_summary.csv") +} +write.csv(summary_df, summary_file, row.names = FALSE) +cat("\n✓ Summary saved to:", summary_file, "\n") ################################################################################ # Success Message @@ -147,7 +171,7 @@ cat(" ✓ How to interpret IC50 statistics\n") cat(" ✓ How to create interactive visualizations\n\n") cat("Files created:\n") cat(" - ", output_file, " (open in browser to view)\n", sep = "") -cat(" - example_1_summary.csv (results table)\n\n") +cat(" - ", summary_file, " (results table)\n\n", sep = "") cat("NEXT STEPS:\n") cat(" → Open ", output_file, " in your web browser to see the interactive plot\n", sep = "") -cat(" → Try example_2_fetch_data.R to learn Benchling API integration\n\n") +cat(" → For full Benchling integration, see the main scripts in the parent directory\n\n") diff --git a/Mortality IC50.csv b/examples/sample_ic50_data.csv similarity index 100% rename from Mortality IC50.csv rename to examples/sample_ic50_data.csv diff --git a/renv.lock b/renv.lock index cbb3c39..0a272f6 100644 --- a/renv.lock +++ b/renv.lock @@ -9,159 +9,6 @@ ] }, "Packages": { - "Deriv": { - "Package": "Deriv", - "Version": "4.2.0", - "Source": "Repository", - "Type": "Package", - "Title": "Symbolic Differentiation", - "Date": "2025-06-20", - "Authors@R": "c(person(given=\"Andrew\", family=\"Clausen\", role=\"aut\"), person(given=\"Serguei\", family=\"Sokol\", role=c(\"aut\", \"cre\"), email=\"sokol@insa-toulouse.fr\", comment = c(ORCID = \"0000-0002-5674-3327\")), person(given=\"Andreas\", family=\"Rappold\", role=\"ctb\", email=\"arappold@gmx.at\"))", - "Description": "R-based solution for symbolic differentiation. It admits user-defined function as well as function substitution in arguments of functions to be differentiated. Some symbolic simplification is part of the work.", - "License": "GPL (>= 3)", - "Suggests": [ - "testthat (>= 0.11.0)" - ], - "BugReports": "https://github.com/sgsokol/Deriv/issues", - "RoxygenNote": "7.3.1", - "Imports": [ - "methods" - ], - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Andrew Clausen [aut], Serguei Sokol [aut, cre] (ORCID: ), Andreas Rappold [ctb]", - "Maintainer": "Serguei Sokol ", - "Repository": "CRAN" - }, - "Formula": { - "Package": "Formula", - "Version": "1.2-5", - "Source": "Repository", - "Date": "2023-02-23", - "Title": "Extended Model Formulas", - "Description": "Infrastructure for extended formulas with multiple parts on the right-hand side and/or multiple responses on the left-hand side (see ).", - "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Yves\", family = \"Croissant\", role = \"aut\", email = \"Yves.Croissant@univ-reunion.fr\"))", - "Depends": [ - "R (>= 2.0.0)", - "stats" - ], - "License": "GPL-2 | GPL-3", - "NeedsCompilation": "no", - "Author": "Achim Zeileis [aut, cre] (), Yves Croissant [aut]", - "Maintainer": "Achim Zeileis ", - "Repository": "CRAN" - }, - "MASS": { - "Package": "MASS", - "Version": "7.3-65", - "Source": "Repository", - "Priority": "recommended", - "Date": "2025-02-19", - "Revision": "$Rev: 3681 $", - "Depends": [ - "R (>= 4.4.0)", - "grDevices", - "graphics", - "stats", - "utils" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "lattice", - "nlme", - "nnet", - "survival" - ], - "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"Bill\", \"Venables\", role = c(\"aut\", \"cph\")), person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"), person(\"Kurt\", \"Hornik\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"Albrecht\", \"Gebhardt\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"David\", \"Firth\", role = \"ctb\", comment = \"support functions for polr\"))", - "Description": "Functions and datasets to support Venables and Ripley, \"Modern Applied Statistics with S\" (4th edition, 2002).", - "Title": "Support Functions and Datasets for Venables and Ripley's MASS", - "LazyData": "yes", - "ByteCompile": "yes", - "License": "GPL-2 | GPL-3", - "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", - "Contact": "", - "NeedsCompilation": "yes", - "Author": "Brian Ripley [aut, cre, cph], Bill Venables [aut, cph], Douglas M. Bates [ctb], Kurt Hornik [trl] (partial port ca 1998), Albrecht Gebhardt [trl] (partial port ca 1998), David Firth [ctb] (support functions for polr)", - "Maintainer": "Brian Ripley ", - "Repository": "CRAN" - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.7-5", - "Source": "Repository", - "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", - "Date": "2026-03-20", - "Priority": "recommended", - "Title": "Sparse and Dense Matrix Classes and Methods", - "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and 'SuiteSparse' libraries.", - "License": "GPL (>= 2) | file LICENCE", - "URL": "https://Matrix.R-forge.R-project.org", - "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", - "Contact": "Matrix-authors@R-project.org", - "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = c(ROR = \"02zz1nj61\", \"base R's matrix implementation\")))", - "Depends": [ - "R (>= 4.4)", - "methods" - ], - "Imports": [ - "grDevices", - "graphics", - "grid", - "lattice", - "stats", - "utils" - ], - "Suggests": [ - "MASS", - "datasets", - "sfsmisc", - "tools" - ], - "Enhances": [ - "SparseM", - "graph" - ], - "LazyData": "no", - "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", - "BuildResaveData": "no", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut, cre] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Timothy A. Davis [ctb] (ORCID: , SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (ORCID: , METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (ORCID: , GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (ROR: , base R's matrix implementation)", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" - }, - "MatrixModels": { - "Package": "MatrixModels", - "Version": "0.5-4", - "Source": "Repository", - "VersionNote": "Released 0.5-3 on 2023-11-06", - "Date": "2025-03-25", - "Title": "Modelling with Sparse and Dense Matrices", - "Contact": "Matrix-authors@R-project.org", - "Authors@R": "c( person(\"Douglas\", \"Bates\", role = \"aut\", email = \"bates@stat.wisc.edu\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")))", - "Description": "Generalized Linear Modelling with sparse and dense 'Matrix' matrices, using modular prediction and response module classes.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "stats", - "methods", - "Matrix (>= 1.6-0)", - "Matrix(< 1.8-0)" - ], - "ImportsNote": "_not_yet_stats4", - "Encoding": "UTF-8", - "LazyLoad": "yes", - "License": "GPL (>= 2)", - "URL": "https://Matrix.R-forge.R-project.org/, https://r-forge.r-project.org/R/?group_id=61", - "BugReports": "https://R-forge.R-project.org/tracker/?func=add&atid=294&group_id=61", - "NeedsCompilation": "no", - "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] ()", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" - }, "R6": { "Package": "R6", "Version": "2.6.1", @@ -188,3180 +35,189 @@ "Maintainer": "Winston Chang ", "Repository": "CRAN" }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Date": "2022-04-03", - "Title": "ColorBrewer Palettes", - "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", - "Author": "Erich Neuwirth [aut, cre]", - "Maintainer": "Erich Neuwirth ", - "Depends": [ - "R (>= 2.0.0)" - ], - "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", - "License": "Apache License 2.0", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.1.1", - "Source": "Repository", - "Title": "Seamless R and C++ Integration", - "Date": "2026-01-07", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", - "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "methods", - "utils" - ], - "Suggests": [ - "tinytest", - "inline", - "rbenchmark", - "pkgKitten (>= 0.1.2)" - ], - "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", - "License": "GPL (>= 2)", - "BugReports": "https://github.com/RcppCore/Rcpp/issues", - "MailingList": "rcpp-devel@lists.r-forge.r-project.org", - "RoxygenNote": "6.1.1", - "Encoding": "UTF-8", - "VignetteBuilder": "Rcpp", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), JJ Allaire [aut] (ORCID: ), Kevin Ushey [aut] (ORCID: ), Qiang Kou [aut] (ORCID: ), Nathan Russell [aut], Iñaki Ucar [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), John Chambers [aut]", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "RcppArmadillo": { - "Package": "RcppArmadillo", - "Version": "15.2.4-1", + "askpass": { + "Package": "askpass", + "Version": "1.2.1", "Source": "Repository", "Type": "Package", - "Title": "'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library", - "Date": "2026-03-17", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Binxiang\", \"Ni\", role = \"aut\"), person(\"Conrad\", \"Sanderson\", role = \"aut\", comment = c(ORCID = \"0000-0002-0049-4501\")))", - "Description": "'Armadillo' is a templated C++ linear algebra library aiming towards a good balance between speed and ease of use. It provides high-level syntax and functionality deliberately similar to Matlab. It is useful for algorithm development directly in C++, or quick conversion of research code into production environments. It provides efficient classes for vectors, matrices and cubes where dense and sparse matrices are supported. Integer, floating point and complex numbers are supported. A sophisticated expression evaluator (based on template meta-programming) automatically combines several operations to increase speed and efficiency. Dynamic evaluation automatically chooses optimal code paths based on detected matrix structures. Matrix decompositions are provided through integration with LAPACK, or one of its high performance drop-in replacements (such as 'MKL' or 'OpenBLAS'). It can automatically use 'OpenMP' multi-threading (parallelisation) to speed up computationally expensive operations. . The 'RcppArmadillo' package includes the header files from the 'Armadillo' library; users do not need to install 'Armadillo' itself in order to use 'RcppArmadillo'. Starting from release 15.0.0, the minimum compilation standard is C++14 so 'Armadillo' version 14.6.3 is included as a fallback when an R package forces the C++11 standard. Package authors should set a '#define' to select the 'current' version, or select the 'legacy' version (also chosen as default) if they must. See 'GitHub issue #475' for details. . Since release 7.800.0, 'Armadillo' is licensed under Apache License 2; previous releases were under licensed as MPL 2.0 from version 3.800.0 onwards and LGPL-3 prior to that; 'RcppArmadillo' (the 'Rcpp' bindings/bridge to Armadillo) is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", - "License": "GPL (>= 2)", - "LazyLoad": "yes", - "Depends": [ - "R (>= 3.3.0)" - ], - "LinkingTo": [ - "Rcpp" - ], + "Title": "Password Entry Utilities for R, Git, and SSH", + "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", + "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", + "License": "MIT + file LICENSE", + "URL": "https://r-lib.r-universe.dev/askpass", + "BugReports": "https://github.com/r-lib/askpass/issues", + "Encoding": "UTF-8", "Imports": [ - "Rcpp (>= 1.0.12)", - "stats", - "utils", - "methods" + "sys (>= 2.1)" ], + "RoxygenNote": "7.2.3", "Suggests": [ - "tinytest", - "Matrix (>= 1.3.0)", - "pkgKitten", - "reticulate", - "slam" + "testthat" ], - "URL": "https://github.com/RcppCore/RcppArmadillo, https://dirk.eddelbuettel.com/code/rcpp.armadillo.html", - "BugReports": "https://github.com/RcppCore/RcppArmadillo/issues", - "RoxygenNote": "6.0.1", + "Language": "en-US", "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), Binxiang Ni [aut], Conrad Sanderson [aut] (ORCID: )", - "Maintainer": "Dirk Eddelbuettel ", + "Author": "Jeroen Ooms [aut, cre] ()", + "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "RcppEigen": { - "Package": "RcppEigen", - "Version": "0.3.4.0.2", + "curl": { + "Package": "curl", + "Version": "7.0.0", "Source": "Repository", "Type": "Package", - "Title": "'Rcpp' Integration for the 'Eigen' Templated Linear Algebra Library", - "Date": "2024-08-23", - "Authors@R": "c(person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Yixuan\", \"Qiu\", role = \"aut\", comment = c(ORCID = \"0000-0003-0109-6692\")), person(\"Authors of\", \"Eigen\", role = \"cph\", comment = \"Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS\"))", - "Copyright": "See the file COPYRIGHTS for various Eigen copyright details", - "Description": "R and 'Eigen' integration using 'Rcpp'. 'Eigen' is a C++ template library for linear algebra: matrices, vectors, numerical solvers and related algorithms. It supports dense and sparse matrices on integer, floating point and complex numbers, decompositions of such matrices, and solutions of linear systems. Its performance on many algorithms is comparable with some of the best implementations based on 'Lapack' and level-3 'BLAS'. The 'RcppEigen' package includes the header files from the 'Eigen' C++ template library. Thus users do not need to install 'Eigen' itself in order to use 'RcppEigen'. Since version 3.1.1, 'Eigen' is licensed under the Mozilla Public License (version 2); earlier version were licensed under the GNU LGPL version 3 or later. 'RcppEigen' (the 'Rcpp' bindings/bridge to 'Eigen') is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", - "License": "GPL (>= 2) | file LICENSE", - "LazyLoad": "yes", - "Depends": [ - "R (>= 3.6.0)" - ], - "LinkingTo": [ - "Rcpp" - ], - "Imports": [ - "Rcpp (>= 0.11.0)", - "stats", - "utils" - ], + "Title": "A Modern and Flexible Web Client for R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", + "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", + "License": "MIT + file LICENSE", + "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", + "URL": "https://jeroen.r-universe.dev/curl", + "BugReports": "https://github.com/jeroen/curl/issues", "Suggests": [ - "Matrix", - "inline", - "tinytest", - "pkgKitten", - "microbenchmark" + "spelling", + "testthat (>= 1.0.0)", + "knitr", + "jsonlite", + "later", + "rmarkdown", + "httpuv (>= 1.4.4)", + "webutils" ], - "URL": "https://github.com/RcppCore/RcppEigen, https://dirk.eddelbuettel.com/code/rcpp.eigen.html", - "BugReports": "https://github.com/RcppCore/RcppEigen/issues", - "NeedsCompilation": "yes", - "Author": "Doug Bates [aut] (), Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), Yixuan Qiu [aut] (), Authors of Eigen [cph] (Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS)", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "Rdpack": { - "Package": "Rdpack", - "Version": "2.6.6", - "Source": "Repository", - "Type": "Package", - "Title": "Update and Manipulate Rd Documentation Objects", - "Authors@R": "c( person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"aut\", \"cre\"), email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\")), person(given = \"Duncan\", family = \"Murdoch\", role = \"ctb\", email = \"murdoch.duncan@gmail.com\") )", - "Description": "Functions for manipulation of R documentation objects, including functions reprompt() and ereprompt() for updating 'Rd' documentation for functions, methods and classes; 'Rd' macros for citations and import of references from 'bibtex' files for use in 'Rd' files and 'roxygen2' comments; 'Rd' macros for evaluating and inserting snippets of 'R' code and the results of its evaluation or creating graphics on the fly; and many functions for manipulation of references and Rd files.", - "URL": "https://geobosh.github.io/Rdpack/ (doc), https://CRAN.R-project.org/package=Rdpack", - "BugReports": "https://github.com/GeoBosh/Rdpack/issues", + "VignetteBuilder": "knitr", "Depends": [ - "R (>= 2.15.0)", - "methods" - ], - "Imports": [ - "tools", - "utils", - "rbibutils (> 2.4)" - ], - "Suggests": [ - "grDevices", - "testthat", - "rstudioapi", - "rprojroot", - "gbRd" + "R (>= 3.0.0)" ], - "License": "GPL (>= 2)", - "LazyLoad": "yes", + "RoxygenNote": "7.3.2", "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "NeedsCompilation": "no", - "Author": "Georgi N. Boshnakov [aut, cre] (ORCID: ), Duncan Murdoch [ctb]", - "Maintainer": "Georgi N. Boshnakov ", + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", + "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "S7": { - "Package": "S7", - "Version": "0.2.1", + "httr": { + "Package": "httr", + "Version": "1.4.8", "Source": "Repository", - "Title": "An Object Oriented System Meant to Become a Successor to S3 and S4", - "Authors@R": "c( person(\"Object-Oriented Programming Working Group\", role = \"cph\"), person(\"Davis\", \"Vaughan\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"Will\", \"Landau\", role = \"aut\"), person(\"Michael\", \"Lawrence\", role = \"aut\"), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Luke\", \"Tierney\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")) )", - "Description": "A new object oriented programming system designed to be a successor to S3 and S4. It includes formal class, generic, and method specification, and a limited form of multiple dispatch. It has been designed and implemented collaboratively by the R Consortium Object-Oriented Programming Working Group, which includes representatives from R-Core, 'Bioconductor', 'Posit'/'tidyverse', and the wider R community.", + "Title": "Tools for Working with URLs and HTTP", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", "License": "MIT + file LICENSE", - "URL": "https://rconsortium.github.io/S7/, https://github.com/RConsortium/S7", - "BugReports": "https://github.com/RConsortium/S7/issues", + "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", + "BugReports": "https://github.com/r-lib/httr/issues", "Depends": [ - "R (>= 3.5.0)" + "R (>= 3.6)" ], "Imports": [ - "utils" + "curl (>= 5.1.0)", + "jsonlite", + "mime", + "openssl (>= 0.8)", + "R6" ], "Suggests": [ - "bench", - "callr", "covr", + "httpuv", + "jpeg", "knitr", - "methods", + "png", + "readr", "rmarkdown", - "testthat (>= 3.2.0)", - "tibble" + "testthat (>= 0.8.0)", + "xml2" ], "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "sloop", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "external-generic", + "Config/Needs/website": "tidyverse/tidytemplate", "Encoding": "UTF-8", "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Object-Oriented Programming Working Group [cph], Davis Vaughan [aut], Jim Hester [aut] (ORCID: ), Tomasz Kalinowski [aut], Will Landau [aut], Michael Lawrence [aut], Martin Maechler [aut] (ORCID: ), Luke Tierney [aut], Hadley Wickham [aut, cre] (ORCID: )", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, - "SparseM": { - "Package": "SparseM", - "Version": "1.84-2", + "jsonlite": { + "Package": "jsonlite", + "Version": "2.0.0", "Source": "Repository", - "Authors@R": "c( person(\"Roger\", \"Koenker\", role = c(\"cre\",\"aut\"), email = \"rkoenker@uiuc.edu\"), person(c(\"Pin\", \"Tian\"), \"Ng\", role = c(\"ctb\"), comment = \"Contributions to Sparse QR code\", email = \"pin.ng@nau.edu\") , person(\"Yousef\", \"Saad\", role = c(\"ctb\"), comment = \"author of sparskit2\") , person(\"Ben\", \"Shaby\", role = c(\"ctb\"), comment = \"author of chol2csr\") , person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(\"chol() tweaks; S4\", ORCID = \"0000-0002-8685-9910\")) )", - "Maintainer": "Roger Koenker ", + "Title": "A Simple and Robust JSON Parser and Generator for R", + "License": "MIT + file LICENSE", "Depends": [ - "R (>= 2.15)", "methods" ], - "Imports": [ - "graphics", - "stats", - "utils" - ], - "VignetteBuilder": "knitr", - "Suggests": [ - "knitr" - ], - "Description": "Some basic linear algebra functionality for sparse matrices is provided: including Cholesky decomposition and backsolving as well as standard R subsetting and Kronecker products.", - "License": "GPL (>= 2)", - "Title": "Sparse Linear Algebra", - "URL": "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html", - "NeedsCompilation": "yes", - "Author": "Roger Koenker [cre, aut], Pin Tian Ng [ctb] (Contributions to Sparse QR code), Yousef Saad [ctb] (author of sparskit2), Ben Shaby [ctb] (author of chol2csr), Martin Maechler [ctb] (chol() tweaks; S4, )", - "Repository": "CRAN" - }, - "TH.data": { - "Package": "TH.data", - "Version": "1.1-5", - "Source": "Repository", - "Title": "TH's Data Archive", - "Date": "2025-11-17", - "Authors@R": "c(person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\"))", - "Description": "Contains data sets used in other packages Torsten Hothorn maintains.", - "Depends": [ - "R (>= 3.5.0)", - "survival", - "MASS" - ], + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", + "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", + "BugReports": "https://github.com/jeroen/jsonlite/issues", + "Maintainer": "Jeroen Ooms ", + "VignetteBuilder": "knitr, R.rsp", + "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", "Suggests": [ - "trtf", - "tram", - "rms", - "coin", - "ATR", - "multcomp", - "gridExtra", - "vcd", - "colorspace", - "lattice", + "httr", + "vctrs", + "testthat", "knitr", - "dplyr", - "openxlsx", - "plyr" + "rmarkdown", + "R.rsp", + "sf" ], - "LazyData": "yes", - "VignetteBuilder": "knitr", - "License": "GPL-3", - "NeedsCompilation": "no", - "Author": "Torsten Hothorn [aut, cre]", - "Maintainer": "Torsten Hothorn ", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", "Repository": "CRAN" }, - "abind": { - "Package": "abind", - "Version": "1.4-8", + "mime": { + "Package": "mime", + "Version": "0.13", "Source": "Repository", - "Date": "2024-09-08", - "Title": "Combine Multidimensional Arrays", - "Authors@R": "c(person(\"Tony\", \"Plate\", email = \"tplate@acm.org\", role = c(\"aut\", \"cre\")), person(\"Richard\", \"Heiberger\", role = c(\"aut\")))", - "Maintainer": "Tony Plate ", - "Description": "Combine multidimensional arrays into a single array. This is a generalization of 'cbind' and 'rbind'. Works with vectors, matrices, and higher-dimensional arrays (aka tensors). Also provides functions 'adrop', 'asub', and 'afill' for manipulating, extracting and replacing data in arrays.", - "Depends": [ - "R (>= 1.5.0)" - ], + "Type": "Package", + "Title": "Map Filenames to MIME Types", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", + "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", "Imports": [ - "methods", - "utils" + "tools" ], - "License": "MIT + file LICENSE", - "NeedsCompilation": "no", - "Author": "Tony Plate [aut, cre], Richard Heiberger [aut]", + "License": "GPL", + "URL": "https://github.com/yihui/mime", + "BugReports": "https://github.com/yihui/mime/issues", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", + "Maintainer": "Yihui Xie ", "Repository": "CRAN" }, - "askpass": { - "Package": "askpass", - "Version": "1.2.1", + "openssl": { + "Package": "openssl", + "Version": "2.3.5", "Source": "Repository", "Type": "Package", - "Title": "Password Entry Utilities for R, Git, and SSH", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", + "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", + "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", "License": "MIT + file LICENSE", - "URL": "https://r-lib.r-universe.dev/askpass", - "BugReports": "https://github.com/r-lib/askpass/issues", - "Encoding": "UTF-8", + "URL": "https://jeroen.r-universe.dev/openssl", + "BugReports": "https://github.com/jeroen/openssl/issues", + "SystemRequirements": "OpenSSL >= 1.0.2", + "VignetteBuilder": "knitr", "Imports": [ - "sys (>= 2.1)" + "askpass" ], - "RoxygenNote": "7.2.3", "Suggests": [ - "testthat" + "curl", + "testthat (>= 2.1.0)", + "digest", + "knitr", + "rmarkdown", + "jsonlite", + "jose", + "sodium" ], - "Language": "en-US", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] ()", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "backports": { - "Package": "backports", - "Version": "1.5.0", - "Source": "Repository", - "Type": "Package", - "Title": "Reimplementations of Functions Introduced Since R-3.0.0", - "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))", - "Maintainer": "Michel Lang ", - "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.", - "URL": "https://github.com/r-lib/backports", - "BugReports": "https://github.com/r-lib/backports/issues", - "License": "GPL-2 | GPL-3", - "NeedsCompilation": "yes", - "ByteCompile": "yes", - "Depends": [ - "R (>= 3.0.0)" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Author": "Michel Lang [cre, aut] (), Duncan Murdoch [aut], R Core Team [aut]", - "Repository": "CRAN" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-6", - "Source": "Repository", - "Title": "Tools for 'base64' Encoding", - "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.nz, ORCID: )", - "Authors@R": "person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.nz\", ORCID=\"0000-0003-2297-1732\"))", - "Maintainer": "Simon Urbanek ", - "Depends": [ - "R (>= 2.9.0)" - ], - "Enhances": [ - "png" - ], - "Description": "Tools for handling 'base64' encoding. It is more flexible than the orphaned 'base64' package.", - "License": "GPL-2 | GPL-3", - "URL": "https://www.rforge.net/base64enc", - "BugReports": "https://github.com/s-u/base64enc/issues", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "boot": { - "Package": "boot", - "Version": "1.3-32", - "Source": "Repository", - "Priority": "recommended", - "Date": "2025-08-29", - "Authors@R": "c(person(\"Angelo\", \"Canty\", role = \"aut\", email = \"cantya@mcmaster.ca\", comment = \"author of original code for S\"), person(\"Brian\", \"Ripley\", role = c(\"aut\", \"trl\"), email = \"Brian.Ripley@R-project.org\", comment = \"conversion to R, maintainer 1999--2022, author of parallel support\"), person(\"Alessandra R.\", \"Brazzale\", role = c(\"ctb\", \"cre\"), email = \"brazzale@stat.unipd.it\", comment = \"minor bug fixes\"))", - "Maintainer": "Alessandra R. Brazzale ", - "Note": "Maintainers are not available to give advice on using a package they did not author.", - "Description": "Functions and datasets for bootstrapping from the book \"Bootstrap Methods and Their Application\" by A. C. Davison and D. V. Hinkley (1997, CUP), originally written by Angelo Canty for S.", - "Title": "Bootstrap Functions", - "Depends": [ - "R (>= 3.0.0)", - "graphics", - "stats" - ], - "Suggests": [ - "MASS", - "survival" - ], - "LazyData": "yes", - "ByteCompile": "yes", - "License": "Unlimited", - "NeedsCompilation": "no", - "Author": "Angelo Canty [aut] (author of original code for S), Brian Ripley [aut, trl] (conversion to R, maintainer 1999--2022, author of parallel support), Alessandra R. Brazzale [ctb, cre] (minor bug fixes)", - "Repository": "CRAN" - }, - "broom": { - "Package": "broom", - "Version": "1.0.12", - "Source": "Repository", - "Type": "Package", - "Title": "Convert Statistical Objects into Tidy Tibbles", - "Authors@R": "c( person(\"David\", \"Robinson\", , \"admiral.david@gmail.com\", role = \"aut\"), person(\"Alex\", \"Hayes\", , \"alexpghayes@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(\"Simon\", \"Couch\", , \"simon.couch@posit.co\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-5676-5107\")), person(\"Emil\", \"Hvitfeldt\", , \"emil.hvitfeldt@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0679-1945\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(\"Derek\", \"Chiu\", , \"dchiu@bccrc.ca\", role = \"ctb\"), person(\"Matthieu\", \"Gomez\", , \"mattg@princeton.edu\", role = \"ctb\"), person(\"Boris\", \"Demeshev\", , \"boris.demeshev@gmail.com\", role = \"ctb\"), person(\"Dieter\", \"Menne\", , \"dieter.menne@menne-biomed.de\", role = \"ctb\"), person(\"Benjamin\", \"Nutter\", , \"nutter@battelle.org\", role = \"ctb\"), person(\"Luke\", \"Johnston\", , \"luke.johnston@mail.utoronto.ca\", role = \"ctb\"), person(\"Ben\", \"Bolker\", , \"bolker@mcmaster.ca\", role = \"ctb\"), person(\"Francois\", \"Briatte\", , \"f.briatte@gmail.com\", role = \"ctb\"), person(\"Jeffrey\", \"Arnold\", , \"jeffrey.arnold@gmail.com\", role = \"ctb\"), person(\"Jonah\", \"Gabry\", , \"jsg2201@columbia.edu\", role = \"ctb\"), person(\"Luciano\", \"Selzer\", , \"luciano.selzer@gmail.com\", role = \"ctb\"), person(\"Gavin\", \"Simpson\", , \"ucfagls@gmail.com\", role = \"ctb\"), person(\"Jens\", \"Preussner\", , \"jens.preussner@mpi-bn.mpg.de\", role = \"ctb\"), person(\"Jay\", \"Hesselberth\", , \"jay.hesselberth@gmail.com\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"ctb\"), person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = \"ctb\"), person(\"Alessandro\", \"Gasparini\", , \"ag475@leicester.ac.uk\", role = \"ctb\"), person(\"Lukasz\", \"Komsta\", , \"lukasz.komsta@umlub.pl\", role = \"ctb\"), person(\"Frederick\", \"Novometsky\", role = \"ctb\"), person(\"Wilson\", \"Freitas\", role = \"ctb\"), person(\"Michelle\", \"Evans\", role = \"ctb\"), person(\"Jason Cory\", \"Brunson\", , \"cornelioid@gmail.com\", role = \"ctb\"), person(\"Simon\", \"Jackson\", , \"drsimonjackson@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Whalley\", , \"ben.whalley@plymouth.ac.uk\", role = \"ctb\"), person(\"Karissa\", \"Whiting\", , \"karissa.whiting@gmail.com\", role = \"ctb\"), person(\"Yves\", \"Rosseel\", , \"yrosseel@gmail.com\", role = \"ctb\"), person(\"Michael\", \"Kuehn\", , \"mkuehn10@gmail.com\", role = \"ctb\"), person(\"Jorge\", \"Cimentada\", , \"cimentadaj@gmail.com\", role = \"ctb\"), person(\"Erle\", \"Holgersen\", , \"erle.holgersen@gmail.com\", role = \"ctb\"), person(\"Karl\", \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Ethan\", \"Christensen\", , \"christensen.ej@gmail.com\", role = \"ctb\"), person(\"Steven\", \"Pav\", , \"shabbychef@gmail.com\", role = \"ctb\"), person(\"Paul\", \"PJ\", , \"pjpaul.stephens@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Patrick\", \"Kennedy\", , \"pkqstr@protonmail.com\", role = \"ctb\"), person(\"Lily\", \"Medina\", , \"lilymiru@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Fannin\", , \"captain@pirategrunt.com\", role = \"ctb\"), person(\"Jason\", \"Muhlenkamp\", , \"jason.muhlenkamp@gmail.com\", role = \"ctb\"), person(\"Matt\", \"Lehman\", role = \"ctb\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Nic\", \"Crane\", role = \"ctb\"), person(\"Andrew\", \"Bates\", role = \"ctb\"), person(\"Vincent\", \"Arel-Bundock\", , \"vincent.arel-bundock@umontreal.ca\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(\"Hideaki\", \"Hayashi\", role = \"ctb\"), person(\"Luis\", \"Tobalina\", role = \"ctb\"), person(\"Annie\", \"Wang\", , \"anniewang.uc@gmail.com\", role = \"ctb\"), person(\"Wei Yang\", \"Tham\", , \"weiyang.tham@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", , \"clara.wang.94@gmail.com\", role = \"ctb\"), person(\"Abby\", \"Smith\", , \"als1@u.northwestern.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(\"Jasper\", \"Cooper\", , \"jaspercooper@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(\"E Auden\", \"Krauska\", , \"krauskae@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(\"Alex\", \"Wang\", , \"x249wang@uwaterloo.ca\", role = \"ctb\"), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Charles\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(\"Jared\", \"Wilber\", role = \"ctb\"), person(\"Vilmantas\", \"Gegzna\", , \"GegznaV@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(\"Eduard\", \"Szoecs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Angus\", \"Moore\", , \"angusmoore9@gmail.com\", role = \"ctb\"), person(\"Nick\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Marius\", \"Barth\", , \"marius.barth.uni.koeln@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(\"Bruna\", \"Wundervald\", , \"brunadaviesw@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(\"Joyce\", \"Cahoon\", , \"joyceyu48@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(\"Grant\", \"McDermott\", , \"grantmcd@uoregon.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(\"Kevin\", \"Zarca\", , \"kevin.zarca@gmail.com\", role = \"ctb\"), person(\"Shiro\", \"Kuriwaki\", , \"shirokuriwaki@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(\"Lukas\", \"Wallrich\", , \"lukas.wallrich@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(\"James\", \"Martherus\", , \"james@martherus.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(\"Chuliang\", \"Xiao\", , \"cxiao@umich.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(\"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = \"ctb\"), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", , \"michal2992@gmail.com\", role = \"ctb\"), person(\"Hakon\", \"Malmedal\", , \"hmalmedal@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", role = \"ctb\"), person(\"Sergio\", \"Oller\", , \"sergioller@gmail.com\", role = \"ctb\"), person(\"Luke\", \"Sonnet\", , \"luke.sonnet@gmail.com\", role = \"ctb\"), person(\"Jim\", \"Hester\", , \"jim.hester@posit.co\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Bernie\", \"Gray\", , \"bfgray3@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(\"Mara\", \"Averick\", , \"mara@posit.co\", role = \"ctb\"), person(\"Aaron\", \"Jacobs\", , \"atheriel@gmail.com\", role = \"ctb\"), person(\"Andreas\", \"Bender\", , \"bender.at.R@gmail.com\", role = \"ctb\"), person(\"Sven\", \"Templer\", , \"sven.templer@gmail.com\", role = \"ctb\"), person(\"Paul-Christian\", \"Buerkner\", , \"paul.buerkner@gmail.com\", role = \"ctb\"), person(\"Matthew\", \"Kay\", , \"mjskay@umich.edu\", role = \"ctb\"), person(\"Erwan\", \"Le Pennec\", , \"lepennec@gmail.com\", role = \"ctb\"), person(\"Johan\", \"Junkka\", , \"johan.junkka@umu.se\", role = \"ctb\"), person(\"Hao\", \"Zhu\", , \"haozhu233@gmail.com\", role = \"ctb\"), person(\"Benjamin\", \"Soltoff\", , \"soltoffbc@uchicago.edu\", role = \"ctb\"), person(\"Zoe\", \"Wilkinson Saldana\", , \"zoewsaldana@gmail.com\", role = \"ctb\"), person(\"Tyler\", \"Littlefield\", , \"tylurp1@gmail.com\", role = \"ctb\"), person(\"Charles T.\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\"), person(\"Shabbh E.\", \"Banks\", role = \"ctb\"), person(\"Serina\", \"Robinson\", , \"robi0916@umn.edu\", role = \"ctb\"), person(\"Roger\", \"Bivand\", , \"Roger.Bivand@nhh.no\", role = \"ctb\"), person(\"Riinu\", \"Ots\", , \"riinuots@gmail.com\", role = \"ctb\"), person(\"Nicholas\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Nina\", \"Jakobsen\", role = \"ctb\"), person(\"Michael\", \"Weylandt\", , \"michael.weylandt@gmail.com\", role = \"ctb\"), person(\"Lisa\", \"Lendway\", , \"llendway@macalester.edu\", role = \"ctb\"), person(\"Karl\", \"Hailperin\", , \"khailper@gmail.com\", role = \"ctb\"), person(\"Josue\", \"Rodriguez\", , \"jerrodriguez@ucdavis.edu\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", , \"jenny@posit.co\", role = \"ctb\"), person(\"Chris\", \"Jarvis\", , \"Christopher1.jarvis@gmail.com\", role = \"ctb\"), person(\"Greg\", \"Macfarlane\", , \"gregmacfarlane@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Mannakee\", , \"bmannakee@gmail.com\", role = \"ctb\"), person(\"Drew\", \"Tyre\", , \"atyre2@unl.edu\", role = \"ctb\"), person(\"Shreyas\", \"Singh\", , \"shreyas.singh.298@gmail.com\", role = \"ctb\"), person(\"Laurens\", \"Geffert\", , \"laurensgeffert@gmail.com\", role = \"ctb\"), person(\"Hong\", \"Ooi\", , \"hongooi@microsoft.com\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", , \"henrikb@braju.com\", role = \"ctb\"), person(\"Eduard\", \"Szocs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", , \"davidhughjones@gmail.com\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", , \"Matthieu.Stigler@gmail.com\", role = \"ctb\"), person(\"Hugo\", \"Tavares\", , \"hm533@cam.ac.uk\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(\"R. Willem\", \"Vervoort\", , \"Willemvervoort@gmail.com\", role = \"ctb\"), person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"ctb\"), person(\"Josh\", \"Yamamoto\", , \"joshuayamamoto5@gmail.com\", role = \"ctb\"), person(\"Jasme\", \"Lee\", role = \"ctb\"), person(\"Taren\", \"Sanders\", , \"taren.sanders@acu.edu.au\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(\"Ilaria\", \"Prosdocimi\", , \"prosdocimi.ilaria@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(\"Daniel D.\", \"Sjoberg\", , \"danield.sjoberg@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(\"Alex\", \"Reinhart\", , \"areinhar@stat.cmu.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6658-514X\")) )", - "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", - "License": "MIT + file LICENSE", - "URL": "https://broom.tidymodels.org/, https://github.com/tidymodels/broom", - "BugReports": "https://github.com/tidymodels/broom/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "backports", - "cli", - "dplyr (>= 1.0.0)", - "generics (>= 0.0.2)", - "glue", - "lifecycle", - "purrr", - "rlang (>= 1.1.0)", - "stringr", - "tibble (>= 3.0.0)", - "tidyr (>= 1.0.0)" - ], - "Suggests": [ - "AER", - "AUC", - "bbmle", - "betareg (>= 3.2-1)", - "biglm", - "binGroup", - "boot", - "btergm (>= 1.10.6)", - "car (>= 3.1-2)", - "carData", - "caret", - "cluster", - "cmprsk", - "coda", - "covr", - "drc", - "e1071", - "emmeans", - "epiR (>= 2.0.85)", - "ergm (>= 3.10.4)", - "fixest (>= 0.9.0)", - "gam (>= 1.15)", - "gee", - "geepack", - "ggplot2", - "glmnet", - "glmnetUtils", - "gmm", - "Hmisc", - "interp", - "irlba", - "joineRML", - "Kendall", - "knitr", - "ks", - "Lahman", - "lavaan (>= 0.6.18)", - "leaps", - "lfe", - "lm.beta", - "lme4", - "lmodel2", - "lmtest (>= 0.9.38)", - "lsmeans", - "maps", - "margins", - "MASS", - "mclust", - "mediation", - "metafor", - "mfx", - "mgcv", - "mlogit", - "modeldata", - "modeltests (>= 0.1.6)", - "muhaz", - "multcomp", - "network", - "nnet", - "ordinal", - "plm", - "poLCA", - "psych", - "quantreg", - "rmarkdown", - "robust", - "robustbase", - "rsample", - "sandwich", - "spatialreg", - "spdep (>= 1.1)", - "speedglm", - "spelling", - "stats4", - "survey", - "survival (>= 3.6-4)", - "systemfit", - "testthat (>= 3.0.0)", - "tseries", - "vars", - "zoo" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-25", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "Collate": "'aaa-documentation-helper.R' 'null-and-default.R' 'aer.R' 'auc.R' 'base.R' 'bbmle.R' 'betareg.R' 'biglm.R' 'bingroup.R' 'boot.R' 'broom-package.R' 'broom.R' 'btergm.R' 'car.R' 'caret.R' 'cluster.R' 'cmprsk.R' 'data-frame.R' 'deprecated-0-7-0.R' 'drc.R' 'emmeans.R' 'epiR.R' 'ergm.R' 'fixest.R' 'gam.R' 'geepack.R' 'glmnet-cv-glmnet.R' 'glmnet-glmnet.R' 'gmm.R' 'hmisc.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'joinerml.R' 'kendall.R' 'ks.R' 'lavaan.R' 'leaps.R' 'lfe.R' 'list-irlba.R' 'list-optim.R' 'list-svd.R' 'list-xyz.R' 'list.R' 'lm-beta.R' 'lmodel2.R' 'lmtest.R' 'maps.R' 'margins.R' 'mass-fitdistr.R' 'mass-negbin.R' 'mass-polr.R' 'mass-ridgelm.R' 'stats-lm.R' 'mass-rlm.R' 'mclust.R' 'mediation.R' 'metafor.R' 'mfx.R' 'mgcv.R' 'mlogit.R' 'muhaz.R' 'multcomp.R' 'nnet.R' 'nobs.R' 'ordinal-clm.R' 'ordinal-clmm.R' 'plm.R' 'polca.R' 'psych.R' 'stats-nls.R' 'quantreg-nlrq.R' 'quantreg-rq.R' 'quantreg-rqs.R' 'robust-glmrob.R' 'robust-lmrob.R' 'robustbase-glmrob.R' 'robustbase-lmrob.R' 'sp.R' 'spdep.R' 'speedglm-speedglm.R' 'speedglm-speedlm.R' 'stats-anova.R' 'stats-arima.R' 'stats-decompose.R' 'stats-factanal.R' 'stats-glm.R' 'stats-htest.R' 'stats-kmeans.R' 'stats-loess.R' 'stats-mlm.R' 'stats-prcomp.R' 'stats-smooth.spline.R' 'stats-summary-lm.R' 'stats-time-series.R' 'survey.R' 'survival-aareg.R' 'survival-cch.R' 'survival-coxph.R' 'survival-pyears.R' 'survival-survdiff.R' 'survival-survexp.R' 'survival-survfit.R' 'survival-survreg.R' 'systemfit.R' 'tseries.R' 'utilities.R' 'vars.R' 'zoo.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "David Robinson [aut], Alex Hayes [aut] (ORCID: ), Simon Couch [aut] (ORCID: ), Emil Hvitfeldt [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Indrajeet Patil [ctb] (ORCID: ), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (ORCID: ), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (ORCID: ), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (ORCID: ), Jasper Cooper [ctb] (ORCID: ), E Auden Krauska [ctb] (ORCID: ), Alex Wang [ctb], Malcolm Barrett [ctb] (ORCID: ), Charles Gray [ctb] (ORCID: ), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (ORCID: ), Eduard Szoecs [ctb], Frederik Aust [ctb] (ORCID: ), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (ORCID: ), Bruna Wundervald [ctb] (ORCID: ), Joyce Cahoon [ctb] (ORCID: ), Grant McDermott [ctb] (ORCID: ), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (ORCID: ), Lukas Wallrich [ctb] (ORCID: ), James Martherus [ctb] (ORCID: ), Chuliang Xiao [ctb] (ORCID: ), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (ORCID: ), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (ORCID: ), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (ORCID: ), Ilaria Prosdocimi [ctb] (ORCID: ), Daniel D. Sjoberg [ctb] (ORCID: ), Alex Reinhart [ctb] (ORCID: )", - "Maintainer": "Emil Hvitfeldt ", - "Repository": "CRAN" - }, - "bslib": { - "Package": "bslib", - "Version": "0.10.0", - "Source": "Repository", - "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", - "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", - "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", - "BugReports": "https://github.com/rstudio/bslib/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Imports": [ - "base64enc", - "cachem", - "fastmap (>= 1.1.1)", - "grDevices", - "htmltools (>= 0.5.8)", - "jquerylib (>= 0.1.3)", - "jsonlite", - "lifecycle", - "memoise (>= 2.0.1)", - "mime", - "rlang", - "sass (>= 0.4.9)" - ], - "Suggests": [ - "brand.yml", - "bsicons", - "curl", - "fontawesome", - "future", - "ggplot2", - "knitr", - "lattice", - "magrittr", - "rappdirs", - "rmarkdown (>= 2.7)", - "shiny (>= 1.11.1)", - "testthat", - "thematic", - "tools", - "utils", - "withr", - "yaml" - ], - "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", - "Config/Needs/routine": "chromote, desc, renv", - "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-code-editor.R' 'input-dark-mode.R' 'input-submit.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'toast.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (ORCID: ), Joe Cheng [aut], Garrick Aden-Buie [aut] (ORCID: ), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Title": "Cache R Objects with Automatic Pruning", - "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "ByteCompile": "true", - "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", - "Imports": [ - "rlang", - "fastmap (>= 1.2.0)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "7.2.3", - "Config/Needs/routine": "lobstr", - "Config/Needs/website": "pkgdown", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "car": { - "Package": "car", - "Version": "3.1-5", - "Source": "Repository", - "Date": "2026-01-05", - "Title": "Companion to Applied Regression", - "Authors@R": "c(person(\"John\", \"Fox\", role =\"aut\" , email = \"jfox@mcmaster.ca\"), person(\"Sanford\", \"Weisberg\", role = \"aut\", email = \"sandy@umn.edu\"), person(\"Brad\", \"Price\", role = c(\"aut\", \"cre\"), email = \"brad.price@mail.wvu.edu\"), person(\"Daniel\", \"Adler\", role=\"ctb\"), person(\"Douglas\", \"Bates\", role = \"ctb\"), person(\"Gabriel\", \"Baud-Bovy\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role=\"ctb\"), person(\"Steve\", \"Ellison\", role=\"ctb\"), person(\"David\", \"Firth\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Gregor\", \"Gorjanc\", role = \"ctb\"), person(\"Spencer\", \"Graves\", role = \"ctb\"), person(\"Richard\", \"Heiberger\", role = \"ctb\"), person(\"Pavel\", \"Krivitsky\", role = \"ctb\"), person(\"Rafael\", \"Laboissiere\", role = \"ctb\"), person(\"Martin\", \"Maechler\", role=\"ctb\"), person(\"Georges\", \"Monette\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Henric\", \"Nilsson\", role = \"ctb\"), person(\"Derek\", \"Ogle\", role = \"ctb\"), person(\"Iain\", \"Proctor\", role = \"ctb\"), person(\"Brian\", \"Ripley\", role = \"ctb\"), person(\"Tom\", \"Short\", role=\"ctb\"), person(\"William\", \"Venables\", role = \"ctb\"), person(\"Steve\", \"Walker\", role=\"ctb\"), person(\"David\", \"Winsemius\", role=\"ctb\"), person(\"Achim\", \"Zeileis\", role = \"ctb\"), person(\"R-Core\", role=\"ctb\"))", - "Depends": [ - "R (>= 3.5.0)", - "carData (>= 3.0-0)" - ], - "Imports": [ - "abind", - "Formula", - "MASS", - "mgcv", - "nnet", - "pbkrtest (>= 0.4-4)", - "quantreg", - "grDevices", - "utils", - "stats", - "graphics", - "lme4 (>= 1.1-27.1)", - "nlme", - "scales" - ], - "Suggests": [ - "alr4", - "boot", - "coxme", - "effects", - "knitr", - "leaps", - "lmtest", - "Matrix", - "MatrixModels", - "ordinal", - "plotrix", - "mvtnorm", - "rgl (>= 0.111.3)", - "rio", - "sandwich", - "SparseM", - "survival", - "survey" - ], - "ByteCompile": "yes", - "LazyLoad": "yes", - "Description": "Functions to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Third Edition, Sage, 2019.", - "License": "GPL (>= 2)", - "URL": "https://github.com/bprice2652/car_repo, https://CRAN.R-project.org/package=car, https://z.umn.edu/carbook", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "John Fox [aut], Sanford Weisberg [aut], Brad Price [aut, cre], Daniel Adler [ctb], Douglas Bates [ctb], Gabriel Baud-Bovy [ctb], Ben Bolker [ctb], Steve Ellison [ctb], David Firth [ctb], Michael Friendly [ctb], Gregor Gorjanc [ctb], Spencer Graves [ctb], Richard Heiberger [ctb], Pavel Krivitsky [ctb], Rafael Laboissiere [ctb], Martin Maechler [ctb], Georges Monette [ctb], Duncan Murdoch [ctb], Henric Nilsson [ctb], Derek Ogle [ctb], Iain Proctor [ctb], Brian Ripley [ctb], Tom Short [ctb], William Venables [ctb], Steve Walker [ctb], David Winsemius [ctb], Achim Zeileis [ctb], R-Core [ctb]", - "Maintainer": "Brad Price ", - "Repository": "CRAN" - }, - "carData": { - "Package": "carData", - "Version": "3.0-6", - "Source": "Repository", - "Date": "2026-01-30", - "Title": "Companion to Applied Regression Data Sets", - "Authors@R": "c(person(\"John\", \"Fox\", role = \"aut\", email = \"jfox@mcmaster.ca\"), person(\"Sanford\", \"Weisberg\", role = \"aut\", email = \"sandy@umn.edu\"), person(\"Brad\", \"Price\", role = c(\"aut\", \"cre\"), email = \"brad.price@mail.wvu.edu\"))", - "Depends": [ - "R (>= 3.5.0)" - ], - "Suggests": [ - "car (>= 3.0-0)" - ], - "LazyLoad": "yes", - "LazyData": "yes", - "Description": "Datasets to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Third Edition, Sage (2019).", - "License": "GPL (>= 2)", - "URL": "https://r-forge.r-project.org/projects/car/, https://CRAN.R-project.org/package=carData, https://z.umn.edu/carbook", - "NeedsCompilation": "no", - "Author": "John Fox [aut], Sanford Weisberg [aut], Brad Price [aut, cre]", - "Maintainer": "Brad Price ", - "Repository": "CRAN" - }, - "cli": { - "Package": "cli", - "Version": "3.6.5", - "Source": "Repository", - "Title": "Helpers for Developing Command Line Interfaces", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", - "License": "MIT + file LICENSE", - "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", - "BugReports": "https://github.com/r-lib/cli/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "callr", - "covr", - "crayon", - "digest", - "glue (>= 1.6.0)", - "grDevices", - "htmltools", - "htmlwidgets", - "knitr", - "methods", - "processx", - "ps (>= 1.3.4.9000)", - "rlang (>= 1.0.2.9003)", - "rmarkdown", - "rprojroot", - "rstudioapi", - "testthat (>= 3.2.0)", - "tibble", - "whoami", - "withr" - ], - "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-20", - "Source": "Repository", - "Priority": "recommended", - "Author": "Luke Tierney ", - "Description": "Code analysis tools for R.", - "Title": "Code Analysis Tools for R", - "Depends": [ - "R (>= 2.1)" - ], - "Maintainer": "Luke Tierney ", - "URL": "https://gitlab.com/luke-tierney/codetools", - "License": "GPL", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "colorspace": { - "Package": "colorspace", - "Version": "2.1-2", - "Source": "Repository", - "Date": "2025-09-22", - "Title": "A Toolbox for Manipulating and Assessing Colors and Palettes", - "Authors@R": "c(person(given = \"Ross\", family = \"Ihaka\", role = \"aut\", email = \"ihaka@stat.auckland.ac.nz\"), person(given = \"Paul\", family = \"Murrell\", role = \"aut\", email = \"paul@stat.auckland.ac.nz\", comment = c(ORCID = \"0000-0002-3224-8858\")), person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(given = c(\"Jason\", \"C.\"), family = \"Fisher\", role = \"aut\", email = \"jfisher@usgs.gov\", comment = c(ORCID = \"0000-0001-9032-8912\")), person(given = \"Reto\", family = \"Stauffer\", role = \"aut\", email = \"Reto.Stauffer@uibk.ac.at\", comment = c(ORCID = \"0000-0002-3798-5507\")), person(given = c(\"Claus\", \"O.\"), family = \"Wilke\", role = \"aut\", email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(given = c(\"Claire\", \"D.\"), family = \"McWhite\", role = \"aut\", email = \"claire.mcwhite@utmail.utexas.edu\", comment = c(ORCID = \"0000-0001-7346-3047\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")))", - "Description": "Carries out mapping between assorted color spaces including RGB, HSV, HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB, and polar CIELAB. Qualitative, sequential, and diverging color palettes based on HCL colors are provided along with corresponding ggplot2 color scales. Color palette choice is aided by an interactive app (with either a Tcl/Tk or a shiny graphical user interface) and shiny apps with an HCL color picker and a color vision deficiency emulator. Plotting functions for displaying and assessing palettes include color swatches, visualizations of the HCL space, and trajectories in HCL and/or RGB spectrum. Color manipulation functions include: desaturation, lightening/darkening, mixing, and simulation of color vision deficiencies (deutanomaly, protanomaly, tritanomaly). Details can be found on the project web page at and in the accompanying scientific paper: Zeileis et al. (2020, Journal of Statistical Software, ).", - "Depends": [ - "R (>= 3.0.0)", - "methods" - ], - "Imports": [ - "graphics", - "grDevices", - "stats" - ], - "Suggests": [ - "datasets", - "utils", - "KernSmooth", - "MASS", - "kernlab", - "mvtnorm", - "vcd", - "tcltk", - "shiny", - "shinyjs", - "ggplot2", - "dplyr", - "scales", - "grid", - "png", - "jpeg", - "knitr", - "rmarkdown", - "RColorBrewer", - "rcartocolor", - "scico", - "viridis", - "wesanderson" - ], - "VignetteBuilder": "knitr", - "License": "BSD_3_clause + file LICENSE", - "URL": "https://colorspace.R-Forge.R-project.org/, https://hclwizard.org/", - "BugReports": "https://colorspace.R-Forge.R-project.org/contact.html", - "LazyData": "yes", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Ross Ihaka [aut], Paul Murrell [aut] (ORCID: ), Kurt Hornik [aut] (ORCID: ), Jason C. Fisher [aut] (ORCID: ), Reto Stauffer [aut] (ORCID: ), Claus O. Wilke [aut] (ORCID: ), Claire D. McWhite [aut] (ORCID: ), Achim Zeileis [aut, cre] (ORCID: )", - "Maintainer": "Achim Zeileis ", - "Repository": "CRAN" - }, - "commonmark": { - "Package": "commonmark", - "Version": "2.0.0", - "Source": "Repository", - "Type": "Package", - "Title": "High Performance CommonMark and Github Markdown Rendering in R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", - "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", - "License": "BSD_2_clause + file LICENSE", - "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", - "BugReports": "https://github.com/r-lib/commonmark/issues", - "Suggests": [ - "curl", - "testthat", - "xml2" - ], - "RoxygenNote": "7.3.2", - "Language": "en-US", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), John MacFarlane [cph] (Author of cmark)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "cowplot": { - "Package": "cowplot", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Streamlined Plot Theme and Plot Annotations for 'ggplot2'", - "Authors@R": "person( given = \"Claus O.\", family = \"Wilke\", role = c(\"aut\", \"cre\"), email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\") )", - "Description": "Provides various features that help with creating publication-quality figures with 'ggplot2', such as a set of themes, functions to align plots and arrange them into complex compound figures, and functions that make it easy to annotate plots and or mix plots with images. The package was originally written for internal use in the Wilke lab, hence the name (Claus O. Wilke's plot package). It has also been used extensively in the book Fundamentals of Data Visualization.", - "URL": "https://wilkelab.org/cowplot/", - "BugReports": "https://github.com/wilkelab/cowplot/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "ggplot2 (>= 3.5.2)", - "grid", - "gtable", - "grDevices", - "methods", - "rlang", - "scales" - ], - "License": "GPL-2", - "Suggests": [ - "Cairo", - "covr", - "dplyr", - "forcats", - "gridGraphics (>= 0.4-0)", - "knitr", - "lattice", - "magick", - "maps", - "PASWR", - "patchwork", - "rmarkdown", - "ragg", - "testthat (>= 1.0.0)", - "tidyr", - "vdiffr (>= 0.3.0)", - "VennDiagram" - ], - "VignetteBuilder": "knitr", - "Collate": "'add_sub.R' 'align_plots.R' 'as_grob.R' 'as_gtable.R' 'axis_canvas.R' 'cowplot.R' 'draw.R' 'get_plot_component.R' 'get_axes.R' 'get_titles.R' 'get_legend.R' 'get_panel.R' 'gtable.R' 'key_glyph.R' 'plot_grid.R' 'save.R' 'set_null_device.R' 'setup.R' 'stamp.R' 'themes.R' 'utils_ggplot2.R'", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Claus O. Wilke [aut, cre] (ORCID: )", - "Maintainer": "Claus O. Wilke ", - "Repository": "CRAN" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.5.3", - "Source": "Repository", - "Title": "A C++11 Interface for R's C Interface", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", - "License": "MIT + file LICENSE", - "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", - "BugReports": "https://github.com/r-lib/cpp11/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "bench", - "brio", - "callr", - "cli", - "covr", - "decor", - "desc", - "ggplot2", - "glue", - "knitr", - "lobstr", - "mockery", - "progress", - "rmarkdown", - "scales", - "Rcpp", - "testthat (>= 3.2.0)", - "tibble", - "utils", - "vctrs", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Davis Vaughan [aut, cre] (ORCID: ), Jim Hester [aut] (ORCID: ), Romain François [aut] (ORCID: ), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.2", - "Source": "Repository", - "Type": "Package", - "Title": "Inter-Widget Interactivity for HTML Widgets", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(, \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )", - "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk", - "BugReports": "https://github.com/rstudio/crosstalk/issues", - "Imports": [ - "htmltools (>= 0.3.6)", - "jsonlite", - "lazyeval", - "R6" - ], - "Suggests": [ - "bslib", - "ggplot2", - "sass", - "shiny", - "testthat (>= 2.1.0)" - ], - "Config/Needs/website": "jcheng5/d3scatter, DT, leaflet, rmarkdown", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "curl": { - "Package": "curl", - "Version": "7.0.0", - "Source": "Repository", - "Type": "Package", - "Title": "A Modern and Flexible Web Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", - "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", - "License": "MIT + file LICENSE", - "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", - "URL": "https://jeroen.r-universe.dev/curl", - "BugReports": "https://github.com/jeroen/curl/issues", - "Suggests": [ - "spelling", - "testthat (>= 1.0.0)", - "knitr", - "jsonlite", - "later", - "rmarkdown", - "httpuv (>= 1.4.4)", - "webutils" - ], - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 3.0.0)" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "data.table": { - "Package": "data.table", - "Version": "1.18.2.1", - "Source": "Repository", - "Title": "Extension of `data.frame`", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "bit64 (>= 4.0.0)", - "bit (>= 4.0.4)", - "R.utils (>= 2.13.0)", - "xts", - "zoo (>= 1.8-1)", - "yaml", - "knitr", - "markdown" - ], - "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.", - "License": "MPL-2.0 | file LICENSE", - "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table, https://github.com/Rdatatable/data.table", - "BugReports": "https://github.com/Rdatatable/data.table/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "ByteCompile": "TRUE", - "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\") )", - "NeedsCompilation": "yes", - "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb]", - "Maintainer": "Tyson Barrett ", - "Repository": "CRAN" - }, - "digest": { - "Package": "digest", - "Version": "0.6.39", - "Source": "Repository", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8059-9767\")), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8552-0029\")), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0492-6647\")), person(\"Ion\", \"Suruceanu\", role=\"ctb\", comment = c(ORCID = \"0009-0005-6446-4909\")), person(\"Bill\", \"Denney\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\", comment = c(ORCID = \"0009-0008-8480-1329\")), person(\"Sergey\", \"Fedorov\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5970-7233\")), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\", comment = c(ORCID = \"0009-0000-5948-4503\")), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Carl\", \"Pearson\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0701-7860\")))", - "Date": "2025-11-19", - "Title": "Create Compact Hash Digests of R Objects", - "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as 'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", - "URL": "https://github.com/eddelbuettel/digest, https://eddelbuettel.github.io/digest/, https://dirk.eddelbuettel.com/code/digest.html", - "BugReports": "https://github.com/eddelbuettel/digest/issues", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "utils" - ], - "License": "GPL (>= 2)", - "Suggests": [ - "tinytest", - "simplermarkdown", - "rbenchmark" - ], - "VignetteBuilder": "simplermarkdown", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Antoine Lucas [ctb] (ORCID: ), Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (ORCID: ), Simon Urbanek [ctb] (ORCID: ), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb] (ORCID: ), Duncan Murdoch [ctb], Jim Hester [ctb] (ORCID: ), Wush Wu [ctb] (ORCID: ), Qiang Kou [ctb] (ORCID: ), Thierry Onkelinx [ctb] (ORCID: ), Michel Lang [ctb] (ORCID: ), Viliam Simko [ctb], Kurt Hornik [ctb] (ORCID: ), Radford Neal [ctb] (ORCID: ), Kendon Bell [ctb] (ORCID: ), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb] (ORCID: ), Ion Suruceanu [ctb] (ORCID: ), Bill Denney [ctb] (ORCID: ), Dirk Schumacher [ctb], András Svraka [ctb] (ORCID: ), Sergey Fedorov [ctb] (ORCID: ), Will Landau [ctb] (ORCID: ), Floris Vanderhaeghe [ctb] (ORCID: ), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (ORCID: ), Mark van der Loo [ctb] (ORCID: ), Chris Muir [ctb] (ORCID: ), Moritz Beller [ctb] (ORCID: ), Sebastian Campbell [ctb] (ORCID: ), Winston Chang [ctb] (ORCID: ), Dean Attali [ctb] (ORCID: ), Michael Chirico [ctb] (ORCID: ), Kevin Ushey [ctb] (ORCID: ), Carl Pearson [ctb] (ORCID: )", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "doBy": { - "Package": "doBy", - "Version": "4.7.1", - "Source": "Repository", - "Title": "Groupwise Statistics, LSmeans, Linear Estimates, Utilities", - "Authors@R": "c( person(given = \"Ulrich\", family = \"Halekoh\", email = \"uhalekoh@health.sdu.dk\", role = c(\"aut\", \"cph\")), person(given = \"Søren\", family = \"Højsgaard\", email = \"sorenh@math.aau.dk\", role = c(\"aut\", \"cre\", \"cph\")) )", - "Description": "Utility package containing: Main categories: Working with grouped data: 'do' something to data when stratified 'by' some variables. General linear estimates. Data handling utilities. Functional programming, in particular restrict functions to a smaller domain. Miscellaneous functions for data handling. Model stability in connection with model selection. Miscellaneous other tools.", - "Encoding": "UTF-8", - "VignetteBuilder": "knitr", - "LazyData": "true", - "LazyDataCompression": "xz", - "URL": "https://github.com/hojsgaard/doBy", - "License": "GPL (>= 2)", - "Depends": [ - "R (>= 4.2.0)", - "methods" - ], - "Imports": [ - "boot", - "broom", - "cowplot", - "Deriv", - "dplyr", - "forecast", - "ggplot2", - "MASS", - "Matrix", - "modelr", - "microbenchmark", - "rlang", - "purrr", - "tibble", - "tidyr" - ], - "Suggests": [ - "geepack", - "knitr", - "lme4", - "markdown", - "rmarkdown", - "multcomp", - "pbkrtest (>= 0.5.2)", - "survival", - "testthat (>= 2.1.0)" - ], - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Ulrich Halekoh [aut, cph], Søren Højsgaard [aut, cre, cph]", - "Maintainer": "Søren Højsgaard ", - "Repository": "CRAN" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.2.0", - "Source": "Repository", - "Type": "Package", - "Title": "A Grammar of Data Manipulation", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", - "License": "MIT + file LICENSE", - "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", - "BugReports": "https://github.com/tidyverse/dplyr/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cli (>= 3.6.2)", - "generics", - "glue (>= 1.3.2)", - "lifecycle (>= 1.0.5)", - "magrittr (>= 1.5)", - "methods", - "pillar (>= 1.9.0)", - "R6", - "rlang (>= 1.1.7)", - "tibble (>= 3.2.0)", - "tidyselect (>= 1.2.0)", - "utils", - "vctrs (>= 0.7.1)" - ], - "Suggests": [ - "broom", - "covr", - "DBI", - "dbplyr (>= 2.2.1)", - "ggplot2", - "knitr", - "Lahman", - "lobstr", - "nycflights13", - "purrr", - "rmarkdown", - "RSQLite", - "stringi (>= 1.7.6)", - "testthat (>= 3.1.5)", - "tidyr (>= 1.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Romain François [aut] (ORCID: ), Lionel Henry [aut], Kirill Müller [aut] (ORCID: ), Davis Vaughan [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "drc": { - "Package": "drc", - "Version": "3.0-1", - "Source": "Repository", - "Date": "2016-08-25", - "Title": "Analysis of Dose-Response Curves", - "Author": "Christian Ritz , Jens C. Strebig ", - "Maintainer": "Christian Ritz ", - "Depends": [ - "R (>= 2.0.0)", - "MASS", - "stats" - ], - "Imports": [ - "car", - "gtools", - "multcomp", - "plotrix", - "scales" - ], - "LazyLoad": "yes", - "LazyData": "yes", - "Description": "Analysis of dose-response data is made available through a suite of flexible and versatile model fitting and after-fitting functions.", - "License": "GPL-2 | file LICENCE", - "URL": "http://www.r-project.org, http://www.bioassay.dk", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.5", - "Source": "Repository", - "Type": "Package", - "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", - "License": "MIT + file LICENSE", - "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", - "BugReports": "https://github.com/r-lib/evaluate/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "callr", - "covr", - "ggplot2 (>= 3.3.6)", - "lattice", - "methods", - "pkgload", - "ragg (>= 1.4.0)", - "rlang (>= 1.1.5)", - "knitr", - "testthat (>= 3.0.0)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (ORCID: ), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Type": "Package", - "Title": "High Performance Colour Space Manipulation", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", - "License": "MIT + file LICENSE", - "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", - "BugReports": "https://github.com/thomasp85/farver/issues", - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Fast Data Structures", - "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", - "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat (>= 2.1.1)" - ], - "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", - "BugReports": "https://github.com/r-lib/fastmap/issues", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.3", - "Source": "Repository", - "Type": "Package", - "Title": "Easily Work with 'Font Awesome' Icons", - "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", - "BugReports": "https://github.com/rstudio/fontawesome/issues", - "Encoding": "UTF-8", - "ByteCompile": "true", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "rlang (>= 1.0.6)", - "htmltools (>= 0.5.1.1)" - ], - "Suggests": [ - "covr", - "dplyr (>= 1.0.8)", - "gt (>= 0.9.0)", - "knitr (>= 1.31)", - "testthat (>= 3.0.0)", - "rsvg" - ], - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "forecast": { - "Package": "forecast", - "Version": "9.0.2", - "Source": "Repository", - "Title": "Forecasting Functions for Time Series and Linear Models", - "Description": "Methods and tools for displaying and analysing univariate time series forecasts including exponential smoothing via state space models and automatic ARIMA modelling.", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "colorspace", - "fracdiff", - "generics (>= 0.1.2)", - "ggplot2 (>= 3.4.0)", - "graphics", - "lmtest", - "magrittr", - "nnet", - "parallel", - "Rcpp (>= 0.12.4)", - "stats", - "timeDate", - "urca", - "withr", - "zoo" - ], - "Suggests": [ - "forecTheta", - "knitr", - "methods", - "rmarkdown", - "rticles", - "scales", - "seasonal", - "testthat (>= 3.3.0)", - "uroot" - ], - "LinkingTo": [ - "Rcpp (>= 0.12.4)", - "RcppArmadillo (>= 0.2.35)" - ], - "LazyData": "yes", - "ByteCompile": "TRUE", - "Authors@R": "c( person(\"Rob\", \"Hyndman\", email = \"Rob.Hyndman@monash.edu\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0002-2140-5352\")), person(\"George\", \"Athanasopoulos\", role = \"aut\", comment = c(ORCID = \"0000-0002-5389-2802\")), person(\"Christoph\", \"Bergmeir\", role = \"aut\", comment = c(ORCID = \"0000-0002-3665-9021\")), person(\"Gabriel\", \"Caceres\", role = \"aut\", comment = c(ORCID = \"0000-0002-2947-2023\")), person(\"Leanne\", \"Chhay\", role = \"aut\"), person(\"Kirill\", \"Kuroptev\", role = \"aut\"), person(\"Maximilian\", \"Mücke\", role = \"aut\", comment = c(ORCID = \"0009-0000-9432-9795\")), person(\"Mitchell\", \"O'Hara-Wild\", role = \"aut\", comment = c(ORCID = \"0000-0001-6729-7695\")), person(\"Fotios\", \"Petropoulos\", role = \"aut\", comment = c(ORCID = \"0000-0003-3039-4955\")), person(\"Slava\", \"Razbash\", role = \"aut\"), person(\"Earo\", \"Wang\", role = \"aut\", comment = c(ORCID = \"0000-0001-6448-5260\")), person(\"Farah\", \"Yasmeen\", role = \"aut\", comment = c(ORCID = \"0000-0002-1479-5401\")), person(\"Federico\", \"Garza\", role = \"ctb\"), person(\"Daniele\", \"Girolimetto\", role = \"ctb\"), person(\"Ross\", \"Ihaka\", role = c(\"ctb\", \"cph\")), person(\"R Core Team\", role = c(\"ctb\", \"cph\")), person(\"Daniel\", \"Reid\", role = \"ctb\"), person(\"David\", \"Shaub\", role = \"ctb\"), person(\"Yuan\", \"Tang\", role = \"ctb\", comment = c(ORCID = \"0000-0001-5243-233X\")), person(\"Xiaoqian\", \"Wang\", role = \"ctb\"), person(\"Zhenyu\", \"Zhou\", role = \"ctb\") )", - "BugReports": "https://github.com/robjhyndman/forecast/issues", - "License": "GPL-3", - "URL": "https://pkg.robjhyndman.com/forecast/, https://github.com/robjhyndman/forecast", - "VignetteBuilder": "knitr", - "RoxygenNote": "7.3.3", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Rob Hyndman [aut, cre, cph] (ORCID: ), George Athanasopoulos [aut] (ORCID: ), Christoph Bergmeir [aut] (ORCID: ), Gabriel Caceres [aut] (ORCID: ), Leanne Chhay [aut], Kirill Kuroptev [aut], Maximilian Mücke [aut] (ORCID: ), Mitchell O'Hara-Wild [aut] (ORCID: ), Fotios Petropoulos [aut] (ORCID: ), Slava Razbash [aut], Earo Wang [aut] (ORCID: ), Farah Yasmeen [aut] (ORCID: ), Federico Garza [ctb], Daniele Girolimetto [ctb], Ross Ihaka [ctb, cph], R Core Team [ctb, cph], Daniel Reid [ctb], David Shaub [ctb], Yuan Tang [ctb] (ORCID: ), Xiaoqian Wang [ctb], Zhenyu Zhou [ctb]", - "Maintainer": "Rob Hyndman ", - "Repository": "CRAN" - }, - "fracdiff": { - "Package": "fracdiff", - "Version": "1.5-3", - "Source": "Repository", - "VersionNote": "Released 1.5-0 on 2019-12-09, 1.5-1 on 2020-01-20, 1.5-2 on 2022-10-31", - "Date": "2024-02-01", - "Title": "Fractionally Differenced ARIMA aka ARFIMA(P,d,q) Models", - "Authors@R": "c(person(\"Martin\",\"Maechler\", role=c(\"aut\",\"cre\"), email=\"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(\"Chris\", \"Fraley\", role=c(\"ctb\",\"cph\"), comment = \"S original; Fortran code\") , person(\"Friedrich\", \"Leisch\", role = \"ctb\", comment = c(\"R port\", ORCID = \"0000-0001-7278-1983\")) , person(\"Valderio\", \"Reisen\", role=\"ctb\", comment = \"fdGPH() & fdSperio()\") , person(\"Artur\", \"Lemonte\", role=\"ctb\", comment = \"fdGPH() & fdSperio()\") , person(\"Rob\", \"Hyndman\", email=\"Rob.Hyndman@monash.edu\", role=\"ctb\", comment = c(\"residuals() & fitted()\", ORCID = \"0000-0002-2140-5352\")) )", - "Description": "Maximum likelihood estimation of the parameters of a fractionally differenced ARIMA(p,d,q) model (Haslett and Raftery, Appl.Statistics, 1989); including inference and basic methods. Some alternative algorithms to estimate \"H\".", - "Imports": [ - "stats" - ], - "Suggests": [ - "longmemo", - "forecast", - "urca" - ], - "License": "GPL (>= 2)", - "URL": "https://github.com/mmaechler/fracdiff", - "BugReports": "https://github.com/mmaechler/fracdiff/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Martin Maechler [aut, cre] (), Chris Fraley [ctb, cph] (S original; Fortran code), Friedrich Leisch [ctb] (R port, ), Valderio Reisen [ctb] (fdGPH() & fdSperio()), Artur Lemonte [ctb] (fdGPH() & fdSperio()), Rob Hyndman [ctb] (residuals() & fitted(), )", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" - }, - "fs": { - "Package": "fs", - "Version": "2.0.1", - "Source": "Repository", - "Title": "Cross-Platform File System Operations Based on 'libuv'", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", - "License": "MIT + file LICENSE", - "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", - "BugReports": "https://github.com/r-lib/fs/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "covr", - "crayon", - "knitr", - "pillar (>= 1.0.0)", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "tibble (>= 1.1.0)", - "vctrs (>= 0.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "SystemRequirements": "libuv: libuv-devel (rpm) or libuv1-dev (deb). Alternatively to build the vendored libuv 'cmake' is required. GNU make.", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "generics": { - "Package": "generics", - "Version": "0.1.4", - "Source": "Repository", - "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", - "License": "MIT + file LICENSE", - "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", - "BugReports": "https://github.com/r-lib/generics/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "covr", - "pkgload", - "testthat (>= 3.0.0)", - "tibble", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ggplot2": { - "Package": "ggplot2", - "Version": "4.0.2", - "Source": "Repository", - "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.", - "License": "MIT + file LICENSE", - "URL": "https://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2", - "BugReports": "https://github.com/tidyverse/ggplot2/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli", - "grDevices", - "grid", - "gtable (>= 0.3.6)", - "isoband", - "lifecycle (> 1.0.1)", - "rlang (>= 1.1.0)", - "S7", - "scales (>= 1.4.0)", - "stats", - "vctrs (>= 0.6.0)", - "withr (>= 2.5.0)" - ], - "Suggests": [ - "broom", - "covr", - "dplyr", - "ggplot2movies", - "hexbin", - "Hmisc", - "hms", - "knitr", - "mapproj", - "maps", - "MASS", - "mgcv", - "multcomp", - "munsell", - "nlme", - "profvis", - "quantreg", - "quarto", - "ragg (>= 1.2.6)", - "RColorBrewer", - "roxygen2", - "rpart", - "sf (>= 0.7-3)", - "svglite (>= 2.1.2)", - "testthat (>= 3.1.5)", - "tibble", - "vdiffr (>= 1.0.6)", - "xml2" - ], - "Enhances": [ - "sp" - ], - "VignetteBuilder": "quarto", - "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'all-classes.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'annotation-borders.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'scale-type.R' 'layer.R' 'make-constructor.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-map.R' 'fortify-models.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-tile.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-point.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'properties.R' 'margins.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-summary-2d.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-connect.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-manual.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'theme-sub.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (ORCID: ), Kohske Takahashi [aut], Claus Wilke [aut] (ORCID: ), Kara Woo [aut] (ORCID: ), Hiroaki Yutani [aut] (ORCID: ), Dewey Dunnington [aut] (ORCID: ), Teun van den Brand [aut] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "glue": { - "Package": "glue", - "Version": "1.8.0", - "Source": "Repository", - "Title": "Interpreted String Literals", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", - "License": "MIT + file LICENSE", - "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", - "BugReports": "https://github.com/tidyverse/glue/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "crayon", - "DBI (>= 1.2.0)", - "dplyr", - "knitr", - "magrittr", - "rlang", - "rmarkdown", - "RSQLite", - "testthat (>= 3.2.0)", - "vctrs (>= 0.3.0)", - "waldo (>= 0.5.3)", - "withr" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.6", - "Source": "Repository", - "Title": "Arrange 'Grobs' in Tables", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects so that complex compositions can be built up sequentially.", - "License": "MIT + file LICENSE", - "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", - "BugReports": "https://github.com/r-lib/gtable/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "cli", - "glue", - "grid", - "lifecycle", - "rlang (>= 1.1.0)", - "stats" - ], - "Suggests": [ - "covr", - "ggplot2", - "knitr", - "profvis", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2024-10-25", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "gtools": { - "Package": "gtools", - "Version": "3.9.5", - "Source": "Repository", - "Title": "Various R Programming Tools", - "Description": "Functions to assist in R programming, including: - assist in developing, updating, and maintaining R and R packages ('ask', 'checkRVersion', 'getDependencies', 'keywords', 'scat'), - calculate the logit and inverse logit transformations ('logit', 'inv.logit'), - test if a value is missing, empty or contains only NA and NULL values ('invalid'), - manipulate R's .Last function ('addLast'), - define macros ('defmacro'), - detect odd and even integers ('odd', 'even'), - convert strings containing non-ASCII characters (like single quotes) to plain ASCII ('ASCIIfy'), - perform a binary search ('binsearch'), - sort strings containing both numeric and character components ('mixedsort'), - create a factor variable from the quantiles of a continuous variable ('quantcut'), - enumerate permutations and combinations ('combinations', 'permutation'), - calculate and convert between fold-change and log-ratio ('foldchange', 'logratio2foldchange', 'foldchange2logratio'), - calculate probabilities and generate random numbers from Dirichlet distributions ('rdirichlet', 'ddirichlet'), - apply a function over adjacent subsets of a vector ('running'), - modify the TCP_NODELAY ('de-Nagle') flag for socket objects, - efficient 'rbind' of data frames, even if the column names don't match ('smartbind'), - generate significance stars from p-values ('stars.pval'), - convert characters to/from ASCII codes ('asc', 'chr'), - convert character vector to ASCII representation ('ASCIIfy'), - apply title capitalization rules to a character vector ('capwords').", - "Authors@R": "c(person(\"Gregory R.\", \"Warnes\", role = \"aut\"), person(\"Ben\", \"Bolker\", role = c(\"aut\", \"cre\"), email = \"bolker@mcmaster.ca\", comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Thomas\", \"Lumley\", role = \"aut\"), person(\"Arni\", \"Magnusson\", role = \"aut\"), person(\"Bill\", \"Venables\", role = \"aut\"), person(\"Genei\", \"Ryodan\", role = \"aut\"), person(\"Steffen\", \"Moeller\", role = \"aut\"), person(\"Ian\", \"Wilson\", role = \"ctb\"), person(\"Mark\", \"Davis\", role = \"ctb\"), person(\"Nitin\", \"Jain\", role=\"ctb\"), person(\"Scott\", \"Chamberlain\", role = \"ctb\"))", - "License": "GPL-2", - "Depends": [ - "methods", - "stats", - "utils" - ], - "URL": "https://github.com/r-gregmisc/gtools", - "BugReports": "https://github.com/r-gregmisc/gtools/issues", - "Language": "en-US", - "Suggests": [ - "car", - "gplots", - "knitr", - "rstudioapi", - "SGP", - "taxize" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Gregory R. Warnes [aut], Ben Bolker [aut, cre] (), Thomas Lumley [aut], Arni Magnusson [aut], Bill Venables [aut], Genei Ryodan [aut], Steffen Moeller [aut], Ian Wilson [ctb], Mark Davis [ctb], Nitin Jain [ctb], Scott Chamberlain [ctb]", - "Maintainer": "Ben Bolker ", - "Repository": "CRAN" - }, - "highr": { - "Package": "highr", - "Version": "0.12", - "Source": "Repository", - "Type": "Package", - "Title": "Syntax Highlighting for R Source Code", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", - "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "xfun (>= 0.18)" - ], - "Suggests": [ - "knitr", - "markdown", - "testit" - ], - "License": "GPL", - "URL": "https://github.com/yihui/highr", - "BugReports": "https://github.com/yihui/highr/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.9", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for HTML", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools for HTML generation and output.", - "License": "GPL (>= 2)", - "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", - "BugReports": "https://github.com/rstudio/htmltools/issues", - "Depends": [ - "R (>= 2.14.1)" - ], - "Imports": [ - "base64enc", - "digest", - "fastmap (>= 1.1.0)", - "grDevices", - "rlang (>= 1.0.0)", - "utils" - ], - "Suggests": [ - "Cairo", - "markdown", - "ragg", - "shiny", - "testthat", - "withr" - ], - "Enhances": [ - "knitr" - ], - "Config/Needs/check": "knitr", - "Config/Needs/website": "rstudio/quillt, bench", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Type": "Package", - "Title": "HTML Widgets for R", - "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/ramnathv/htmlwidgets", - "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", - "Imports": [ - "grDevices", - "htmltools (>= 0.5.7)", - "jsonlite (>= 0.9.16)", - "knitr (>= 1.8)", - "rmarkdown", - "yaml" - ], - "Suggests": [ - "testthat" - ], - "Enhances": [ - "shiny (>= 1.1)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.17", - "Source": "Repository", - "Type": "Package", - "Title": "HTTP and WebSocket Server Library", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", - "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", - "License": "GPL (>= 2) | file LICENSE", - "URL": "https://rstudio.github.io/httpuv/, https://github.com/rstudio/httpuv", - "BugReports": "https://github.com/rstudio/httpuv/issues", - "Depends": [ - "R (>= 2.15.1)" - ], - "Imports": [ - "later (>= 0.8.0)", - "promises", - "R6", - "Rcpp (>= 1.0.7)", - "utils" - ], - "Suggests": [ - "callr", - "curl", - "jsonlite", - "testthat (>= 3.0.0)", - "websocket" - ], - "LinkingTo": [ - "later", - "Rcpp" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-07-01", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "GNU make, zlib", - "Collate": "'RcppExports.R' 'httpuv-package.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC [cph, fnd] (ROR: ), Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "httr": { - "Package": "httr", - "Version": "1.4.8", - "Source": "Repository", - "Title": "Tools for Working with URLs and HTTP", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", - "License": "MIT + file LICENSE", - "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", - "BugReports": "https://github.com/r-lib/httr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "curl (>= 5.1.0)", - "jsonlite", - "mime", - "openssl (>= 0.8)", - "R6" - ], - "Suggests": [ - "covr", - "httpuv", - "jpeg", - "knitr", - "png", - "readr", - "rmarkdown", - "testthat (>= 0.8.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "isoband": { - "Package": "isoband", - "Version": "0.3.0", - "Source": "Repository", - "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.", - "License": "MIT + file LICENSE", - "URL": "https://isoband.r-lib.org, https://github.com/r-lib/isoband", - "BugReports": "https://github.com/r-lib/isoband/issues", - "Imports": [ - "cli", - "grid", - "rlang", - "utils" - ], - "Suggests": [ - "covr", - "ggplot2", - "knitr", - "magick", - "bench", - "rmarkdown", - "sf", - "testthat (>= 3.0.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-12-05", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Config/build/compilation-database": "true", - "LinkingTo": [ - "cpp11" - ], - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut] (ORCID: ), Claus O. Wilke [aut] (Original author, ORCID: ), Thomas Lin Pedersen [aut, cre] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Title": "Obtain 'jQuery' as an HTML Dependency Object", - "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", - "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "RoxygenNote": "7.0.2", - "Imports": [ - "htmltools" - ], - "Suggests": [ - "testthat" - ], - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "2.0.0", - "Source": "Repository", - "Title": "A Simple and Robust JSON Parser and Generator for R", - "License": "MIT + file LICENSE", - "Depends": [ - "methods" - ], - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", - "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", - "BugReports": "https://github.com/jeroen/jsonlite/issues", - "Maintainer": "Jeroen Ooms ", - "VignetteBuilder": "knitr, R.rsp", - "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", - "Suggests": [ - "httr", - "vctrs", - "testthat", - "knitr", - "rmarkdown", - "R.rsp", - "sf" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", - "Repository": "CRAN" - }, - "knitr": { - "Package": "knitr", - "Version": "1.51", - "Source": "Repository", - "Type": "Package", - "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "evaluate (>= 0.15)", - "highr (>= 0.11)", - "methods", - "tools", - "xfun (>= 0.52)", - "yaml (>= 2.1.19)" - ], - "Suggests": [ - "bslib", - "DBI (>= 0.4-1)", - "digest", - "formatR", - "gifski", - "gridSVG", - "htmlwidgets (>= 0.7)", - "jpeg", - "JuliaCall (>= 0.11.1)", - "magick", - "litedown", - "markdown (>= 1.3)", - "otel", - "otelsdk", - "png", - "ragg", - "reticulate (>= 1.4)", - "rgl (>= 0.95.1201)", - "rlang", - "rmarkdown", - "sass", - "showtext", - "styler (>= 1.2.0)", - "targets (>= 0.6.0)", - "testit", - "tibble", - "tikzDevice (>= 0.10)", - "tinytex (>= 0.56)", - "webshot", - "rstudioapi", - "svglite" - ], - "License": "GPL", - "URL": "https://yihui.org/knitr/", - "BugReports": "https://github.com/yihui/knitr/issues", - "Encoding": "UTF-8", - "VignetteBuilder": "litedown, knitr", - "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Type": "Package", - "Title": "Axis Labeling", - "Date": "2023-08-29", - "Author": "Justin Talbot,", - "Maintainer": "Nuno Sempere ", - "Description": "Functions which provide a range of axis labeling algorithms.", - "License": "MIT + file LICENSE | Unlimited", - "Collate": "'labeling.R'", - "NeedsCompilation": "no", - "Imports": [ - "stats", - "graphics" - ], - "Repository": "CRAN" - }, - "later": { - "Package": "later", - "Version": "1.4.8", - "Source": "Repository", - "Type": "Package", - "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", - "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", - "License": "MIT + file LICENSE", - "URL": "https://later.r-lib.org, https://github.com/r-lib/later", - "BugReports": "https://github.com/r-lib/later/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "Rcpp (>= 1.0.10)", - "rlang" - ], - "Suggests": [ - "knitr", - "nanonext", - "promises", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "Rcpp" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-07-18", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], Charlie Gao [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", - "Maintainer": "Charlie Gao ", - "Repository": "CRAN" - }, - "lattice": { - "Package": "lattice", - "Version": "0.22-9", - "Source": "Repository", - "Date": "2026-02-03", - "Priority": "recommended", - "Title": "Trellis Graphics for R", - "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )", - "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "KernSmooth", - "MASS", - "latticeExtra", - "colorspace" - ], - "Imports": [ - "grid", - "grDevices", - "graphics", - "stats", - "utils" - ], - "Enhances": [ - "chron", - "zoo" - ], - "LazyLoad": "yes", - "LazyData": "yes", - "License": "GPL (>= 2)", - "URL": "https://lattice.r-forge.r-project.org/", - "BugReports": "https://github.com/deepayan/lattice/issues", - "NeedsCompilation": "yes", - "Author": "Deepayan Sarkar [aut, cre] (ORCID: ), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", - "Maintainer": "Deepayan Sarkar ", - "Repository": "CRAN" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Title": "Lazy (Non-Standard) Evaluation", - "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", - "License": "GPL-3", - "LazyData": "true", - "Depends": [ - "R (>= 3.1.0)" - ], - "Suggests": [ - "knitr", - "rmarkdown (>= 0.2.65)", - "testthat", - "covr" - ], - "VignetteBuilder": "knitr", - "RoxygenNote": "6.1.1", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], RStudio [cph]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.5", - "Source": "Repository", - "Title": "Manage the Life Cycle of your Package Functions", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", - "License": "MIT + file LICENSE", - "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", - "BugReports": "https://github.com/r-lib/lifecycle/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "covr", - "knitr", - "lintr (>= 3.1.0)", - "rmarkdown", - "testthat (>= 3.0.1)", - "tibble", - "tidyverse", - "tools", - "vctrs", - "withr", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, usethis", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "lme4": { - "Package": "lme4", - "Version": "2.0-1", - "Source": "Repository", - "Title": "Linear Mixed-Effects Models using 'Eigen' and S4", - "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Ben\", \"Bolker\", role = c(\"cre\", \"aut\"), email = \"bbolker+lme4@gmail.com\", comment = c(ORCID = \"0000-0002-2127-0443\")), person(\"Steven\", \"Walker\", role = \"aut\", comment = c(ORCID = \"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\", \"Christensen\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4494-3399\")), person(\"Henrik\", \"Singmann\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Peter\", \"Green\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role = \"ctb\"), person(\"Alexander\", \"Bauer\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", role = \"ctb\", comment = c(ORCID = \"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"aut\", comment = c(ORCID = \"0000-0002-0210-0342\")))", - "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", - "Depends": [ - "R (>= 3.6)", - "Matrix", - "methods", - "stats" - ], - "LinkingTo": [ - "Matrix (>= 1.5-0)", - "Rcpp (>= 0.10.5)", - "RcppEigen (>= 0.3.3.9.4)" - ], - "Imports": [ - "MASS", - "Rdpack", - "boot", - "graphics", - "grid", - "lattice", - "minqa (>= 1.1.15)", - "nlme (>= 3.1-123)", - "nloptr (>= 1.0.4)", - "parallel", - "reformulas (>= 0.4.3.1)", - "rlang", - "splines", - "utils" - ], - "Suggests": [ - "HSAUR3", - "MEMSS", - "car", - "dfoptim", - "gamm4", - "ggplot2", - "glmmTMB", - "knitr", - "merDeriv", - "mgcv", - "mlmRev", - "numDeriv", - "optimx (>= 2013.8.6)", - "pbkrtest", - "rmarkdown", - "rr2", - "semEff", - "statmod", - "testthat (>= 0.8.1)", - "tibble" - ], - "Enhances": [ - "DHARMa", - "performance" - ], - "RdMacros": "Rdpack", - "VignetteBuilder": "knitr", - "LazyData": "yes", - "License": "GPL (>= 2)", - "URL": "https://github.com/lme4/lme4/", - "BugReports": "https://github.com/lme4/lme4/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [cre, aut] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [aut] (ORCID: )", - "Maintainer": "Ben Bolker ", - "Repository": "CRAN" - }, - "lmtest": { - "Package": "lmtest", - "Version": "0.9-40", - "Source": "Repository", - "Title": "Testing Linear Regression Models", - "Date": "2022-03-21", - "Authors@R": "c(person(given = \"Torsten\", family = \"Hothorn\", role = \"aut\", email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = c(\"Richard\", \"W.\"), family = \"Farebrother\", role = \"aut\", comment = \"pan.f\"), person(given = \"Clint\", family = \"Cummins\", role = \"aut\", comment = \"pan.f\"), person(given = \"Giovanni\", family = \"Millo\", role = \"ctb\"), person(given = \"David\", family = \"Mitchell\", role = \"ctb\"))", - "Description": "A collection of tests, data sets, and examples for diagnostic checking in linear regression models. Furthermore, some generic tools for inference in parametric models are provided.", - "LazyData": "yes", - "Depends": [ - "R (>= 3.0.0)", - "stats", - "zoo" - ], - "Suggests": [ - "car", - "strucchange", - "sandwich", - "dynlm", - "stats4", - "survival", - "AER" - ], - "Imports": [ - "graphics" - ], - "License": "GPL-2 | GPL-3", - "NeedsCompilation": "yes", - "Author": "Torsten Hothorn [aut] (), Achim Zeileis [aut, cre] (), Richard W. Farebrother [aut] (pan.f), Clint Cummins [aut] (pan.f), Giovanni Millo [ctb], David Mitchell [ctb]", - "Maintainer": "Achim Zeileis ", - "Repository": "CRAN" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.4", - "Source": "Repository", - "Type": "Package", - "Title": "A Forward-Pipe Operator for R", - "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"cre\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", - "License": "MIT + file LICENSE", - "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", - "BugReports": "https://github.com/tidyverse/magrittr/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Suggests": [ - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "Yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Title": "'Memoisation' of Functions", - "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", - "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", - "License": "MIT + file LICENSE", - "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", - "BugReports": "https://github.com/r-lib/memoise/issues", - "Imports": [ - "rlang (>= 0.4.10)", - "cachem" - ], - "Suggests": [ - "digest", - "aws.s3", - "covr", - "googleAuthR", - "googleCloudStorageR", - "httr", - "testthat" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "mgcv": { - "Package": "mgcv", - "Version": "1.9-4", - "Source": "Repository", - "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", - "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", - "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2025) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", - "Priority": "recommended", - "Depends": [ - "R (>= 4.4.0)", - "nlme (>= 3.1-64)" - ], - "Imports": [ - "methods", - "stats", - "graphics", - "Matrix", - "splines", - "utils" - ], - "Suggests": [ - "parallel", - "survival", - "MASS" - ], - "LazyLoad": "yes", - "ByteCompile": "yes", - "License": "GPL (>= 2)", - "NeedsCompilation": "yes", - "Author": "Simon Wood [aut, cre]", - "Maintainer": "Simon Wood ", - "Repository": "CRAN" - }, - "microbenchmark": { - "Package": "microbenchmark", - "Version": "1.5.0", - "Source": "Repository", - "Title": "Accurate Timing Functions", - "Description": "Provides infrastructure to accurately measure and compare the execution time of R expressions.", - "Authors@R": "c(person(\"Olaf\", \"Mersmann\", role=c(\"aut\")), person(\"Claudia\", \"Beleites\", role=c(\"ctb\")), person(\"Rainer\", \"Hurling\", role=c(\"ctb\")), person(\"Ari\", \"Friedman\", role=c(\"ctb\")), person(given=c(\"Joshua\",\"M.\"), family=\"Ulrich\", role=\"cre\", email=\"josh.m.ulrich@gmail.com\"))", - "URL": "https://github.com/joshuaulrich/microbenchmark/", - "BugReports": "https://github.com/joshuaulrich/microbenchmark/issues/", - "License": "BSD_2_clause + file LICENSE", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "graphics", - "stats" - ], - "Suggests": [ - "ggplot2", - "multcomp", - "RUnit" - ], - "SystemRequirements": "On a Unix-alike, one of the C functions mach_absolute_time (macOS), clock_gettime or gethrtime. If none of these is found, the obsolescent POSIX function gettimeofday will be tried.", - "ByteCompile": "yes", - "NeedsCompilation": "yes", - "Author": "Olaf Mersmann [aut], Claudia Beleites [ctb], Rainer Hurling [ctb], Ari Friedman [ctb], Joshua M. Ulrich [cre]", - "Maintainer": "Joshua M. Ulrich ", - "Repository": "CRAN" - }, - "mime": { - "Package": "mime", - "Version": "0.13", - "Source": "Repository", - "Type": "Package", - "Title": "Map Filenames to MIME Types", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", - "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", - "Imports": [ - "tools" - ], - "License": "GPL", - "URL": "https://github.com/yihui/mime", - "BugReports": "https://github.com/yihui/mime/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "minqa": { - "Package": "minqa", - "Version": "1.2.8", - "Source": "Repository", - "Type": "Package", - "Title": "Derivative-Free Optimization Algorithms by Quadratic Approximation", - "Authors@R": "c(person(given = \"Douglas\", family = \"Bates\", role = \"aut\"), person(given = c(\"Katharine\", \"M.\"), family = \"Mullen\", role = c(\"aut\", \"cre\"), email = \"katharine.mullen@stat.ucla.edu\"), person(given = c(\"John\", \"C.\"), family = \"Nash\", role = \"aut\"), person(given = \"Ravi\", family = \"Varadhan\", role = \"aut\"))", - "Maintainer": "Katharine M. Mullen ", - "Description": "Derivative-free optimization by quadratic approximation based on an interface to Fortran implementations by M. J. D. Powell.", - "License": "GPL-2", - "URL": "http://optimizer.r-forge.r-project.org", - "Imports": [ - "Rcpp (>= 0.9.10)" - ], - "LinkingTo": [ - "Rcpp" - ], - "SystemRequirements": "GNU make", - "NeedsCompilation": "yes", - "Repository": "CRAN", - "Author": "Douglas Bates [aut], Katharine M. Mullen [aut, cre], John C. Nash [aut], Ravi Varadhan [aut]" - }, - "modelr": { - "Package": "modelr", - "Version": "0.1.11", - "Source": "Repository", - "Title": "Modelling Functions that Work with the Pipe", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Functions for modelling that help you seamlessly integrate modelling into a pipeline of data manipulation and visualisation.", - "License": "GPL-3", - "URL": "https://modelr.tidyverse.org, https://github.com/tidyverse/modelr", - "BugReports": "https://github.com/tidyverse/modelr/issues", - "Depends": [ - "R (>= 3.2)" - ], - "Imports": [ - "broom", - "magrittr", - "purrr (>= 0.2.2)", - "rlang (>= 1.0.6)", - "tibble", - "tidyr (>= 0.8.0)", - "tidyselect", - "vctrs" - ], - "Suggests": [ - "compiler", - "covr", - "ggplot2", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "multcomp": { - "Package": "multcomp", - "Version": "1.4-30", - "Source": "Repository", - "Title": "Simultaneous Inference in General Parametric Models", - "Date": "2026-03-09", - "Authors@R": "c(person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Peter\", \"Westfall\", role = \"aut\"), person(\"Richard M.\", \"Heiberger\", role = \"ctb\"), person(\"Andre\", \"Schuetzenmeister\", role = \"ctb\"), person(\"Susan\", \"Scheibe\", role = \"ctb\"), person(\"Christian\", \"Ritz\", role = \"ctb\"), person(\"Christian B.\", \"Pipper\", role = \"ctb\"))", - "Description": "Simultaneous tests and confidence intervals for general linear hypotheses in parametric models, including linear, generalized linear, linear mixed effects, and survival models. The package includes demos reproducing analyzes presented in the book \"Multiple Comparisons Using R\" (Bretz, Hothorn, Westfall, 2010, CRC Press).", - "Depends": [ - "stats", - "graphics", - "mvtnorm (>= 1.0-10)", - "survival (>= 2.39-4)", - "TH.data (>= 1.0-2)" - ], - "Imports": [ - "sandwich (>= 2.3-0)", - "codetools" - ], - "Suggests": [ - "lme4 (>= 0.999375-16)", - "nlme", - "robustbase", - "coin", - "MASS", - "foreign", - "xtable", - "lmtest", - "coxme (>= 2.2-1)", - "SimComp", - "ISwR", - "tram (>= 0.2-5)", - "fixest (>= 0.10)", - "glmmTMB", - "DoseFinding", - "HH", - "asd", - "gsDesign", - "lattice", - "bibtex" - ], - "URL": "http://multcomp.R-forge.R-project.org, https://www.routledge.com/Multiple-Comparisons-Using-R/Bretz-Hothorn-Westfall/p/book/9781584885740", - "LazyData": "yes", - "License": "GPL-2", - "NeedsCompilation": "no", - "Author": "Torsten Hothorn [aut, cre] (ORCID: ), Frank Bretz [aut], Peter Westfall [aut], Richard M. Heiberger [ctb], Andre Schuetzenmeister [ctb], Susan Scheibe [ctb], Christian Ritz [ctb], Christian B. Pipper [ctb]", - "Maintainer": "Torsten Hothorn ", - "Repository": "CRAN" - }, - "mvtnorm": { - "Package": "mvtnorm", - "Version": "1.3-6", - "Source": "Repository", - "Title": "Multivariate Normal and t Distributions", - "Date": "2026-03-13", - "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", - "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", - "Imports": [ - "stats" - ], - "Depends": [ - "R(>= 3.5.0)" - ], - "Suggests": [ - "qrng", - "numDeriv", - "bibtex" - ], - "License": "GPL-2", - "URL": "http://mvtnorm.R-forge.R-project.org", - "NeedsCompilation": "yes", - "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", - "Maintainer": "Torsten Hothorn ", - "Repository": "CRAN" - }, - "nlme": { - "Package": "nlme", - "Version": "3.1-169", - "Source": "Repository", - "Date": "2026-03-27", - "Priority": "recommended", - "Title": "Linear and Nonlinear Mixed Effects Models", - "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"), person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"), person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"), person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"), person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"), person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"), person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"), person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"), person(\"R Core Team\", email = \"R-core@R-project.org\", role = c(\"aut\", \"cre\"), comment = c(ROR = \"02zz1nj61\")))", - "Contact": "see 'MailingList'", - "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "graphics", - "stats", - "utils", - "lattice" - ], - "Suggests": [ - "MASS", - "SASmixed" - ], - "LazyData": "yes", - "Encoding": "UTF-8", - "License": "GPL (>= 2)", - "BugReports": "https://bugs.r-project.org", - "MailingList": "R-help@r-project.org", - "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", - "NeedsCompilation": "yes", - "Author": "José Pinheiro [aut] (S version), Douglas Bates [aut] (up to 2007), Saikat DebRoy [ctb] (up to 2002), Deepayan Sarkar [ctb] (up to 2005), EISPACK authors [ctb] (src/rs.f), Siem Heisterkamp [ctb] (Author fixed sigma), Bert Van Willigen [ctb] (Programmer fixed sigma), Johannes Ranke [ctb] (varConstProp()), R Core Team [aut, cre] (ROR: )", - "Maintainer": "R Core Team ", - "Repository": "CRAN" - }, - "nloptr": { - "Package": "nloptr", - "Version": "2.2.1", - "Source": "Repository", - "Type": "Package", - "Title": "R Interface to NLopt", - "Authors@R": "c(person(\"Jelmer\", \"Ypma\", role = \"aut\", email = \"uctpjyy@ucl.ac.uk\"), person(c(\"Steven\", \"G.\"), \"Johnson\", role = \"aut\", comment = \"author of the NLopt C library\"), person(\"Aymeric\", \"Stamm\", role = c(\"ctb\", \"cre\"), email = \"aymeric.stamm@cnrs.fr\", comment = c(ORCID = \"0000-0002-8725-3654\")), person(c(\"Hans\", \"W.\"), \"Borchers\", role = \"ctb\", email = \"hwborchers@googlemail.com\"), person(\"Dirk\", \"Eddelbuettel\", role = \"ctb\", email = \"edd@debian.org\"), person(\"Brian\", \"Ripley\", role = \"ctb\", comment = \"build process on multiple OS\"), person(\"Kurt\", \"Hornik\", role = \"ctb\", comment = \"build process on multiple OS\"), person(\"Julien\", \"Chiquet\", role = \"ctb\"), person(\"Avraham\", \"Adler\", role = \"ctb\", email = \"Avraham.Adler@gmail.com\", comment = c(ORCID = \"0000-0002-3039-0703\")), person(\"Xiongtao\", \"Dai\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\", email = \"jeroen@berkeley.edu\"), person(\"Tomas\", \"Kalibera\", role = \"ctb\"), person(\"Mikael\", \"Jagan\", role = \"ctb\"))", - "Description": "Solve optimization problems using an R interface to NLopt. NLopt is a free/open-source library for nonlinear optimization, providing a common interface for a number of different free optimization routines available online as well as original implementations of various other algorithms. See for more information on the available algorithms. Building from included sources requires 'CMake'. On Linux and 'macOS', if a suitable system build of NLopt (2.7.0 or later) is found, it is used; otherwise, it is built from included sources via 'CMake'. On Windows, NLopt is obtained through 'rwinlib' for 'R <= 4.1.x' or grabbed from the appropriate toolchain for 'R >= 4.2.0'.", - "License": "LGPL (>= 3)", - "SystemRequirements": "cmake (>= 3.2.0) which is used only on Linux or macOS systems when no system build of nlopt (>= 2.7.0) can be found.", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Suggests": [ - "knitr", - "rmarkdown", - "covr", - "tinytest" - ], - "VignetteBuilder": "knitr", - "URL": "https://github.com/astamm/nloptr, https://astamm.github.io/nloptr/", - "BugReports": "https://github.com/astamm/nloptr/issues", - "NeedsCompilation": "yes", - "UseLTO": "yes", - "Author": "Jelmer Ypma [aut], Steven G. Johnson [aut] (author of the NLopt C library), Aymeric Stamm [ctb, cre] (), Hans W. Borchers [ctb], Dirk Eddelbuettel [ctb], Brian Ripley [ctb] (build process on multiple OS), Kurt Hornik [ctb] (build process on multiple OS), Julien Chiquet [ctb], Avraham Adler [ctb] (), Xiongtao Dai [ctb], Jeroen Ooms [ctb], Tomas Kalibera [ctb], Mikael Jagan [ctb]", - "Maintainer": "Aymeric Stamm ", - "Repository": "CRAN" - }, - "nnet": { - "Package": "nnet", - "Version": "7.3-20", - "Source": "Repository", - "Priority": "recommended", - "Date": "2025-01-01", - "Depends": [ - "R (>= 3.0.0)", - "stats", - "utils" - ], - "Suggests": [ - "MASS" - ], - "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"William\", \"Venables\", role = \"cph\"))", - "Description": "Software for feed-forward neural networks with a single hidden layer, and for multinomial log-linear models.", - "Title": "Feed-Forward Neural Networks and Multinomial Log-Linear Models", - "ByteCompile": "yes", - "License": "GPL-2 | GPL-3", - "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", - "NeedsCompilation": "yes", - "Author": "Brian Ripley [aut, cre, cph], William Venables [cph]", - "Maintainer": "Brian Ripley ", - "Repository": "CRAN" - }, - "numDeriv": { - "Package": "numDeriv", - "Version": "2016.8-1.1", - "Source": "Repository", - "Title": "Accurate Numerical Derivatives", - "Description": "Methods for calculating (usually) accurate numerical first and second order derivatives. Accurate calculations are done using 'Richardson''s' extrapolation or, when applicable, a complex step derivative is available. A simple difference method is also provided. Simple difference is (usually) less accurate but is much quicker than 'Richardson''s' extrapolation and provides a useful cross-check. Methods are provided for real scalar and vector valued functions.", - "Depends": [ - "R (>= 2.11.1)" - ], - "LazyLoad": "yes", - "ByteCompile": "yes", - "License": "GPL-2", - "Copyright": "2006-2011, Bank of Canada. 2012-2016, Paul Gilbert", - "Author": "Paul Gilbert and Ravi Varadhan", - "Maintainer": "Paul Gilbert ", - "URL": "http://optimizer.r-forge.r-project.org/", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "openssl": { - "Package": "openssl", - "Version": "2.3.5", - "Source": "Repository", - "Type": "Package", - "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", - "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/openssl", - "BugReports": "https://github.com/jeroen/openssl/issues", - "SystemRequirements": "OpenSSL >= 1.0.2", - "VignetteBuilder": "knitr", - "Imports": [ - "askpass" - ], - "Suggests": [ - "curl", - "testthat (>= 2.1.0)", - "digest", - "knitr", - "rmarkdown", - "jsonlite", - "jose", - "sodium" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "otel": { - "Package": "otel", - "Version": "0.2.0", - "Source": "Repository", - "Title": "OpenTelemetry R API", - "Authors@R": "person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\"))", - "Description": "High-quality, ubiquitous, and portable telemetry to enable effective observability. OpenTelemetry is a collection of tools, APIs, and SDKs used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior. This package implements the OpenTelemetry API: . Use this package as a dependency if you want to instrument your R package for OpenTelemetry.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "callr", - "cli", - "glue", - "jsonlite", - "otelsdk", - "processx", - "shiny", - "spelling", - "testthat (>= 3.0.0)", - "utils", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "URL": "https://otel.r-lib.org, https://github.com/r-lib/otel", - "Additional_repositories": "https://github.com/r-lib/otelsdk/releases/download/devel", - "BugReports": "https://github.com/r-lib/otel/issues", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "pbkrtest": { - "Package": "pbkrtest", - "Version": "0.5.5", - "Source": "Repository", - "Title": "Parametric Bootstrap, Kenward-Roger and Satterthwaite Based Methods for Test in Mixed Models", - "Authors@R": "c( person(given = \"Ulrich\", family = \"Halekoh\", email = \"uhalekoh@health.sdu.dk\", role = c(\"aut\", \"cph\")), person(given = \"Søren\", family = \"Højsgaard\", email = \"sorenh@math.aau.dk\", role = c(\"aut\", \"cre\", \"cph\")) )", - "Maintainer": "Søren Højsgaard ", - "Description": "Computes p-values based on (a) Satterthwaite or Kenward-Rogers degree of freedom methods and (b) parametric bootstrap for mixed effects models as implemented in the 'lme4' package. Implements parametric bootstrap test for generalized linear mixed models as implemented in 'lme4' and generalized linear models. The package is documented in the paper by Halekoh and Højsgaard, (2012, ). Please see 'citation(\"pbkrtest\")' for citation details.", - "URL": "https://people.math.aau.dk/~sorenh/software/pbkrtest/", - "Depends": [ - "R (>= 4.2.0)", - "lme4 (>= 1.1.31)" - ], - "Imports": [ - "broom", - "dplyr", - "MASS", - "methods", - "numDeriv", - "Matrix (>= 1.2.3)", - "doBy (>= 4.6.22)" - ], - "Suggests": [ - "nlme", - "markdown", - "knitr" - ], - "Encoding": "UTF-8", - "VignetteBuilder": "knitr", - "License": "GPL (>= 2)", - "ByteCompile": "Yes", - "RoxygenNote": "7.3.2", - "LazyData": "true", - "NeedsCompilation": "no", - "Author": "Ulrich Halekoh [aut, cph], Søren Højsgaard [aut, cre, cph]", - "Repository": "CRAN" - }, - "pillar": { - "Package": "pillar", - "Version": "1.11.1", - "Source": "Repository", - "Title": "Coloured Formatting for Columns", - "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", - "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", - "License": "MIT + file LICENSE", - "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", - "BugReports": "https://github.com/r-lib/pillar/issues", - "Imports": [ - "cli (>= 2.3.0)", - "glue", - "lifecycle", - "rlang (>= 1.0.2)", - "utf8 (>= 1.1.0)", - "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bit64", - "DBI", - "debugme", - "DiagrammeR", - "dplyr", - "formattable", - "ggplot2", - "knitr", - "lubridate", - "nanotime", - "nycflights13", - "palmerpenguins", - "rmarkdown", - "scales", - "stringi", - "survival", - "testthat (>= 3.1.1)", - "tibble", - "units (>= 0.7.2)", - "vdiffr", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Title": "Private Configuration for 'R' Packages", - "Author": "Gábor Csárdi", - "Maintainer": "Gábor Csárdi ", - "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "Imports": [ - "utils" - ], - "Suggests": [ - "covr", - "testthat", - "disposables (>= 1.0.3)" - ], - "URL": "https://github.com/r-lib/pkgconfig#readme", - "BugReports": "https://github.com/r-lib/pkgconfig/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "plotly": { - "Package": "plotly", - "Version": "4.12.0", - "Source": "Repository", - "Title": "Create Interactive Web Graphics via 'plotly.js'", - "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Chris\", \"Parmer\", role = \"aut\", email = \"chris@plot.ly\"), person(\"Toby\", \"Hocking\", role = \"aut\", email = \"tdhock5@gmail.com\"), person(\"Scott\", \"Chamberlain\", role = \"aut\", email = \"myrmecocystus@gmail.com\"), person(\"Karthik\", \"Ram\", role = \"aut\", email = \"karthik.ram@gmail.com\"), person(\"Marianne\", \"Corvellec\", role = \"aut\", email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")), person(\"Pedro\", \"Despouy\", role = \"aut\", email = \"pedro@plot.ly\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Plotly Technologies Inc.\", role = \"cph\"))", - "License": "MIT + file LICENSE", - "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.", - "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R, https://plotly.com/r/", - "BugReports": "https://github.com/plotly/plotly.R/issues", - "Depends": [ - "R (>= 3.5.0)", - "ggplot2 (>= 3.0.0)" - ], - "Imports": [ - "tools", - "scales", - "httr (>= 1.3.0)", - "jsonlite (>= 1.6)", - "magrittr", - "digest", - "viridisLite", - "base64enc", - "htmltools (>= 0.3.6)", - "htmlwidgets (>= 1.5.2.9001)", - "tidyr (>= 1.0.0)", - "RColorBrewer", - "dplyr", - "vctrs", - "tibble", - "lazyeval (>= 0.2.0)", - "rlang (>= 1.0.0)", - "crosstalk", - "purrr", - "data.table", - "promises" - ], - "Suggests": [ - "MASS", - "maps", - "hexbin", - "ggthemes", - "GGally", - "ggalluvial", - "testthat", - "knitr", - "shiny (>= 1.1.0)", - "shinytest2", - "curl", - "rmarkdown", - "Cairo", - "broom", - "webshot", - "listviewer", - "dendextend", - "sf", - "png", - "IRdisplay", - "processx", - "plotlyGeoAssets", - "forcats", - "withr", - "palmerpenguins", - "rversions", - "reticulate", - "rsvg", - "ggridges" - ], - "LazyData": "true", - "RoxygenNote": "7.3.3", - "Encoding": "UTF-8", - "Config/Needs/check": "tidyverse/ggplot2, ggobi/GGally, rcmdcheck, devtools, reshape2, s2", - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (ORCID: ), Chris Parmer [aut], Toby Hocking [aut], Scott Chamberlain [aut], Karthik Ram [aut], Marianne Corvellec [aut] (ORCID: ), Pedro Despouy [aut], Salim Brüggemann [ctb] (ORCID: ), Plotly Technologies Inc. [cph]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "plotrix": { - "Package": "plotrix", - "Version": "3.8-14", - "Source": "Repository", - "Title": "Various Plotting Functions", - "Authors@R": "c( person(\"Jim\", \"Lemon\", role = \"aut\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Sander\", \"Oom\", role = \"ctb\"), person(\"Eduardo\", \"Klein\", role = \"ctb\"), person(\"Barry\", \"Rowlingson\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Anupam\", \"Tyagi\", role = \"ctb\"), person(\"Olivier\", \"Eterradossi\", role = \"ctb\"), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Michael\", \"Toews\", role = \"ctb\"), person(\"John\", \"Kane\", role = \"ctb\"), person(\"Rolf\", \"Turner\", role = \"ctb\"), person(\"Carl\", \"Witthoft\", role = \"ctb\"), person(\"Julian\", \"Stander\", role = \"ctb\"), person(\"Thomas\", \"Petzoldt\", role = \"ctb\"), person(\"Remko\", \"Duursma\", role = \"ctb\"), person(\"Elisa\", \"Biancotto\", role = \"ctb\"), person(\"Ofir\", \"Levy\", role = \"ctb\"), person(\"Christophe\", \"Dutang\", role = \"ctb\"), person(\"Peter\", \"Solymos\", role = \"ctb\"), person(\"Robby\", \"Engelmann\", role = \"ctb\"), person(\"Michael\", \"Hecker\", role = \"ctb\"), person(\"Felix\", \"Steinbeck\", role = \"ctb\"), person(\"Hans\", \"Borchers\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"), person(\"Ted\", \"Toal\", role = \"ctb\"), person(\"Derek\", \"Ogle\", role = \"ctb\"), person(\"Darshan\", \"Baral\", role = \"ctb\"), person(\"Ulrike\", \"Groemping\", role = \"ctb\"), person(\"Bill\", \"Venables\", role = \"ctb\"), person(family = \"The CRAN Team\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", email = \"murdoch.duncan@gmail.com\", role = c(\"ctb\", \"cre\")))", - "Imports": [ - "grDevices", - "graphics", - "stats", - "utils" - ], - "Description": "Lots of plots, various labeling, axis and color scaling functions. The author/maintainer died in September 2023.", - "License": "GPL (>= 2)", - "NeedsCompilation": "no", - "Depends": [ - "R (>= 3.5.0)" - ], - "Repository": "CRAN", - "URL": "https://plotrix.github.io/plotrix/, https://github.com/plotrix/plotrix", - "BugReports": "https://github.com/plotrix/plotrix/issues", - "Author": "Jim Lemon [aut], Ben Bolker [ctb], Sander Oom [ctb], Eduardo Klein [ctb], Barry Rowlingson [ctb], Hadley Wickham [ctb], Anupam Tyagi [ctb], Olivier Eterradossi [ctb], Gabor Grothendieck [ctb], Michael Toews [ctb], John Kane [ctb], Rolf Turner [ctb], Carl Witthoft [ctb], Julian Stander [ctb], Thomas Petzoldt [ctb], Remko Duursma [ctb], Elisa Biancotto [ctb], Ofir Levy [ctb], Christophe Dutang [ctb], Peter Solymos [ctb], Robby Engelmann [ctb], Michael Hecker [ctb], Felix Steinbeck [ctb], Hans Borchers [ctb], Henrik Singmann [ctb], Ted Toal [ctb], Derek Ogle [ctb], Darshan Baral [ctb], Ulrike Groemping [ctb], Bill Venables [ctb], The CRAN Team [ctb], Duncan Murdoch [ctb, cre]", - "Maintainer": "Duncan Murdoch " - }, - "pracma": { - "Package": "pracma", - "Version": "2.4.6", - "Source": "Repository", - "Type": "Package", - "Date": "2025-10-20", - "Title": "Practical Numerical Math Functions", - "Authors@R": "person(\"Hans W.\", \"Borchers\", email=\"hwborchers@googlemail.com\", role=c(\"aut\", \"cre\"))", - "Depends": [ - "R (>= 3.1.0)" - ], - "Imports": [ - "graphics", - "grDevices", - "stats", - "utils" - ], - "Suggests": [ - "NlcOptim", - "quadprog" - ], - "Description": "Provides a large number of functions from numerical analysis and linear algebra, numerical optimization, differential equations, time series, plus some well-known special mathematical functions. Uses 'MATLAB' function names where appropriate to simplify porting.", - "License": "GPL (>= 3)", - "ByteCompile": "true", - "LazyData": "yes", - "NeedsCompilation": "no", - "Author": "Hans W. Borchers [aut, cre]", - "Maintainer": "Hans W. Borchers ", - "Repository": "CRAN" - }, - "promises": { - "Package": "promises", - "Version": "1.5.0", - "Source": "Repository", - "Type": "Package", - "Title": "Abstractions for Promise-Based Asynchronous Programming", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", - "BugReports": "https://github.com/rstudio/promises/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "fastmap (>= 1.1.0)", - "later", - "lifecycle", - "magrittr (>= 1.5)", - "otel (>= 0.2.0)", - "R6", - "rlang" - ], - "Suggests": [ - "future (>= 1.21.0)", - "knitr", - "mirai", - "otelsdk (>= 0.2.0)", - "purrr", - "Rcpp", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "vembedr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rsconnect, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-27", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Joe Cheng [aut], Barret Schloerke [aut, cre] (ORCID: ), Winston Chang [aut] (ORCID: ), Charlie Gao [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Barret Schloerke ", - "Repository": "CRAN" - }, - "purrr": { - "Package": "purrr", - "Version": "1.2.1", - "Source": "Repository", - "Title": "Functional Programming Tools", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "A complete and consistent functional programming toolkit for R.", - "License": "MIT + file LICENSE", - "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", - "BugReports": "https://github.com/tidyverse/purrr/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli (>= 3.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 1.5.0)", - "rlang (>= 1.1.1)", - "vctrs (>= 0.6.3)" - ], - "Suggests": [ - "carrier (>= 0.3.0)", - "covr", - "dplyr (>= 0.7.8)", - "httr", - "knitr", - "lubridate", - "mirai (>= 2.5.1)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble", - "tidyselect" - ], - "LinkingTo": [ - "cli" - ], - "VignetteBuilder": "knitr", - "Biarch": "true", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate, tidyr", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "quantreg": { - "Package": "quantreg", - "Version": "6.1", - "Source": "Repository", - "Title": "Quantile Regression", - "Description": "Estimation and inference methods for models for conditional quantile functions: Linear and nonlinear parametric and non-parametric (total variation penalized) models for conditional quantiles of a univariate response and several methods for handling censored survival data. Portfolio selection methods based on expected shortfall risk are also now included. See Koenker, R. (2005) Quantile Regression, Cambridge U. Press, and Koenker, R. et al. (2017) Handbook of Quantile Regression, CRC Press, .", - "Authors@R": "c( person(\"Roger\", \"Koenker\", role = c(\"cre\",\"aut\"), email = \"rkoenker@illinois.edu\"), person(\"Stephen\", \"Portnoy\", role = c(\"ctb\"), comment = \"Contributions to Censored QR code\", email = \"sportnoy@illinois.edu\"), person(c(\"Pin\", \"Tian\"), \"Ng\", role = c(\"ctb\"), comment = \"Contributions to Sparse QR code\", email = \"pin.ng@nau.edu\"), person(\"Blaise\", \"Melly\", role = c(\"ctb\"), comment = \"Contributions to preprocessing code\", email = \"mellyblaise@gmail.com\"), person(\"Achim\", \"Zeileis\", role = c(\"ctb\"), comment = \"Contributions to dynrq code essentially identical to his dynlm code\", email = \"Achim.Zeileis@uibk.ac.at\"), person(\"Philip\", \"Grosjean\", role = c(\"ctb\"), comment = \"Contributions to nlrq code\", email = \"phgrosjean@sciviews.org\"), person(\"Cleve\", \"Moler\", role = c(\"ctb\"), comment = \"author of several linpack routines\"), person(\"Yousef\", \"Saad\", role = c(\"ctb\"), comment = \"author of sparskit2\"), person(\"Victor\", \"Chernozhukov\", role = c(\"ctb\"), comment = \"contributions to extreme value inference code\"), person(\"Ivan\", \"Fernandez-Val\", role = c(\"ctb\"), comment = \"contributions to extreme value inference code\"), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(\"tweaks (src/chlfct.f, 'tiny','Large')\", ORCID = \"0000-0002-8685-9910\")), person(c(\"Brian\", \"D\"), \"Ripley\", role = c(\"trl\",\"ctb\"), comment = \"Initial (2001) R port from S (to my everlasting shame -- how could I have been so slow to adopt R!) and for numerous other suggestions and useful advice\", email = \"ripley@stats.ox.ac.uk\"))", - "Maintainer": "Roger Koenker ", - "Repository": "CRAN", - "Depends": [ - "R (>= 3.5)", - "stats", - "SparseM" - ], - "Imports": [ - "methods", - "graphics", - "Matrix", - "MatrixModels", - "survival", - "MASS" - ], - "Suggests": [ - "interp", - "rgl", - "logspline", - "nor1mix", - "Formula", - "zoo", - "R.rsp", - "conquer" - ], - "License": "GPL (>= 2)", - "URL": "https://www.r-project.org", - "NeedsCompilation": "yes", - "VignetteBuilder": "R.rsp", - "Author": "Roger Koenker [cre, aut], Stephen Portnoy [ctb] (Contributions to Censored QR code), Pin Tian Ng [ctb] (Contributions to Sparse QR code), Blaise Melly [ctb] (Contributions to preprocessing code), Achim Zeileis [ctb] (Contributions to dynrq code essentially identical to his dynlm code), Philip Grosjean [ctb] (Contributions to nlrq code), Cleve Moler [ctb] (author of several linpack routines), Yousef Saad [ctb] (author of sparskit2), Victor Chernozhukov [ctb] (contributions to extreme value inference code), Ivan Fernandez-Val [ctb] (contributions to extreme value inference code), Martin Maechler [ctb] (tweaks (src/chlfct.f, 'tiny','Large'), ), Brian D Ripley [trl, ctb] (Initial (2001) R port from S (to my everlasting shame -- how could I have been so slow to adopt R!) and for numerous other suggestions and useful advice)" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.4", - "Source": "Repository", - "Type": "Package", - "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"trl\", \"cre\", \"cph\")), person(\"Sridhar\", \"Ratnakumar\", role = \"aut\"), person(\"Trent\", \"Mick\", role = \"aut\"), person(\"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(\"Eddy\", \"Petrisor\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = c(\"trl\", \"aut\"), comment = c(ORCID = \"0000-0001-6341-4639\")), person(\"Gabor\", \"Csardi\", role = \"ctb\"), person(\"Gregory\", \"Jefferis\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", - "License": "MIT + file LICENSE", - "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", - "BugReports": "https://github.com/r-lib/rappdirs/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Suggests": [ - "covr", - "roxygen2", - "testthat (>= 3.2.0)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-05", - "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, Posit, PBC. See file LICENSE for details.", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [trl, cre, cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut] (ORCID: ), Gabor Csardi [ctb], Gregory Jefferis [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "rbibutils": { - "Package": "rbibutils", - "Version": "2.4.1", - "Source": "Repository", - "Type": "Package", - "Title": "Read 'Bibtex' Files and Convert Between Bibliography Formats", - "Authors@R": "c( person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"aut\", \"cre\"), \t email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\", \"R port, R code, new C code and modifications to bibutils' C code, conversion to Bibentry (R and C code)\") ), person(given = \"Chris\", family = \"Putman\", role = \"aut\", comment = \"src/*, author of the bibutils libraries, https://sourceforge.net/projects/bibutils/\"), person(given = \"Richard\", family = \"Mathar\", role = \"ctb\", comment = \"src/addsout.c\"), person(given = \"Johannes\", family = \"Wilm\", role = \"ctb\", comment = \"src/biblatexin.c, src/bltypes.c\"), person(\"R Core Team\", role = \"ctb\", comment = \"base R's bibentry and bibstyle implementation\") )", - "Description": "Read and write 'Bibtex' files. Convert between bibliography formats, including 'Bibtex', 'Biblatex', 'PubMed', 'Endnote', and 'Bibentry'. Includes a port of the 'bibutils' utilities by Chris Putnam . Supports all bibliography formats and character encodings implemented in 'bibutils'.", - "License": "GPL-2", - "URL": "https://geobosh.github.io/rbibutils/ (doc), https://CRAN.R-project.org/package=rbibutils", - "BugReports": "https://github.com/GeoBosh/rbibutils/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Imports": [ - "utils", - "tools" - ], - "Suggests": [ - "testthat" - ], - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Config/Needs/memcheck": "devtools, rcmdcheck", - "Author": "Georgi N. Boshnakov [aut, cre] (ORCID: , R port, R code, new C code and modifications to bibutils' C code, conversion to Bibentry (R and C code)), Chris Putman [aut] (src/*, author of the bibutils libraries, https://sourceforge.net/projects/bibutils/), Richard Mathar [ctb] (src/addsout.c), Johannes Wilm [ctb] (src/biblatexin.c, src/bltypes.c), R Core Team [ctb] (base R's bibentry and bibstyle implementation)", - "Maintainer": "Georgi N. Boshnakov ", - "Repository": "CRAN" - }, - "reformulas": { - "Package": "reformulas", - "Version": "0.4.4", - "Source": "Repository", - "Title": "Machinery for Processing Random Effect Formulas", - "Authors@R": "c( person(given = \"Ben\", family = \"Bolker\", role = c(\"aut\", \"cre\"), email = \"bolker@mcmaster.ca\", comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Anna\", \"Ly\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0210-0342\")) )", - "Description": "Takes formulas including random-effects components (formatted as in 'lme4', 'glmmTMB', etc.) and processes them. Includes various helper functions.", - "URL": "https://github.com/bbolker/reformulas", - "License": "GPL-3", - "Encoding": "UTF-8", - "Imports": [ - "stats", - "methods", - "Matrix", - "Rdpack" - ], - "RdMacros": "Rdpack", - "Suggests": [ - "lme4", - "tinytest", - "glmmTMB", - "Formula" - ], - "RoxygenNote": "7.3.3", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Ben Bolker [aut, cre] (ORCID: ), Anna Ly [ctb] (ORCID: )", - "Maintainer": "Ben Bolker ", - "Repository": "CRAN" - }, "renv": { "Package": "renv", "Version": "1.2.0", @@ -3389,542 +245,32 @@ "jsonlite", "jsonvalidate", "knitr", - "miniUI", - "modules", - "packrat", - "pak", - "R6", - "remotes", - "reticulate", - "rmarkdown", - "rstudioapi", - "shiny", - "testthat", - "uuid", - "waldo", - "yaml", - "webfakes" - ], - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "RoxygenNote": "7.3.3", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Kevin Ushey ", - "Repository": "CRAN" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.7", - "Source": "Repository", - "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", - "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", - "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "ByteCompile": "true", - "Biarch": "true", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "cli (>= 3.1.0)", - "covr", - "crayon", - "desc", - "fs", - "glue", - "knitr", - "magrittr", - "methods", - "pillar", - "pkgload", - "rmarkdown", - "stats", - "testthat (>= 3.2.0)", - "tibble", - "usethis", - "vctrs (>= 0.2.3)", - "withr" - ], - "Enhances": [ - "winch" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", - "BugReports": "https://github.com/r-lib/rlang/issues", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "dplyr, tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.31", - "Source": "Repository", - "Type": "Package", - "Title": "Dynamic Documents for R", - "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", - "Description": "Convert R Markdown documents into a variety of formats.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", - "BugReports": "https://github.com/rstudio/rmarkdown/issues", - "Depends": [ - "R (>= 3.0)" - ], - "Imports": [ - "bslib (>= 0.2.5.1)", - "evaluate (>= 0.13)", - "fontawesome (>= 0.5.0)", - "htmltools (>= 0.5.1)", - "jquerylib", - "jsonlite", - "knitr (>= 1.43)", - "methods", - "tinytex (>= 0.31)", - "tools", - "utils", - "xfun (>= 0.36)", - "yaml (>= 2.1.19)" - ], - "Suggests": [ - "digest", - "dygraphs", - "fs", - "rsconnect", - "downlit (>= 0.4.0)", - "katex (>= 1.4.0)", - "sass (>= 0.4.0)", - "shiny (>= 1.6.0)", - "testthat (>= 3.0.3)", - "tibble", - "vctrs", - "cleanrmd", - "withr (>= 2.4.2)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rstudio/quillt, pkgdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", - "NeedsCompilation": "no", - "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.18.0", - "Source": "Repository", - "Title": "Safely Access the RStudio API", - "Description": "Access the RStudio API (if available) and provide informative error messages when it's not.", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\"), person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@posit.co\"), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@posit.co\"), person(\"Gary\", \"Ritchie\", role = c(\"aut\"), email = \"gary@posit.co\"), person(family = \"RStudio\", role = \"cph\") )", - "Maintainer": "Kevin Ushey ", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/rstudioapi/, https://github.com/rstudio/rstudioapi", - "BugReports": "https://github.com/rstudio/rstudioapi/issues", - "RoxygenNote": "7.3.3", - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "clipr", - "covr", - "curl", - "jsonlite", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre], JJ Allaire [aut], Hadley Wickham [aut], Gary Ritchie [aut], RStudio [cph]", - "Repository": "CRAN" - }, - "sandwich": { - "Package": "sandwich", - "Version": "3.1-1", - "Source": "Repository", - "Date": "2024-09-16", - "Title": "Robust Covariance Matrix Estimators", - "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Thomas\", family = \"Lumley\", role = \"aut\", email = \"t.lumley@auckland.ac.nz\", comment = c(ORCID = \"0000-0003-4255-5437\")), person(given = \"Nathaniel\", family = \"Graham\", role = \"ctb\", email = \"npgraham1@gmail.com\", comment = c(ORCID = \"0009-0002-1215-5256\")), person(given = \"Susanne\", family = \"Koell\", role = \"ctb\"))", - "Description": "Object-oriented software for model-robust covariance matrix estimators. Starting out from the basic robust Eicker-Huber-White sandwich covariance methods include: heteroscedasticity-consistent (HC) covariances for cross-section data; heteroscedasticity- and autocorrelation-consistent (HAC) covariances for time series data (such as Andrews' kernel HAC, Newey-West, and WEAVE estimators); clustered covariances (one-way and multi-way); panel and panel-corrected covariances; outer-product-of-gradients covariances; and (clustered) bootstrap covariances. All methods are applicable to (generalized) linear model objects fitted by lm() and glm() but can also be adapted to other classes through S3 methods. Details can be found in Zeileis et al. (2020) , Zeileis (2004) and Zeileis (2006) .", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "stats", - "utils", - "zoo" - ], - "Suggests": [ - "AER", - "car", - "geepack", - "lattice", - "lme4", - "lmtest", - "MASS", - "multiwayvcov", - "parallel", - "pcse", - "plm", - "pscl", - "scatterplot3d", - "stats4", - "strucchange", - "survival" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://sandwich.R-Forge.R-project.org/", - "BugReports": "https://sandwich.R-Forge.R-project.org/contact.html", - "NeedsCompilation": "no", - "Author": "Achim Zeileis [aut, cre] (), Thomas Lumley [aut] (), Nathaniel Graham [ctb] (), Susanne Koell [ctb]", - "Maintainer": "Achim Zeileis ", - "Repository": "CRAN" - }, - "sass": { - "Package": "sass", - "Version": "0.4.10", - "Source": "Repository", - "Type": "Package", - "Title": "Syntactically Awesome Style Sheets ('Sass')", - "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", - "BugReports": "https://github.com/rstudio/sass/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "GNU make", - "Imports": [ - "fs (>= 1.2.4)", - "rlang (>= 0.4.10)", - "htmltools (>= 0.5.1)", - "R6", - "rappdirs" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "withr", - "shiny", - "curl" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "scales": { - "Package": "scales", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Scale Functions for Visualization", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", - "License": "MIT + file LICENSE", - "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", - "BugReports": "https://github.com/r-lib/scales/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli", - "farver (>= 2.0.3)", - "glue", - "labeling", - "lifecycle", - "R6", - "RColorBrewer", - "rlang (>= 1.1.0)", - "viridisLite" - ], - "Suggests": [ - "bit64", - "covr", - "dichromat", - "ggplot2", - "hms (>= 0.5.0)", - "stringi", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "LazyLoad": "yes", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "shiny": { - "Package": "shiny", - "Version": "1.13.0", - "Source": "Repository", - "Type": "Package", - "Title": "Web Application Framework for R", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Garrick\", \"Aden-Buie\", , \"garrick@adenbuie.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(, \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(, \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", - "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", - "License": "MIT + file LICENSE", - "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", - "BugReports": "https://github.com/rstudio/shiny/issues", - "Depends": [ - "methods", - "R (>= 3.1.2)" - ], - "Imports": [ - "bslib (>= 0.6.0)", - "cachem (>= 1.1.0)", - "cli", - "commonmark (>= 2.0.0)", - "fastmap (>= 1.1.1)", - "fontawesome (>= 0.4.0)", - "glue (>= 1.3.2)", - "grDevices", - "htmltools (>= 0.5.4)", - "httpuv (>= 1.5.2)", - "jsonlite (>= 0.9.16)", - "later (>= 1.0.0)", - "lifecycle (>= 0.2.0)", - "mime (>= 0.3)", - "otel", - "promises (>= 1.5.0)", - "R6 (>= 2.0)", - "rlang (>= 0.4.10)", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Suggests": [ - "Cairo (>= 1.5-5)", - "coro (>= 1.1.0)", - "datasets", - "DT", - "dygraphs", - "future", - "ggplot2", - "knitr (>= 1.6)", - "magrittr", - "markdown", - "mirai", - "otelsdk (>= 0.2.0)", - "ragg", - "reactlog (>= 1.0.0)", - "rmarkdown", - "sass", - "showtext", - "testthat (>= 3.2.1)", - "watcher", - "yaml" - ], - "Config/Needs/check": "shinytest2", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'otel-attr-srcref.R' 'otel-collect.R' 'otel-enable.R' 'otel-error.R' 'otel-label.R' 'otel-reactive-update.R' 'otel-session.R' 'otel-shiny.R' 'otel-with.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'utils-tags.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Garrick Aden-Buie [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd] (ROR: ), jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "shinycssloaders": { - "Package": "shinycssloaders", - "Version": "1.1.0", - "Source": "Repository", - "Title": "Add Loading Animations to a 'shiny' Output While It's Recalculating", - "Authors@R": "c( person(\"Dean\",\"Attali\",email=\"daattali@gmail.com\",role=c(\"aut\",\"cre\"), comment = c(\"Maintainer/developer of shinycssloaders since 2019\", ORCID=\"0000-0002-5645-3493\")), person(\"Andras\",\"Sali\",email=\"andras.sali@alphacruncher.hu\",role=c(\"aut\"),comment=\"Original creator of shinycssloaders package\"), person(\"Luke\",\"Hass\",role=c(\"ctb\",\"cph\"),comment=\"Author of included CSS loader code\") )", - "Description": "When a 'Shiny' output (such as a plot, table, map, etc.) is recalculating, it remains visible but gets greyed out. Using 'shinycssloaders', you can add a loading animation (\"spinner\") to outputs instead. By wrapping a 'Shiny' output in 'withSpinner()', a spinner will automatically appear while the output is recalculating. You can also manually show and hide the spinner, or add a full-page spinner to cover the entire page. See the demo online at .", - "License": "MIT + file LICENSE", - "URL": "https://github.com/daattali/shinycssloaders, https://daattali.com/shiny/shinycssloaders-demo/", - "BugReports": "https://github.com/daattali/shinycssloaders/issues", - "Depends": [ - "R (>= 3.1)" - ], - "Imports": [ - "digest", - "glue", - "grDevices", - "htmltools (>= 0.3.5)", - "shiny" - ], - "Suggests": [ - "knitr", - "shinydisconnect", - "shinyjs" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Dean Attali [aut, cre] (Maintainer/developer of shinycssloaders since 2019, ), Andras Sali [aut] (Original creator of shinycssloaders package), Luke Hass [ctb, cph] (Author of included CSS loader code)", - "Maintainer": "Dean Attali ", - "Repository": "CRAN" - }, - "shinythemes": { - "Package": "shinythemes", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Themes for Shiny", - "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch themes\"), person(\"Lukasz\", \"Dziedzic\", role = c(\"ctb\", \"cph\"), comment = \"Lato font\"), person(\"Nathan\", \"Willis\", role = c(\"ctb\", \"cph\"), comment = \"News Cycle font\"), person(family = \"Google Corporation\", role = c(\"ctb\", \"cph\"), comment = \"Open Sans and Roboto fonts\"), person(\"Matt\", \"McInerney\", role = c(\"ctb\", \"cph\"), comment = \"Raleway font\"), person(family = \"Adobe Systems Incorporated\", role = c(\"ctb\", \"cph\"), comment = \"Source Sans Pro font\"), person(family = \"Canonical Ltd\", role = c(\"ctb\", \"cph\"), comment = \"Ubuntu font\") )", - "Description": "Themes for use with Shiny. Includes several Bootstrap themes from , which are packaged for use with Shiny applications.", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "shiny (>= 0.11)" - ], - "URL": "https://rstudio.github.io/shinythemes/", - "License": "GPL-3 | file LICENSE", - "RoxygenNote": "7.1.1", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut, cre], RStudio [cph], Thomas Park [ctb, cph] (Bootswatch themes), Lukasz Dziedzic [ctb, cph] (Lato font), Nathan Willis [ctb, cph] (News Cycle font), Google Corporation [ctb, cph] (Open Sans and Roboto fonts), Matt McInerney [ctb, cph] (Raleway font), Adobe Systems Incorporated [ctb, cph] (Source Sans Pro font), Canonical Ltd [ctb, cph] (Ubuntu font)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-2", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for Reading, Tokenizing and Parsing R Code", - "Authors@R": "person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevinushey@gmail.com\")", - "Maintainer": "Kevin Ushey ", - "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", - "License": "MIT + file LICENSE", - "Depends": [ - "R (>= 3.0.2)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "5.0.1", - "BugReports": "https://github.com/kevinushey/sourcetools/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Kevin Ushey [aut, cre]", - "Repository": "CRAN" - }, - "stringi": { - "Package": "stringi", - "Version": "1.8.7", - "Source": "Repository", - "Date": "2025-03-27", - "Title": "Fast and Portable Character String Processing Facilities", - "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", - "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", - "BugReports": "https://github.com/gagolews/stringi/issues", - "SystemRequirements": "ICU4C (>= 61, optional)", - "Type": "Package", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "tools", - "utils", - "stats" - ], - "Biarch": "TRUE", - "License": "file LICENSE", - "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", - "Maintainer": "Marek Gagolewski ", - "License_is_FOSS": "yes", - "Repository": "CRAN" - }, - "stringr": { - "Package": "stringr", - "Version": "1.6.0", - "Source": "Repository", - "Title": "Simple, Consistent Wrappers for Common String Operations", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", - "License": "MIT + file LICENSE", - "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", - "BugReports": "https://github.com/tidyverse/stringr/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cli", - "glue (>= 1.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr", - "rlang (>= 1.0.0)", - "stringi (>= 1.5.3)", - "vctrs (>= 0.4.0)" - ], - "Suggests": [ - "covr", - "dplyr", - "gt", - "htmltools", - "htmlwidgets", - "knitr", + "miniUI", + "modules", + "packrat", + "pak", + "R6", + "remotes", + "reticulate", "rmarkdown", - "testthat (>= 3.0.0)", - "tibble" + "rstudioapi", + "shiny", + "testthat", + "uuid", + "waldo", + "yaml", + "webfakes" ], + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "RoxygenNote": "7.3.3", "VignetteBuilder": "knitr", "Config/Needs/website": "tidyverse/tidytemplate", - "Config/potools/style": "explicit", "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "survival": { - "Package": "survival", - "Version": "3.8-6", - "Source": "Repository", - "Title": "Survival Analysis", - "Priority": "recommended", - "Date": "2026-01-09", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "graphics", - "Matrix", - "methods", - "splines", - "stats", - "utils" - ], - "LazyData": "Yes", - "LazyDataCompression": "xz", - "ByteCompile": "Yes", - "Authors@R": "c(person(c(\"Terry\", \"M\"), \"Therneau\", email=\"therneau.terry@mayo.edu\", role=c(\"aut\", \"cre\")), person(\"Thomas\", \"Lumley\", role=c(\"ctb\", \"trl\"), comment=\"original S->R port and R maintainer until 2009\"), person(\"Atkinson\", \"Elizabeth\", role=\"ctb\"), person(\"Crowson\", \"Cynthia\", role=\"ctb\"))", - "Description": "Contains the core survival analysis routines, including definition of Surv objects, Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models, and parametric accelerated failure time models.", - "License": "LGPL (>= 2)", - "URL": "https://github.com/therneau/survival", - "NeedsCompilation": "yes", - "Author": "Terry M Therneau [aut, cre], Thomas Lumley [ctb, trl] (original S->R port and R maintainer until 2009), Atkinson Elizabeth [ctb], Crowson Cynthia [ctb]", - "Maintainer": "Terry M Therneau ", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", + "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Kevin Ushey ", "Repository": "CRAN" }, "sys": { @@ -3950,534 +296,6 @@ "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" - }, - "tibble": { - "Package": "tibble", - "Version": "3.3.1", - "Source": "Repository", - "Title": "Simple Data Frames", - "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Romain\", \"Francois\", , \"romain@r-enthusiasts.com\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", - "License": "MIT + file LICENSE", - "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", - "BugReports": "https://github.com/tidyverse/tibble/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "cli", - "lifecycle (>= 1.0.0)", - "magrittr", - "methods", - "pillar (>= 1.8.1)", - "pkgconfig", - "rlang (>= 1.0.2)", - "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bench", - "bit64", - "blob", - "brio", - "callr", - "DiagrammeR", - "dplyr", - "evaluate", - "formattable", - "ggplot2", - "here", - "hms", - "htmltools", - "knitr", - "lubridate", - "nycflights13", - "pkgload", - "purrr", - "rmarkdown", - "stringi", - "testthat (>= 3.0.2)", - "tidyr", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/autostyle/rmd": "false", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", - "Config/usethis/last-upkeep": "2025-06-07", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3.9000", - "NeedsCompilation": "yes", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.3.2", - "Source": "Repository", - "Title": "Tidy Messy Data", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to help to create tidy data, where each column is a variable, each row is an observation, and each cell contains a single value. 'tidyr' contains tools for changing the shape (pivoting) and hierarchy (nesting and 'unnesting') of a dataset, turning deeply nested lists into rectangular data frames ('rectangling'), and extracting values out of string columns. It also includes tools for working with missing values (both implicit and explicit).", - "License": "MIT + file LICENSE", - "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", - "BugReports": "https://github.com/tidyverse/tidyr/issues", - "Depends": [ - "R (>= 4.1.0)" - ], - "Imports": [ - "cli (>= 3.4.1)", - "dplyr (>= 1.1.0)", - "glue", - "lifecycle (>= 1.0.3)", - "magrittr", - "purrr (>= 1.0.1)", - "rlang (>= 1.1.1)", - "stringr (>= 1.5.0)", - "tibble (>= 2.1.1)", - "tidyselect (>= 1.2.1)", - "utils", - "vctrs (>= 0.5.2)" - ], - "Suggests": [ - "covr", - "data.table", - "knitr", - "readr", - "repurrrsive (>= 1.1.0)", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.4.0)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.1", - "Source": "Repository", - "Title": "Select from a Set of Strings", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", - "License": "MIT + file LICENSE", - "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", - "BugReports": "https://github.com/r-lib/tidyselect/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "glue (>= 1.3.0)", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.0.4)", - "vctrs (>= 0.5.2)", - "withr" - ], - "Suggests": [ - "covr", - "crayon", - "dplyr", - "knitr", - "magrittr", - "rmarkdown", - "stringr", - "testthat (>= 3.1.1)", - "tibble (>= 2.1.3)" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.0.9000", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "timeDate": { - "Package": "timeDate", - "Version": "4052.112", - "Source": "Repository", - "Title": "Rmetrics - Chronological and Calendar Objects", - "Authors@R": "c(person(\"Diethelm\", \"Wuertz\", role=\"aut\", comment = \"original code\") , person(\"Tobias\", \"Setz\", role = c(\"aut\"), email = \"tobias.setz@live.com\") , person(\"Yohan\", \"Chalabi\", role = \"aut\") , person(\"Martin\",\"Maechler\", role = \"ctb\", email = \"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(given = c(\"Joe\", \"W.\"), family = \"Byers\", role = \"ctb\") , person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"cre\", \"aut\"), email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\")) )", - "Description": "The 'timeDate' class fulfils the conventions of the ISO 8601 standard as well as of the ANSI C and POSIX standards. Beyond these standards it provides the \"Financial Center\" concept which allows to handle data records collected in different time zones and mix them up to have always the proper time stamps with respect to your personal financial center, or alternatively to the GMT reference time. It can thus also handle time stamps from historical data records from the same time zone, even if the financial centers changed day light saving times at different calendar dates.", - "Depends": [ - "R (>= 3.6.0)", - "methods" - ], - "Imports": [ - "graphics", - "utils", - "stats" - ], - "Suggests": [ - "RUnit" - ], - "License": "GPL (>= 2)", - "Encoding": "UTF-8", - "URL": "https://geobosh.github.io/timeDateDoc/ (doc), https://CRAN.R-project.org/package=timeDate, https://www.rmetrics.org", - "BugReports": "https://r-forge.r-project.org/tracker/?atid=633&group_id=156&func=browse", - "NeedsCompilation": "no", - "Author": "Diethelm Wuertz [aut] (original code), Tobias Setz [aut], Yohan Chalabi [aut], Martin Maechler [ctb] (ORCID: ), Joe W. Byers [ctb], Georgi N. Boshnakov [cre, aut] (ORCID: )", - "Maintainer": "Georgi N. Boshnakov ", - "Repository": "CRAN" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.59", - "Source": "Repository", - "Type": "Package", - "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", - "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", - "Imports": [ - "xfun (>= 0.48)" - ], - "Suggests": [ - "testit", - "rstudioapi" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/tinytex", - "BugReports": "https://github.com/rstudio/tinytex/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre, cph] (ORCID: ), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Ethan Heinzen [ctb], Fernando Cagua [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "urca": { - "Package": "urca", - "Version": "1.3-4", - "Source": "Repository", - "Date": "2024-05-25", - "Title": "Unit Root and Cointegration Tests for Time Series Data", - "Authors@R": "c(person(\"Bernhard\", \"Pfaff\", email = \"bernhard@pfaffikus.de\", role = c(\"aut\", \"cre\")), person(\"Eric\", \"Zivot\",email = \"ezivot@u.washington.edu\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", role = \"ctb\"))", - "Depends": [ - "R (>= 2.0.0)", - "methods" - ], - "Imports": [ - "nlme", - "graphics", - "stats" - ], - "LazyLoad": "yes", - "Description": "Unit root and cointegration tests encountered in applied econometric analysis are implemented.", - "License": "GPL (>= 2)", - "NeedsCompilation": "yes", - "Author": "Bernhard Pfaff [aut, cre], Eric Zivot [ctb], Matthieu Stigler [ctb]", - "Maintainer": "Bernhard Pfaff ", - "Repository": "CRAN" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.6", - "Source": "Repository", - "Title": "Unicode Text Processing", - "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", - "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", - "License": "Apache License (== 2.0) | file LICENSE", - "URL": "https://krlmlr.github.io/utf8/, https://github.com/krlmlr/utf8", - "BugReports": "https://github.com/krlmlr/utf8/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "cli", - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre] (ORCID: ), Unicode, Inc. [cph, dtc] (Unicode Character Database)", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.7.2", - "Source": "Repository", - "Title": "Vector Helpers", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", - "License": "MIT + file LICENSE", - "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", - "BugReports": "https://github.com/r-lib/vctrs/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "glue", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.1.7)" - ], - "Suggests": [ - "bit64", - "covr", - "crayon", - "dplyr (>= 0.8.5)", - "generics", - "knitr", - "pillar (>= 1.4.4)", - "pkgdown (>= 2.0.1)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble (>= 3.1.3)", - "waldo (>= 0.2.0)", - "withr", - "xml2", - "zeallot" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "Language": "en-GB", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.3", - "Source": "Repository", - "Type": "Package", - "Title": "Colorblind-Friendly Color Maps (Lite Version)", - "Date": "2026-02-03", - "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", - "Maintainer": "Simon Garnier ", - "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "hexbin (>= 1.27.0)", - "ggplot2 (>= 1.0.1)", - "testthat", - "covr" - ], - "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", - "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", - "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", - "Repository": "CRAN" - }, - "withr": { - "Package": "withr", - "Version": "3.0.2", - "Source": "Repository", - "Title": "Run Code 'With' Temporarily Modified Global State", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", - "License": "MIT + file LICENSE", - "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", - "BugReports": "https://github.com/r-lib/withr/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "graphics", - "grDevices" - ], - "Suggests": [ - "callr", - "DBI", - "knitr", - "methods", - "rlang", - "rmarkdown (>= 2.12)", - "RSQLite", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", - "NeedsCompilation": "no", - "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "xfun": { - "Package": "xfun", - "Version": "0.57", - "Source": "Repository", - "Type": "Package", - "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", - "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "grDevices", - "stats", - "tools" - ], - "Suggests": [ - "testit", - "parallel", - "codetools", - "methods", - "rstudioapi", - "tinytex (>= 0.30)", - "mime", - "litedown (>= 0.6)", - "commonmark", - "knitr (>= 1.50)", - "remotes", - "pak", - "curl", - "xml2", - "jsonlite", - "magick", - "yaml", - "data.table", - "qs2" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/xfun", - "BugReports": "https://github.com/yihui/xfun/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "VignetteBuilder": "litedown", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre, cph] (ORCID: , URL: https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (ORCID: ), Christophe Dervieux [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-8", - "Source": "Repository", - "Date": "2026-02-20", - "Title": "Export Tables to LaTeX or HTML", - "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", - "Maintainer": "David Scott ", - "Imports": [ - "stats", - "utils", - "methods" - ], - "Suggests": [ - "knitr", - "zoo", - "survival", - "glue", - "tinytex" - ], - "VignetteBuilder": "knitr", - "Description": "Coerce data to LaTeX and HTML tables.", - "URL": "http://xtable.r-forge.r-project.org/", - "Depends": [ - "R (>= 2.10.0)" - ], - "License": "GPL (>= 2)", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.12", - "Source": "Repository", - "Type": "Package", - "Title": "Methods to Convert R Data to YAML and Back", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"cre\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Shawn\", \"Garbett\", , \"shawn.garbett@vumc.org\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4079-5621\")), person(\"Jeremy\", \"Stephens\", role = c(\"aut\", \"ctb\")), person(\"Kirill\", \"Simonov\", role = \"aut\"), person(\"Yihui\", \"Xie\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Zhuoer\", \"Dong\", role = \"ctb\"), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"reikoch\", role = \"ctb\"), person(\"Will\", \"Beasley\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5613-5006\")), person(\"Brendan\", \"O'Connor\", role = \"ctb\"), person(\"Michael\", \"Quinn\", role = \"ctb\"), person(\"Charlie\", \"Gao\", role = \"ctb\"), person(c(\"Gregory\", \"R.\"), \"Warnes\", role = \"ctb\"), person(c(\"Zhian\", \"N.\"), \"Kamvar\", role = \"ctb\") )", - "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", - "License": "BSD_3_clause + file LICENSE", - "URL": "https://yaml.r-lib.org, https://github.com/r-lib/yaml/", - "BugReports": "https://github.com/r-lib/yaml/issues", - "Suggests": [ - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.3", - "VignetteBuilder": "knitr", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [cre] (ORCID: ), Shawn Garbett [ctb] (ORCID: ), Jeremy Stephens [aut, ctb], Kirill Simonov [aut], Yihui Xie [ctb] (ORCID: ), Zhuoer Dong [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb] (ORCID: ), Brendan O'Connor [ctb], Michael Quinn [ctb], Charlie Gao [ctb], Gregory R. Warnes [ctb], Zhian N. Kamvar [ctb]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "zoo": { - "Package": "zoo", - "Version": "1.8-15", - "Source": "Repository", - "Date": "2025-12-15", - "Title": "S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations)", - "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Gabor\", family = \"Grothendieck\", role = \"aut\", email = \"ggrothendieck@gmail.com\"), person(given = c(\"Jeffrey\", \"A.\"), family = \"Ryan\", role = \"aut\", email = \"jeff.a.ryan@gmail.com\"), person(given = c(\"Joshua\", \"M.\"), family = \"Ulrich\", role = \"ctb\", email = \"josh.m.ulrich@gmail.com\"), person(given = \"Felix\", family = \"Andrews\", role = \"ctb\", email = \"felix@nfrac.org\"))", - "Description": "An S3 class with methods for totally ordered indexed observations. It is particularly aimed at irregular time series of numeric vectors/matrices and factors. zoo's key design goals are independence of a particular index/date/time class and consistency with ts and base R by providing methods to extend standard generics.", - "Depends": [ - "R (>= 3.1.0)", - "stats" - ], - "Suggests": [ - "AER", - "coda", - "chron", - "ggplot2 (>= 3.5.0)", - "mondate", - "scales", - "stinepack", - "strucchange", - "timeDate", - "timeSeries", - "tinyplot", - "tis", - "tseries", - "xts" - ], - "Imports": [ - "utils", - "graphics", - "grDevices", - "lattice (>= 0.20-27)" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://zoo.R-Forge.R-project.org/", - "NeedsCompilation": "yes", - "Author": "Achim Zeileis [aut, cre] (ORCID: ), Gabor Grothendieck [aut], Jeffrey A. Ryan [aut], Joshua M. Ulrich [ctb], Felix Andrews [ctb]", - "Maintainer": "Achim Zeileis ", - "Repository": "CRAN" } } } diff --git a/utils.R b/utils.R index 6e418b5..8cd8a5e 100644 --- a/utils.R +++ b/utils.R @@ -43,7 +43,7 @@ library(pracma) # - IC50: Concentration at 50% response (what we're solving for) # # Example: -# df <- read.csv("Mortality IC50.csv") +# df <- read.csv("examples/sample_ic50_data.csv") # names(df) <- c("Concentration", "Mortality_24h", "Mortality_48h") # result <- calculate_ic50(df, "Concentration", "Mortality_24h") # print(paste("IC50:", result$ic50)) From 6270971318229d570454eb4bb5a56dbf70ee4c3c Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 17:26:10 -0400 Subject: [PATCH 06/36] Consolidate documentation into single README Merged SETUP_GUIDE.md into README.md as an expandable section: - Quick setup steps remain at top for fast reference - Detailed instructions available in collapsible
section - Preserves all setup guidance (app creation, credentials, troubleshooting) - Single source of truth for documentation Benefits: - Easier to maintain (one file vs two) - Better discoverability (everything in README) - Still scannable (quick setup at top, details expanded on demand) --- README.md | 251 ++++++++++++++++++++++++++++++-- SETUP_GUIDE.md | 381 ------------------------------------------------- 2 files changed, 243 insertions(+), 389 deletions(-) delete mode 100644 SETUP_GUIDE.md diff --git a/README.md b/README.md index 3d4fa5d..4aa12bf 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,249 @@ A repository containing the sample scripts described in the [Working with Datase Provided for educational purposes only; not for production use. -## Configuration and Setup -1. Create a [Benchling App](https://docs.benchling.com/docs/getting-started-benchling-apps) -2. Create a [Benchling Analysis](https://help.benchling.com/hc/en-us/articles/15298157390861-Creating-an-analysis) -3. Configure credentials: - - Copy `.Renviron.example` to `.Renviron` and add your `BENCHLING_CLIENT_ID` and `BENCHLING_CLIENT_SECRET` - - The script will prompt you for the analysis key when you run it - -📖 **See `SETUP_GUIDE.md` for detailed step-by-step instructions** +## Quick Setup + +1. **Install dependencies:** `Rscript -e "renv::restore()"` +2. **Create Benchling App:** Get your Client ID and Secret from [Developer Console](https://docs.benchling.com/docs/getting-started-benchling-apps) +3. **Configure credentials:** `cp .Renviron.example .Renviron` and add your credentials +4. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) with input dataset +5. **Run the workflow:** The script will prompt for your analysis key + +
+📖 Detailed Setup Instructions (click to expand) + +### Prerequisites + +- R 4.5.3+ installed +- Access to a Benchling tenant with appropriate permissions +- Admin access to create Benchling Apps +- Access to Benchling Analyses feature + +### Part 1: Create a Benchling App + +A Benchling App provides the OAuth2 credentials needed to authenticate API requests. + +1. **Navigate to Apps Settings:** + - Log into your Benchling tenant: `https://.benchling.com` + - Go to **Settings** → **Developer Console** → **Apps** + +2. **Create New App:** + - Click **"Create App"** + - **App Name:** e.g., "R Analysis Integration" + - **Description:** e.g., "R scripts for IC50 analysis" + - **Redirect URLs:** Not needed (server-to-server) + +3. **Configure Permissions:** + The app needs these scopes: + - `analyses:read` - Read analysis metadata + - `analyses:write` - Update analyses with outputs + - `data-frames:read` - Read input datasets + - `data-frames:write` - Create output datasets + - `files:read` - Read file metadata + - `files:write` - Create and upload files + +4. **Get Credentials:** + - After creating the app, copy the **Client ID** and **Client Secret** + - ⚠️ **Important:** Store the Client Secret securely - you won't be able to see it again + +### Part 2: Create a Benchling Analysis + +Analyses are where you'll attach input datasets and receive output results. + +1. **Navigate to Analyses:** + - In Benchling, go to your project or notebook + - Click **"Create"** → **"Analysis"** + +2. **Configure Analysis:** + - **Name:** e.g., "IC50 Dose-Response Calculation" + - **Description:** Optional, explains what this analysis does + +3. **Attach Input Dataset:** + - Click **"Add Input"** → **"Dataset"** + - Select or upload a CSV dataset with your mortality data + - **Required columns:** + - `Cell.Mortality.Concentration` - Drug concentration values + - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours + - `Cell.Line.Name` - Cell line identifier + + **Example data format:** + ```csv + Cell.Mortality.Concentration,Cell.Mortality.Mortality.24h,Cell.Line.Name + 0.3,3.979,HeLa + 1.0,17.07,HeLa + 3.0,18.356,HeLa + 10.0,25.288,HeLa + 30.0,54.813,HeLa + 100.0,76.379,HeLa + 300.0,81.514,HeLa + ``` + +4. **Get the Analysis Key:** + - Once created, generate an analysis key from the Analysis settings + - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) + - **Note:** Analysis keys are specific to each analysis run + +### Part 3: Configure Environment Variables + +**⭐ This is the recommended approach** - keeps credentials secure and out of your code. + +1. **Create your `.Renviron` file:** + ```bash + cp .Renviron.example .Renviron + ``` + +2. **Edit `.Renviron`** with your credentials: + ```bash + # Benchling App Credentials (from Part 1) + BENCHLING_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + BENCHLING_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + + # Analysis Key - Leave this commented out! + # The script will prompt you for it when you run (recommended) + # BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... + ``` + +3. **Verify `.Renviron` is gitignored:** + ```bash + git check-ignore .Renviron # Should output: .Renviron + ``` + +4. **Verify configuration in R:** + ```r + # Start R in your project directory + Sys.getenv("BENCHLING_CLIENT_ID") # Should show your client ID + Sys.getenv("BENCHLING_CLIENT_SECRET") # Should show your secret + ``` + + If variables are empty: + - Ensure `.Renviron` is in your project root + - Restart R after creating `.Renviron` + - Check there are no quotes around values + - Check there are no spaces around the `=` sign + +### Part 4: Install Dependencies + +```bash +# Restore the renv environment (installs all packages) +Rscript -e "renv::restore()" + +# Or install packages individually +Rscript -e "renv::install(c('httr', 'jsonlite', 'base64enc', 'drc', 'plotly', 'htmlwidgets', 'pracma'))" +``` + +**Note:** On macOS, you may need CMake first: +```bash +brew install cmake +``` + +### Part 5: Run the Workflow + +⚠️ **Important:** Scripts must run **sequentially in the same R session** because `results_analysis.R` depends on variables from `get_dataframe.R`. + +**Option A: RStudio (Recommended)** +```r +source('get_dataframe.R') # Will prompt: "Analysis Key: " + # Paste: ana_XXXXX:eyJhbGc... +ls() # Verify: df, subdomain, analysis_id, access_token, folder_id +head(df) # Check data loaded correctly +source('results_analysis.R') +``` + +**Option B: Interactive R** +```r +source('get_dataframe.R') +# Prompts for analysis key, paste it and press Enter +source('results_analysis.R') +``` + +**Option C: Non-Interactive (Command Line)** +```bash +export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." +Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" +``` + +### Verify Success + +The scripts print status codes as they run: +``` +[1] "200" # Dataframe upload successful +[1] "200" # File upload successful +[1] "200" # Analysis update successful +``` + +Check your Analysis in Benchling - you should see: +- **Dataset:** `Mortality_IC50` - CSV with IC50 statistics +- **File:** `mortality_24h.html` - Interactive plot + +### Common Issues + +**Error: "HTTP 401 Unauthorized"** +- Check your `client_id` and `client_secret` are correct +- Verify app has necessary permissions +- Regenerate client secret if needed + +**Error: "HTTP 403 Forbidden"** +- App doesn't have required permissions +- Go back to App settings and add missing scopes + +**Error: "HTTP 404 Not Found"** +- `analysis_id` is incorrect +- Check the analysis ID in the Benchling URL + +**Error: "Bearer token expired"** +- Tokens expire after 900 seconds (15 minutes) +- Re-run `get_dataframe.R` to generate a new token + +**Error: "Variables not found in results_analysis.R"** +- Must run `get_dataframe.R` first in the same R session +- Don't start a new R session between running the scripts + +**Error: "Package not found"** +- Run `renv::restore()` to install all dependencies + +### Data Flow + +``` +┌─────────────────────────────────────────┐ +│ Benchling Analysis │ +│ Input Dataset (CSV) │ +└──────────────┬──────────────────────────┘ + │ + ▼ + ┌──────────────────┐ + │ get_dataframe.R │ + │ 1. Authenticate │ + │ 2. Fetch dataset │ + └────────┬─────────┘ + │ + ▼ + Variables: df, subdomain, + analysis_id, access_token + │ + ▼ + ┌──────────────────┐ + │ results_analysis │ + │ 1. Calculate IC50│ + │ 2. Generate plot │ + │ 3. Upload both │ + └────────┬─────────┘ + │ + ▼ +┌─────────────────────────────────────────┐ +│ Benchling Analysis │ +│ Output: Mortality_IC50 (CSV) │ +│ Output: mortality_24h.html (plot) │ +└─────────────────────────────────────────┘ +``` + +### Additional Resources + +- [Benchling API Documentation](https://docs.benchling.com/docs/api-overview) +- [Benchling Apps Guide](https://docs.benchling.com/docs/getting-started-benchling-apps) +- [Benchling Analyses Guide](https://help.benchling.com/hc/en-us/articles/15298157390861) +- [Working with Datasets Using R](https://docs.benchling.com/docs/working-with-datasets-using-r) + +
## Local Testing 🧪 diff --git a/SETUP_GUIDE.md b/SETUP_GUIDE.md deleted file mode 100644 index 387f16a..0000000 --- a/SETUP_GUIDE.md +++ /dev/null @@ -1,381 +0,0 @@ -# Complete Setup Guide for Benchling R Integration - -This guide walks you through setting up and running the Benchling dataset integration scripts from scratch. - -## Prerequisites - -- R 4.5.3+ installed -- Access to a Benchling tenant with appropriate permissions -- Admin access to create Benchling Apps -- Access to Benchling Analyses feature - -## Part 1: Benchling Configuration - -### Step 1: Create a Benchling App - -A Benchling App provides the OAuth2 credentials needed to authenticate API requests. - -1. **Navigate to Apps Settings:** - - Log into your Benchling tenant: `https://.benchling.com` - - Go to **Settings** → **Developer Console** → **Apps** - -2. **Create New App:** - - Click **"Create App"** - - Fill in the required fields: - - **App Name:** e.g., "R Analysis Integration" - - **Description:** e.g., "R scripts for IC50 analysis" - - **Redirect URLs:** Not needed for this use case (server-to-server) - -3. **Configure Permissions:** - The app needs the following scopes: - - `analyses:read` - Read analysis metadata - - `analyses:write` - Update analyses with outputs - - `data-frames:read` - Read input datasets - - `data-frames:write` - Create output datasets - - `files:read` - Read file metadata - - `files:write` - Create and upload files - -4. **Get Credentials:** - - After creating the app, copy the **Client ID** and **Client Secret** - - **⚠️ Important:** Store the Client Secret securely - you won't be able to see it again - - Keep these handy for Step 3 - -### Step 2: Create a Benchling Analysis - -Analyses are where you'll attach input datasets and receive output results. - -1. **Navigate to Analyses:** - - In Benchling, go to your project or notebook - - Click **"Create"** → **"Analysis"** - -2. **Configure Analysis:** - - **Name:** e.g., "IC50 Dose-Response Calculation" - - **Description:** Optional, but helpful to explain what this analysis does - -3. **Attach Input Dataset:** - - Click **"Add Input"** → **"Dataset"** - - Select or upload a CSV dataset with your mortality data - - **Required columns:** - - `Cell.Mortality.Concentration` - Drug concentration values - - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours - - `Cell.Line.Name` - Cell line identifier - - **Example data format:** - ```csv - Cell.Mortality.Concentration,Cell.Mortality.Mortality.24h,Cell.Line.Name - 0.3,3.979,HeLa - 1.0,17.07,HeLa - 3.0,18.356,HeLa - 10.0,25.288,HeLa - 30.0,54.813,HeLa - 100.0,76.379,HeLa - 300.0,81.514,HeLa - ``` - -4. **Get the Analysis Key:** - - Once the analysis is created, you need to generate an analysis key - - This is typically available in the Analysis settings or via the Benchling UI - - The analysis key format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) - - **Note:** Analysis keys are specific to each analysis run and may need to be regenerated - -### Step 3: Alternative - Get Analysis ID Directly - -If you can't get an analysis key, you can work with the analysis ID directly: - -1. **Find Analysis ID:** - - Open your analysis in Benchling - - Look at the URL: `https://.benchling.com/analyses/ana_XXXXXXXX` - - The part after `/analyses/` is your analysis ID (e.g., `ana_XXXXXXXX`) - -2. **Get Tenant Subdomain:** - - Your subdomain is the first part of your Benchling URL - - For `https://acme-corp.benchling.com`, the subdomain is `acme-corp` - -## Part 2: Configure Environment Variables (Recommended Method) - -**⭐ This is the recommended approach** - it keeps credentials secure and out of your code. - -### Step 1: Create Your `.Renviron` File - -1. **Copy the template:** - ```bash - cp .Renviron.example .Renviron - ``` - -2. **Edit `.Renviron`** with your credentials: - ```bash - # Open in your editor - nano .Renviron - # or - code .Renviron - ``` - -3. **Fill in your values:** - ```bash - # Benchling App Credentials (from Part 1, Step 1) - BENCHLING_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - BENCHLING_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - # Analysis Key - Leave this commented out! - # The script will prompt you for it when you run it (recommended) - # since the analysis key changes for each analysis run. - # BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... - ``` - -4. **Verify `.Renviron` is in `.gitignore`:** - ```bash - # Check if .Renviron is ignored - git check-ignore .Renviron - # Should output: .Renviron - ``` - - If not, add it: - ```bash - echo ".Renviron" >> .gitignore - ``` - -### Step 2: Verify Configuration - -Open R and check your environment variables are loaded: - -```r -# Start R in your project directory -R - -# Check that variables are set -Sys.getenv("BENCHLING_CLIENT_ID") # Should show your client ID -Sys.getenv("BENCHLING_CLIENT_SECRET") # Should show your secret -``` - -**Note:** You don't need to check `BENCHLING_ANALYSIS_KEY` - the script will prompt you for it when you run it. - -If variables are empty, make sure: -- `.Renviron` is in your project root directory -- You restarted R after creating `.Renviron` -- There are no quotes around values in `.Renviron` -- There are no spaces around the `=` sign - -### Step 3: Run the Scripts - -The script will **prompt you for your analysis key** when you run it: - -**Option 1: RStudio (Recommended)** -```r -source('get_dataframe.R') # Will prompt: "Analysis Key: " - # Paste your key: ana_XXXXX:eyJhbGc... -source('results_analysis.R') # Performs analysis and uploads results -``` - -**Option 2: Interactive R** -```r -source('get_dataframe.R') -# It will prompt: "Analysis Key: " -# Paste your analysis key and press Enter - -# Verify variables exist -ls() # Should show: df, subdomain, analysis_id, access_token, folder_id -source('results_analysis.R') -``` - -**Option 3: Non-Interactive (Command Line)** -If running non-interactively, set the key in environment: -```bash -export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." -Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" -``` - -### Benefits of Using `.Renviron` - -✅ **Security:** Credentials never appear in code -✅ **Git-safe:** `.Renviron` is gitignored by default -✅ **Team-friendly:** Each developer has their own `.Renviron` -✅ **Standard:** Native R approach, no extra packages -✅ **Clean:** Better error messages and validation - ---- - -## Part 3: Install Dependencies and Run - -### Step 1: Install Dependencies - -If you haven't already installed the required packages: - -```bash -# Restore the renv environment (installs all packages) -Rscript -e "renv::restore()" - -# Or install packages individually -Rscript -e "renv::install(c('httr', 'jsonlite', 'base64enc', 'drc', 'plotly', 'htmlwidgets', 'pracma', 'rstudioapi'))" -``` - -**Note:** On macOS, you may need to install CMake first: -```bash -brew install cmake pandoc -``` - -### Step 2: Run the Workflow - -**⚠️ Important:** Scripts must run **sequentially in the same R session** because `results_analysis.R` depends on variables from `get_dataframe.R`. - -**Option A: RStudio** -```r -source('get_dataframe.R') # Loads data, prints progress -source('results_analysis.R') # Analyzes and uploads -``` - -**Option B: Command Line** -```bash -Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" -``` - -**Option C: Interactive R** -```r -source('get_dataframe.R') -ls() # Verify: df, subdomain, analysis_id, access_token, folder_id -head(df) # Check your data -source('results_analysis.R') -``` - -### Step 3: Verify Success - -The scripts will print status codes as they run: - -``` -[1] "200" # Dataframe upload successful -[1] "200" # File upload successful -[1] "200" # Analysis update successful -[1] "running" # Initial status -``` - -### Step 4: Check Benchling - -1. Go back to your Analysis in Benchling -2. You should now see two outputs: - - **Dataset:** `Mortality_IC50` - CSV with IC50 statistics - - **File:** `mortality_24h.html` - Interactive plot - -3. The analysis status should show as "Succeeded" - -## Part 4: Troubleshooting - -### Common Issues - -**Error: "HTTP 401 Unauthorized"** -- Check your `client_id` and `client_secret` are correct -- Verify your app has the necessary permissions -- Regenerate client secret if needed - -**Error: "HTTP 403 Forbidden"** -- Your app doesn't have required permissions -- Go back to App settings and add missing scopes -- You may need admin help to grant permissions - -**Error: "HTTP 404 Not Found"** -- `analysis_id` is incorrect -- Check the analysis ID in the Benchling URL -- Ensure the analysis exists and you have access - -**Error: "Bearer token expired"** -- Tokens expire after 900 seconds (15 minutes) -- Re-run `get_dataframe.R` to generate a new token -- Then immediately run `results_analysis.R` - -**Error: "Package not found"** -- Run `renv::restore()` to install all dependencies -- Or install missing packages individually with `renv::install('')` - -**Error: "No dataframe found"** -- Ensure you've attached an input dataset to your analysis -- Verify the dataset has data in it (not empty) -- Check you're using the correct analysis ID - -**Variables not found in `results_analysis.R`** -- You must run `get_dataframe.R` first in the same R session -- Variables (`df`, `subdomain`, `access_token`, etc.) are passed between scripts via the environment -- Don't start a new R session between running the two scripts - -### Checking Token Validity - -```r -# Check if access_token exists and view its contents -if (exists("access_token")) { - cat("Token exists, length:", nchar(access_token), "\n") -} else { - cat("Token not found - run get_dataframe.R first\n") -} -``` - -## Part 5: Understanding the Data Flow - -``` -┌─────────────────────────────────────────────────────────┐ -│ Benchling Analysis │ -│ │ -│ Input Dataset (CSV) ─────────────────────┐ │ -│ - Cell.Mortality.Concentration │ │ -│ - Cell.Mortality.Mortality.24h │ │ -│ - Cell.Line.Name │ │ -└────────────────────────────────────────────┼────────────┘ - │ - ▼ - ┌──────────────────┐ - │ get_dataframe.R │ - │ │ - │ 1. Authenticate │ - │ 2. Fetch dataset │ - │ 3. Load to df │ - └─────────┬────────┘ - │ - ▼ - Variables: df, subdomain, - analysis_id, access_token, folder_id - │ - ▼ - ┌──────────────────────┐ - │ results_analysis.R │ - │ │ - │ 1. Calculate IC50 │ - │ 2. Generate CSV │ - │ 3. Create plot │ - │ 4. Upload both │ - └──────────┬───────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────┐ -│ Benchling Analysis │ -│ │ -│ Output Dataset: Mortality_IC50 │ -│ - IC50 value, slope, statistics │ -│ │ -│ Output File: mortality_24h.html │ -│ - Interactive dose-response plot │ -└─────────────────────────────────────────────────────────┘ -``` - -## Next Steps - -Once you're comfortable with the basic workflow: - -1. **Customize the Analysis:** - - Modify the IC50 calculation parameters in `results_analysis.R` - - Adjust the plot styling and labels - - Add additional statistical outputs - -2. **Batch Processing:** - - Loop over multiple analyses - - Process different cell lines or conditions - -3. **Error Handling:** - - Add try-catch blocks for robust production use - - Implement retry logic for network failures - -4. **Integration with R Shiny:** - - Build interactive dashboards - - Allow users to configure parameters via UI - -## Additional Resources - -- [Benchling API Documentation](https://docs.benchling.com/docs/api-overview) -- [Benchling Apps Guide](https://docs.benchling.com/docs/getting-started-benchling-apps) -- [Benchling Analyses Guide](https://help.benchling.com/hc/en-us/articles/15298157390861) -- [Working with Datasets Using R](https://docs.benchling.com/docs/working-with-datasets-using-r) From b1d7d5b55692ed113ab5a664988d461ad6efa454 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 17:32:11 -0400 Subject: [PATCH 07/36] Add R installation to quick setup prerequisites --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4aa12bf..a85ffcf 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,12 @@ Provided for educational purposes only; not for production use. ## Quick Setup -1. **Install dependencies:** `Rscript -e "renv::restore()"` -2. **Create Benchling App:** Get your Client ID and Secret from [Developer Console](https://docs.benchling.com/docs/getting-started-benchling-apps) -3. **Configure credentials:** `cp .Renviron.example .Renviron` and add your credentials -4. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) with input dataset -5. **Run the workflow:** The script will prompt for your analysis key +1. **Install R 4.5.3+** (if not already installed) +2. **Install dependencies:** `Rscript -e "renv::restore()"` +3. **Create Benchling App:** Get your Client ID and Secret from [Developer Console](https://docs.benchling.com/docs/getting-started-benchling-apps) +4. **Configure credentials:** `cp .Renviron.example .Renviron` and add your credentials +5. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) with input dataset +6. **Run the workflow:** The script will prompt for your analysis key
📖 Detailed Setup Instructions (click to expand) From e18bbb15bc5e1431b794f139cf59e3e55e4f6680 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 17:45:39 -0400 Subject: [PATCH 08/36] Simplify authentication - use analysis key JWT directly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MAJOR SIMPLIFICATION: Analysis keys contain JWT tokens that work as bearer tokens, eliminating need for separate Benchling App credentials! Changes: - get_dataframe.R: Extract JWT from analysis key, use directly (removed OAuth2) - app.R: Same simplification for Shiny app - .Renviron.example: Now optional, only for automation - README.md: Removed Benchling App setup steps from quick start - CLAUDE.md: Updated architecture docs to reflect JWT-only auth Benefits: ✅ No Benchling App creation needed ✅ No client_id/client_secret management ✅ No OAuth2 token generation ✅ ~130 lines of code/docs removed ✅ Simpler setup (3 steps instead of 6) ✅ Lower barrier to entry for learners Test script (test_analysis_key_auth.R) included for reference - this is how we discovered the JWT tokens work directly as bearer tokens. Analysis key format: ana_XXXXX:JWT_TOKEN (JWT after colon is the bearer token) --- .Renviron.example | 20 ++--- README.md | 114 ++++++--------------------- app.R | 36 +-------- get_dataframe.R | 107 +++++++++----------------- test_analysis_key_auth.R | 161 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 235 insertions(+), 203 deletions(-) create mode 100644 test_analysis_key_auth.R diff --git a/.Renviron.example b/.Renviron.example index 0e2e278..89840b3 100644 --- a/.Renviron.example +++ b/.Renviron.example @@ -1,15 +1,11 @@ -# Benchling API Configuration -# Copy this file to .Renviron and fill in your actual values -# DO NOT commit .Renviron to git - it should be in .gitignore - -# Benchling App Credentials (from Developer Console → Apps) -# These are REQUIRED and stay the same across all analyses -BENCHLING_CLIENT_ID=your_client_id_here -BENCHLING_CLIENT_SECRET=your_client_secret_here - -# Analysis Configuration (OPTIONAL) +# Benchling Analysis Key (OPTIONAL) +# # The script will prompt you for the analysis key when you run it. -# This is recommended since the analysis key changes for each analysis run. +# This is the recommended approach since analysis keys change for each analysis. # -# If you prefer to set it here (not recommended), uncomment the line below: +# If you prefer to set it in the environment (useful for automation), +# uncomment the line below and add your key: # BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... +# +# Note: Analysis keys contain JWT tokens that expire. Check the 'exp' field +# in the JWT payload if authentication fails. diff --git a/README.md b/README.md index a85ffcf..1c3ba3e 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,9 @@ Provided for educational purposes only; not for production use. 1. **Install R 4.5.3+** (if not already installed) 2. **Install dependencies:** `Rscript -e "renv::restore()"` -3. **Create Benchling App:** Get your Client ID and Secret from [Developer Console](https://docs.benchling.com/docs/getting-started-benchling-apps) -4. **Configure credentials:** `cp .Renviron.example .Renviron` and add your credentials -5. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) with input dataset -6. **Run the workflow:** The script will prompt for your analysis key +3. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) in Benchling with input dataset +4. **Get Analysis Key:** Generate key from your analysis (format: `ana_XXXXX:eyJhbGc...`) +5. **Run the workflow:** The script will prompt for your analysis key - that's it!
📖 Detailed Setup Instructions (click to expand) @@ -18,38 +17,10 @@ Provided for educational purposes only; not for production use. ### Prerequisites - R 4.5.3+ installed -- Access to a Benchling tenant with appropriate permissions -- Admin access to create Benchling Apps +- Access to a Benchling tenant - Access to Benchling Analyses feature -### Part 1: Create a Benchling App - -A Benchling App provides the OAuth2 credentials needed to authenticate API requests. - -1. **Navigate to Apps Settings:** - - Log into your Benchling tenant: `https://.benchling.com` - - Go to **Settings** → **Developer Console** → **Apps** - -2. **Create New App:** - - Click **"Create App"** - - **App Name:** e.g., "R Analysis Integration" - - **Description:** e.g., "R scripts for IC50 analysis" - - **Redirect URLs:** Not needed (server-to-server) - -3. **Configure Permissions:** - The app needs these scopes: - - `analyses:read` - Read analysis metadata - - `analyses:write` - Update analyses with outputs - - `data-frames:read` - Read input datasets - - `data-frames:write` - Create output datasets - - `files:read` - Read file metadata - - `files:write` - Create and upload files - -4. **Get Credentials:** - - After creating the app, copy the **Client ID** and **Client Secret** - - ⚠️ **Important:** Store the Client Secret securely - you won't be able to see it again - -### Part 2: Create a Benchling Analysis +### Part 1: Create a Benchling Analysis Analyses are where you'll attach input datasets and receive output results. @@ -86,45 +57,7 @@ Analyses are where you'll attach input datasets and receive output results. - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) - **Note:** Analysis keys are specific to each analysis run -### Part 3: Configure Environment Variables - -**⭐ This is the recommended approach** - keeps credentials secure and out of your code. - -1. **Create your `.Renviron` file:** - ```bash - cp .Renviron.example .Renviron - ``` - -2. **Edit `.Renviron`** with your credentials: - ```bash - # Benchling App Credentials (from Part 1) - BENCHLING_CLIENT_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx - BENCHLING_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - - # Analysis Key - Leave this commented out! - # The script will prompt you for it when you run (recommended) - # BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... - ``` - -3. **Verify `.Renviron` is gitignored:** - ```bash - git check-ignore .Renviron # Should output: .Renviron - ``` - -4. **Verify configuration in R:** - ```r - # Start R in your project directory - Sys.getenv("BENCHLING_CLIENT_ID") # Should show your client ID - Sys.getenv("BENCHLING_CLIENT_SECRET") # Should show your secret - ``` - - If variables are empty: - - Ensure `.Renviron` is in your project root - - Restart R after creating `.Renviron` - - Check there are no quotes around values - - Check there are no spaces around the `=` sign - -### Part 4: Install Dependencies +### Part 2: Install Dependencies ```bash # Restore the renv environment (installs all packages) @@ -139,7 +72,7 @@ Rscript -e "renv::install(c('httr', 'jsonlite', 'base64enc', 'drc', 'plotly', 'h brew install cmake ``` -### Part 5: Run the Workflow +### Part 3: Run the Workflow ⚠️ **Important:** Scripts must run **sequentially in the same R session** because `results_analysis.R` depends on variables from `get_dataframe.R`. @@ -165,6 +98,12 @@ export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" ``` +**Option D: Shiny Web App (Easiest)** +```r +shiny::runApp("app.R") +# Enter your analysis key in the web interface +``` + ### Verify Success The scripts print status codes as they run: @@ -180,22 +119,15 @@ Check your Analysis in Benchling - you should see: ### Common Issues -**Error: "HTTP 401 Unauthorized"** -- Check your `client_id` and `client_secret` are correct -- Verify app has necessary permissions -- Regenerate client secret if needed - -**Error: "HTTP 403 Forbidden"** -- App doesn't have required permissions -- Go back to App settings and add missing scopes +**Error: "HTTP 401 Unauthorized" or "Failed to authenticate"** +- Your analysis key JWT may have expired (check the `exp` field in the JWT) +- Generate a new analysis key from your Benchling analysis +- Ensure you copied the complete key (format: `ana_XXXXX:eyJhbGc...`) **Error: "HTTP 404 Not Found"** - `analysis_id` is incorrect - Check the analysis ID in the Benchling URL - -**Error: "Bearer token expired"** -- Tokens expire after 900 seconds (15 minutes) -- Re-run `get_dataframe.R` to generate a new token +- Ensure the analysis exists and you have access **Error: "Variables not found in results_analysis.R"** - Must run `get_dataframe.R` first in the same R session @@ -204,6 +136,10 @@ Check your Analysis in Benchling - you should see: **Error: "Package not found"** - Run `renv::restore()` to install all dependencies +**Error: "No input dataframes found"** +- Ensure you've attached an input dataset to your analysis in Benchling +- Dataset must have the required columns (see data format above) + ### Data Flow ``` @@ -279,7 +215,7 @@ source("local_test.R") ## Usage ### Main Script Files -* `get_dataframe.R` - Pulls input dataset from Benchling using `.Renviron` configuration +* `get_dataframe.R` - Pulls input dataset from Benchling using analysis key * `results_analysis.R` - Performs IC50 calculation, creates plot, and uploads to Benchling * `app.R` - Full-featured Shiny web app with UI for IC50 analysis * `utils.R` - Shared utility functions for IC50 calculation and plotting @@ -298,8 +234,8 @@ source('results_analysis.R') ``` ⚠️ **Important:** -- Configure `.Renviron` with your client ID and secret first - Scripts must run sequentially in the same R session -- The script will prompt you for the analysis key (it changes per analysis) +- The script will prompt you for the analysis key +- Analysis keys contain JWT tokens that may expire - regenerate if needed Once you're confident with the workflow, these techniques can be applied to more robust applications using tools like Shiny. diff --git a/app.R b/app.R index 660ab15..b689082 100644 --- a/app.R +++ b/app.R @@ -12,19 +12,6 @@ library(htmlwidgets) # Source utility functions source("utils.R") -# Load credentials from .Renviron -client_id <- Sys.getenv("BENCHLING_CLIENT_ID") -client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") - -# Check credentials are set -if (client_id == "" || client_secret == "") { - stop(paste( - "Missing Benchling credentials!", - "Please ensure BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET are set in .Renviron", - sep = "\n" - )) -} - # Define UI ui <- fluidPage(theme = shinytheme("cerulean"), @@ -72,25 +59,10 @@ server <- function(input, output) { # Get dataset from Benchling datasetInput <- reactive({ - analysis_id <- gsub(":.*$", "", input$DatasetKey) - - # Get bearer token - api_path <- '/api/v2/token' - url <- paste("https://", subdomain(), ".benchling.com", api_path, sep = "") - - request_payload <- paste("client_id=", client_id, - "&client_secret=", client_secret, - "&grant_type=client_credentials", sep = "") - - token_request <- httr::POST( - url = url, - body = request_payload, - httr::accept('application/json'), - httr::content_type('application/x-www-form-urlencoded') - ) - - request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) - access_token <- request_body$access_token + # Parse analysis key to extract JWT token + key_parts <- strsplit(input$DatasetKey, ":", fixed = TRUE)[[1]] + analysis_id <- key_parts[1] + access_token <- key_parts[2] # JWT token IS the bearer token! # Get analysis endpoint <- "/api/v2-beta/analyses/" diff --git a/get_dataframe.R b/get_dataframe.R index 1bbbac4..0fd0bc8 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -7,24 +7,10 @@ library(jsonlite) library(base64enc) ################################################################################ -# Load Configuration from Environment Variables +# Get Analysis Key (Only Credential Needed!) ################################################################################ -# Load credentials from .Renviron -client_id <- Sys.getenv("BENCHLING_CLIENT_ID") -client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") - -# Check if credentials are set -if (client_id == "" || client_secret == "") { - stop(paste( - "Missing Benchling credentials!", - "Please ensure BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET are set in .Renviron", - "See .Renviron.example for template", - sep = "\n" - )) -} - -# Prompt for analysis key (recommended - it changes for each analysis) +# Check if analysis key is in environment (optional) analysis_key <- Sys.getenv("BENCHLING_ANALYSIS_KEY") if (analysis_key == "") { @@ -48,22 +34,45 @@ if (analysis_key == "") { cat("\n✓ Analysis key provided\n\n") } -# Parse analysis key to extract subdomain and ID +################################################################################ +# Parse Analysis Key and Extract Authentication Token +################################################################################ + +cat("Parsing analysis key...\n") + tryCatch({ - # Get the analysis ID by extracting string prior to : in analysis_key - analysis_id <- gsub(":.*$", "", analysis_key) + # Split the analysis key: ana_XXXXX:JWT_TOKEN + key_parts <- strsplit(analysis_key, ":", fixed = TRUE)[[1]] + + if (length(key_parts) != 2) { + stop("Invalid analysis key format. Expected format: ana_XXXXX:eyJhbGc...") + } - # Get the JWT Token and decode it to extract the subdomain of the tenant - split_key <- strsplit(analysis_key, ".", fixed = TRUE) - token <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) - subdomain_raw <- token$aud + analysis_id <- key_parts[1] + jwt_token <- key_parts[2] - # Extract just the subdomain (handle both "subdomain" and "subdomain.benchling.com" formats) + # Decode JWT to extract subdomain + jwt_parts <- strsplit(jwt_token, ".", fixed = TRUE)[[1]] + payload_json <- rawToChar(base64decode(jwt_parts[2])) + payload <- jsonlite::fromJSON(payload_json) + + # Extract subdomain from aud or iss field + subdomain_raw <- payload$aud + if (is.null(subdomain_raw) || subdomain_raw == "") { + subdomain_raw <- payload$iss + } + + # Remove .benchling.com suffix if present subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) + # The JWT token IS our bearer token - no need for OAuth2! + access_token <- jwt_token + cat("✓ Analysis key parsed successfully\n") cat(" Subdomain:", subdomain, "\n") - cat(" Analysis ID:", analysis_id, "\n\n") + cat(" Analysis ID:", analysis_id, "\n") + cat(" Authentication: Using JWT from analysis key\n\n") + }, error = function(e) { stop(paste( "Failed to parse analysis key!", @@ -73,48 +82,6 @@ tryCatch({ )) }) -################################################################################ -# Generate Bearer Token -################################################################################ - -cat("Authenticating with Benchling API...\n") - -# Construct url -# The resulting URL should look like: https://.benchling.com/api/v2/token -api_path <- '/api/v2/token' -url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") - -request_payload <- - paste("client_id=", client_id, - "&client_secret=", client_secret, - "&grant_type=client_credentials", sep = "") - -# Perform a post request and get the token -token_request <- httr::POST( - url = url, - body = request_payload, - httr::accept('application/json'), - httr::content_type('application/x-www-form-urlencoded') -) - -# Check for authentication errors -if (token_request$status_code != 200) { - stop(paste( - "Authentication failed! Status code:", token_request$status_code, - "\nPlease check your BENCHLING_CLIENT_ID and BENCHLING_CLIENT_SECRET", - sep = "" - )) -} - -# Use the jsonLite library to read the Json body -request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) - -# Bearer Token needs to be regenerated every 900 seconds -access_token <- request_body$access_token - -cat("✓ Authentication successful\n") -cat(" Token expires in:", request_body$expires_in, "seconds (15 minutes)\n\n") - ############################################################### # Use the Get analysis endpoint and retrieve the dataframe id ############################################################### @@ -127,7 +94,7 @@ api_path <- "/api/v2-beta/analyses/" url <- paste("https://", subdomain, ".benchling.com", api_path, analysis_id, sep = "") -# Perform a get request +# Perform a get request using JWT as bearer token analysis_response <- httr::GET(url, add_headers( @@ -139,7 +106,7 @@ analysis_response <- if (analysis_response$status_code != 200) { stop(paste( "Failed to fetch analysis! Status code:", analysis_response$status_code, - "\nPlease check your BENCHLING_ANALYSIS_KEY", + "\nPlease check your analysis key is valid and not expired", sep = "" )) } @@ -216,6 +183,6 @@ cat("Available variables:\n") cat(" df - Dataset as R dataframe\n") cat(" subdomain - Benchling tenant subdomain\n") cat(" analysis_id - Analysis ID\n") -cat(" access_token - Bearer token (valid for 15 min)\n") +cat(" access_token - JWT bearer token\n") cat(" folder_id - Folder ID for uploads\n") cat("\nNext step: Run results_analysis.R\n") diff --git a/test_analysis_key_auth.R b/test_analysis_key_auth.R new file mode 100644 index 0000000..9ac41cd --- /dev/null +++ b/test_analysis_key_auth.R @@ -0,0 +1,161 @@ +########################################################################################## +# Test: Can we authenticate using ONLY the analysis key? +# +# This script was used to discover that the JWT token embedded in analysis keys +# can be used directly as a bearer token, eliminating the need for separate +# Benchling App credentials (client_id/client_secret). +# +# Result: ✅ SUCCESS! JWT-only authentication works. +# This discovery led to simplifying the entire repository. +# +# Usage: source("test_analysis_key_auth.R") +# (Will prompt for analysis key) +########################################################################################## + +library(httr) +library(jsonlite) +library(base64enc) + +cat("\n") +cat("=====================================\n") +cat("Analysis Key Authentication Test\n") +cat("=====================================\n\n") + +# Prompt for analysis key +cat("Enter your analysis key (format: ana_XXXXX:eyJhbGc...):\n") +analysis_key <- readline(prompt = "Analysis Key: ") + +if (nchar(analysis_key) == 0) { + stop("Analysis key is required") +} + +# Parse the JWT to extract subdomain and analysis_id +cat("\nStep 1: Parsing JWT from analysis key...\n") +key_parts <- strsplit(analysis_key, ":")[[1]] +analysis_id <- key_parts[1] +jwt_token <- key_parts[2] + +# Decode JWT payload (second part of JWT: header.payload.signature) +jwt_parts <- strsplit(jwt_token, "\\.")[[1]] +payload_json <- rawToChar(base64decode(jwt_parts[2])) +payload <- fromJSON(payload_json) + +cat(" ✓ Analysis ID:", analysis_id, "\n") +cat(" ✓ JWT contains:", paste(names(payload), collapse=", "), "\n\n") + +# Print full JWT payload for debugging +cat("Full JWT payload:\n") +print(payload) +cat("\n") + +# Try to extract subdomain from various possible fields +subdomain <- NULL +if (!is.null(payload$tenant)) { + subdomain <- payload$tenant +} else if (!is.null(payload$aud)) { + # aud might be like "subdomain.benchling.com" or "https://subdomain.benchling.com" + aud_match <- regmatches(payload$aud, regexec("^(?:https?://)?([^.]+)\\.benchling\\.com", payload$aud, perl=TRUE)) + if (length(aud_match[[1]]) > 1) { + subdomain <- aud_match[[1]][2] + } +} else if (!is.null(payload$iss)) { + # iss might contain subdomain + iss_match <- regmatches(payload$iss, regexec("^(?:https?://)?([^.]+)\\.benchling\\.com", payload$iss, perl=TRUE)) + if (length(iss_match[[1]]) > 1) { + subdomain <- iss_match[[1]][2] + } +} + +if (is.null(subdomain) || nchar(subdomain) == 0) { + cat("❌ ERROR: Cannot extract tenant subdomain from JWT\n") + cat("Please provide your tenant subdomain manually:\n") + subdomain <- readline(prompt = "Tenant subdomain (e.g., 'acme-corp'): ") + if (nchar(subdomain) == 0) { + stop("Tenant subdomain is required") + } +} + +cat(" ✓ Using subdomain:", subdomain, "\n\n") + +# Test 1: Try using the analysis key directly as bearer token +cat("Step 2: Testing analysis key as bearer token...\n") +base_url <- paste0("https://", subdomain, ".benchling.com") +analysis_url <- paste0(base_url, "/api/v2-beta/analyses/", analysis_id) + +response1 <- GET( + analysis_url, + add_headers( + Authorization = paste("Bearer", analysis_key) + ) +) + +cat(" Response status:", status_code(response1), "\n") +test1_success <- FALSE +if (status_code(response1) == 200) { + cat(" ✅ SUCCESS! Analysis key works as bearer token\n") + cat(" No need for separate client_id/client_secret!\n\n") + + # Show what we can fetch + analysis_data <- content(response1) + cat(" Retrieved analysis:\n") + cat(" Name:", analysis_data$name, "\n") + if (!is.null(analysis_data$dataFrames) && length(analysis_data$dataFrames) > 0) { + cat(" Input dataframes:", length(analysis_data$dataFrames), "\n") + } + cat("\n") + test1_success <- TRUE +} else { + cat(" ❌ FAILED - Status:", status_code(response1), "\n") + error_content <- content(response1, as = "text", encoding = "UTF-8") + cat(" Error:", error_content, "\n\n") +} + +# Test 2: Try using just the JWT part as bearer token (only if test 1 failed) +test2_success <- FALSE +if (!test1_success) { + cat("Step 3: Testing JWT part only as bearer token...\n") + response2 <- GET( + analysis_url, + add_headers( + Authorization = paste("Bearer", jwt_token) + ) + ) + + cat(" Response status:", status_code(response2), "\n") + if (status_code(response2) == 200) { + cat(" ✅ SUCCESS! JWT alone works as bearer token\n") + cat(" No need for separate client_id/client_secret!\n\n") + test2_success <- TRUE + } else { + cat(" ❌ FAILED - Status:", status_code(response2), "\n\n") + } +} else { + cat("Step 3: Skipping JWT-only test (full key already works)\n\n") +} + +# Conclusion +cat("=====================================\n") +if (test1_success || test2_success) { + cat("RESULT: Analysis key CAN be used for authentication! ✅\n") + cat("=====================================\n\n") + cat("This means:\n") + cat(" ✅ No need for separate client_id/client_secret in .Renviron\n") + cat(" ✅ Analysis key alone is sufficient\n") + cat(" ✅ Workflow could be simplified to only prompt for analysis key\n\n") + if (test1_success) { + cat("Use the full analysis key (ana_XXX:JWT) as the bearer token.\n\n") + } else { + cat("Use just the JWT part (after the colon) as the bearer token.\n\n") + } +} else { + cat("RESULT: Analysis key cannot be used for authentication ❌\n") + cat("=====================================\n\n") + cat("You still need to:\n") + cat(" 1. Create a Benchling App to get client_id/client_secret\n") + cat(" 2. Use those credentials to generate an OAuth2 bearer token\n") + cat(" 3. Use the analysis key only to extract subdomain/analysis_id\n\n") + cat("The current workflow (using .Renviron with client credentials) is correct.\n\n") +} + +cat("Press Enter to exit...") +readline() From 735fb3129271495ea878f433fd792438eee20063 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 17:48:11 -0400 Subject: [PATCH 09/36] Remove .Renviron.example - no longer needed Since authentication now uses only the analysis key JWT, there's no need for a .Renviron template file. Users can optionally create .Renviron for automation, but it's not required for the workflow. Simplified setup: just run the script and paste your analysis key when prompted. --- .Renviron.example | 11 ------- README.md | 74 +++++++++++++++++++++++++---------------------- 2 files changed, 39 insertions(+), 46 deletions(-) delete mode 100644 .Renviron.example diff --git a/.Renviron.example b/.Renviron.example deleted file mode 100644 index 89840b3..0000000 --- a/.Renviron.example +++ /dev/null @@ -1,11 +0,0 @@ -# Benchling Analysis Key (OPTIONAL) -# -# The script will prompt you for the analysis key when you run it. -# This is the recommended approach since analysis keys change for each analysis. -# -# If you prefer to set it in the environment (useful for automation), -# uncomment the line below and add your key: -# BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... -# -# Note: Analysis keys contain JWT tokens that expire. Check the 'exp' field -# in the JWT payload if authentication fails. diff --git a/README.md b/README.md index 1c3ba3e..430db66 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Sample Code - Working with Datasets Using R + A repository containing the sample scripts described in the [Working with Datasets Using R](https://docs.benchling.com/docs/working-with-datasets-using-r) developer guide. Provided for educational purposes only; not for production use. @@ -11,8 +12,7 @@ Provided for educational purposes only; not for production use. 4. **Get Analysis Key:** Generate key from your analysis (format: `ana_XXXXX:eyJhbGc...`) 5. **Run the workflow:** The script will prompt for your analysis key - that's it! -
-📖 Detailed Setup Instructions (click to expand) +📖 **Detailed Setup Instructions** (click to expand) ### Prerequisites @@ -25,37 +25,23 @@ Provided for educational purposes only; not for production use. Analyses are where you'll attach input datasets and receive output results. 1. **Navigate to Analyses:** - - In Benchling, go to your project or notebook - - Click **"Create"** → **"Analysis"** - + - In Benchling, go to your project or notebook + - Click **"Create"** → **"Analysis"** 2. **Configure Analysis:** - - **Name:** e.g., "IC50 Dose-Response Calculation" - - **Description:** Optional, explains what this analysis does - + - **Name:** e.g., "IC50 Dose-Response Calculation" + - **Description:** Optional, explains what this analysis does 3. **Attach Input Dataset:** - - Click **"Add Input"** → **"Dataset"** - - Select or upload a CSV dataset with your mortality data - - **Required columns:** - - `Cell.Mortality.Concentration` - Drug concentration values - - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours - - `Cell.Line.Name` - Cell line identifier - + - Click **"Add Input"** → **"Dataset"** + - Select or upload a CSV dataset with your mortality data + - **Required columns:** + - `Cell.Mortality.Concentration` - Drug concentration values + - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours + - `Cell.Line.Name` - Cell line identifier **Example data format:** - ```csv - Cell.Mortality.Concentration,Cell.Mortality.Mortality.24h,Cell.Line.Name - 0.3,3.979,HeLa - 1.0,17.07,HeLa - 3.0,18.356,HeLa - 10.0,25.288,HeLa - 30.0,54.813,HeLa - 100.0,76.379,HeLa - 300.0,81.514,HeLa - ``` - 4. **Get the Analysis Key:** - - Once created, generate an analysis key from the Analysis settings - - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) - - **Note:** Analysis keys are specific to each analysis run + - Once created, generate an analysis key from the Analysis settings + - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) + - **Note:** Analysis keys are specific to each analysis run ### Part 2: Install Dependencies @@ -68,6 +54,7 @@ Rscript -e "renv::install(c('httr', 'jsonlite', 'base64enc', 'drc', 'plotly', 'h ``` **Note:** On macOS, you may need CMake first: + ```bash brew install cmake ``` @@ -77,6 +64,7 @@ brew install cmake ⚠️ **Important:** Scripts must run **sequentially in the same R session** because `results_analysis.R` depends on variables from `get_dataframe.R`. **Option A: RStudio (Recommended)** + ```r source('get_dataframe.R') # Will prompt: "Analysis Key: " # Paste: ana_XXXXX:eyJhbGc... @@ -86,6 +74,7 @@ source('results_analysis.R') ``` **Option B: Interactive R** + ```r source('get_dataframe.R') # Prompts for analysis key, paste it and press Enter @@ -93,12 +82,14 @@ source('results_analysis.R') ``` **Option C: Non-Interactive (Command Line)** + ```bash export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" ``` **Option D: Shiny Web App (Easiest)** + ```r shiny::runApp("app.R") # Enter your analysis key in the web interface @@ -107,6 +98,7 @@ shiny::runApp("app.R") ### Verify Success The scripts print status codes as they run: + ``` [1] "200" # Dataframe upload successful [1] "200" # File upload successful @@ -114,29 +106,35 @@ The scripts print status codes as they run: ``` Check your Analysis in Benchling - you should see: + - **Dataset:** `Mortality_IC50` - CSV with IC50 statistics - **File:** `mortality_24h.html` - Interactive plot ### Common Issues **Error: "HTTP 401 Unauthorized" or "Failed to authenticate"** + - Your analysis key JWT may have expired (check the `exp` field in the JWT) - Generate a new analysis key from your Benchling analysis - Ensure you copied the complete key (format: `ana_XXXXX:eyJhbGc...`) **Error: "HTTP 404 Not Found"** + - `analysis_id` is incorrect - Check the analysis ID in the Benchling URL - Ensure the analysis exists and you have access **Error: "Variables not found in results_analysis.R"** + - Must run `get_dataframe.R` first in the same R session - Don't start a new R session between running the scripts **Error: "Package not found"** + - Run `renv::restore()` to install all dependencies **Error: "No input dataframes found"** + - Ensure you've attached an input dataset to your analysis in Benchling - Dataset must have the required columns (see data format above) @@ -182,7 +180,7 @@ Check your Analysis in Benchling - you should see: - [Benchling Analyses Guide](https://help.benchling.com/hc/en-us/articles/15298157390861) - [Working with Datasets Using R](https://docs.benchling.com/docs/working-with-datasets-using-r) -
+ ## Local Testing 🧪 @@ -198,6 +196,7 @@ source("local_test.R") ``` **What it does:** + - Loads dose-response data from `examples/sample_ic50_data.csv` (21 observations, 7 concentrations × 3 replicates) - Calculates IC50 using 4-parameter log-logistic model - Uses utility functions from `utils.R` @@ -205,6 +204,7 @@ source("local_test.R") - Generates results summary **Output files:** + - `examples/local_test_output.html` - Interactive plot (open in browser) - `examples/local_test_summary.csv` - Results table @@ -215,27 +215,31 @@ source("local_test.R") ## Usage ### Main Script Files -* `get_dataframe.R` - Pulls input dataset from Benchling using analysis key -* `results_analysis.R` - Performs IC50 calculation, creates plot, and uploads to Benchling -* `app.R` - Full-featured Shiny web app with UI for IC50 analysis -* `utils.R` - Shared utility functions for IC50 calculation and plotting + +- `get_dataframe.R` - Pulls input dataset from Benchling using analysis key +- `results_analysis.R` - Performs IC50 calculation, creates plot, and uploads to Benchling +- `app.R` - Full-featured Shiny web app with UI for IC50 analysis +- `utils.R` - Shared utility functions for IC50 calculation and plotting ### Full Workflow (Benchling Integration) **Option 1: Shiny Web App (Easiest)** + ```r shiny::runApp("app.R") # Opens web interface ``` **Option 2: Command Line Scripts** + ```r source('get_dataframe.R') # Will prompt for analysis key source('results_analysis.R') ``` ⚠️ **Important:** + - Scripts must run sequentially in the same R session - The script will prompt you for the analysis key - Analysis keys contain JWT tokens that may expire - regenerate if needed -Once you're confident with the workflow, these techniques can be applied to more robust applications using tools like Shiny. +Once you're confident with the workflow, these techniques can be applied to more robust applications using tools like Shiny. \ No newline at end of file From 68047f3b5d39398752a17483dd07c7fa907db0d9 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Wed, 1 Apr 2026 17:53:46 -0400 Subject: [PATCH 10/36] Remove test_analysis_key_auth.R - no longer needed The test file served its purpose (discovering JWT auth works), but now that the refactor is complete, it's just maintenance overhead. Added TODO in CLAUDE.md to investigate whether Benchling Apps Guide link is still relevant in documentation. --- test_analysis_key_auth.R | 161 --------------------------------------- 1 file changed, 161 deletions(-) delete mode 100644 test_analysis_key_auth.R diff --git a/test_analysis_key_auth.R b/test_analysis_key_auth.R deleted file mode 100644 index 9ac41cd..0000000 --- a/test_analysis_key_auth.R +++ /dev/null @@ -1,161 +0,0 @@ -########################################################################################## -# Test: Can we authenticate using ONLY the analysis key? -# -# This script was used to discover that the JWT token embedded in analysis keys -# can be used directly as a bearer token, eliminating the need for separate -# Benchling App credentials (client_id/client_secret). -# -# Result: ✅ SUCCESS! JWT-only authentication works. -# This discovery led to simplifying the entire repository. -# -# Usage: source("test_analysis_key_auth.R") -# (Will prompt for analysis key) -########################################################################################## - -library(httr) -library(jsonlite) -library(base64enc) - -cat("\n") -cat("=====================================\n") -cat("Analysis Key Authentication Test\n") -cat("=====================================\n\n") - -# Prompt for analysis key -cat("Enter your analysis key (format: ana_XXXXX:eyJhbGc...):\n") -analysis_key <- readline(prompt = "Analysis Key: ") - -if (nchar(analysis_key) == 0) { - stop("Analysis key is required") -} - -# Parse the JWT to extract subdomain and analysis_id -cat("\nStep 1: Parsing JWT from analysis key...\n") -key_parts <- strsplit(analysis_key, ":")[[1]] -analysis_id <- key_parts[1] -jwt_token <- key_parts[2] - -# Decode JWT payload (second part of JWT: header.payload.signature) -jwt_parts <- strsplit(jwt_token, "\\.")[[1]] -payload_json <- rawToChar(base64decode(jwt_parts[2])) -payload <- fromJSON(payload_json) - -cat(" ✓ Analysis ID:", analysis_id, "\n") -cat(" ✓ JWT contains:", paste(names(payload), collapse=", "), "\n\n") - -# Print full JWT payload for debugging -cat("Full JWT payload:\n") -print(payload) -cat("\n") - -# Try to extract subdomain from various possible fields -subdomain <- NULL -if (!is.null(payload$tenant)) { - subdomain <- payload$tenant -} else if (!is.null(payload$aud)) { - # aud might be like "subdomain.benchling.com" or "https://subdomain.benchling.com" - aud_match <- regmatches(payload$aud, regexec("^(?:https?://)?([^.]+)\\.benchling\\.com", payload$aud, perl=TRUE)) - if (length(aud_match[[1]]) > 1) { - subdomain <- aud_match[[1]][2] - } -} else if (!is.null(payload$iss)) { - # iss might contain subdomain - iss_match <- regmatches(payload$iss, regexec("^(?:https?://)?([^.]+)\\.benchling\\.com", payload$iss, perl=TRUE)) - if (length(iss_match[[1]]) > 1) { - subdomain <- iss_match[[1]][2] - } -} - -if (is.null(subdomain) || nchar(subdomain) == 0) { - cat("❌ ERROR: Cannot extract tenant subdomain from JWT\n") - cat("Please provide your tenant subdomain manually:\n") - subdomain <- readline(prompt = "Tenant subdomain (e.g., 'acme-corp'): ") - if (nchar(subdomain) == 0) { - stop("Tenant subdomain is required") - } -} - -cat(" ✓ Using subdomain:", subdomain, "\n\n") - -# Test 1: Try using the analysis key directly as bearer token -cat("Step 2: Testing analysis key as bearer token...\n") -base_url <- paste0("https://", subdomain, ".benchling.com") -analysis_url <- paste0(base_url, "/api/v2-beta/analyses/", analysis_id) - -response1 <- GET( - analysis_url, - add_headers( - Authorization = paste("Bearer", analysis_key) - ) -) - -cat(" Response status:", status_code(response1), "\n") -test1_success <- FALSE -if (status_code(response1) == 200) { - cat(" ✅ SUCCESS! Analysis key works as bearer token\n") - cat(" No need for separate client_id/client_secret!\n\n") - - # Show what we can fetch - analysis_data <- content(response1) - cat(" Retrieved analysis:\n") - cat(" Name:", analysis_data$name, "\n") - if (!is.null(analysis_data$dataFrames) && length(analysis_data$dataFrames) > 0) { - cat(" Input dataframes:", length(analysis_data$dataFrames), "\n") - } - cat("\n") - test1_success <- TRUE -} else { - cat(" ❌ FAILED - Status:", status_code(response1), "\n") - error_content <- content(response1, as = "text", encoding = "UTF-8") - cat(" Error:", error_content, "\n\n") -} - -# Test 2: Try using just the JWT part as bearer token (only if test 1 failed) -test2_success <- FALSE -if (!test1_success) { - cat("Step 3: Testing JWT part only as bearer token...\n") - response2 <- GET( - analysis_url, - add_headers( - Authorization = paste("Bearer", jwt_token) - ) - ) - - cat(" Response status:", status_code(response2), "\n") - if (status_code(response2) == 200) { - cat(" ✅ SUCCESS! JWT alone works as bearer token\n") - cat(" No need for separate client_id/client_secret!\n\n") - test2_success <- TRUE - } else { - cat(" ❌ FAILED - Status:", status_code(response2), "\n\n") - } -} else { - cat("Step 3: Skipping JWT-only test (full key already works)\n\n") -} - -# Conclusion -cat("=====================================\n") -if (test1_success || test2_success) { - cat("RESULT: Analysis key CAN be used for authentication! ✅\n") - cat("=====================================\n\n") - cat("This means:\n") - cat(" ✅ No need for separate client_id/client_secret in .Renviron\n") - cat(" ✅ Analysis key alone is sufficient\n") - cat(" ✅ Workflow could be simplified to only prompt for analysis key\n\n") - if (test1_success) { - cat("Use the full analysis key (ana_XXX:JWT) as the bearer token.\n\n") - } else { - cat("Use just the JWT part (after the colon) as the bearer token.\n\n") - } -} else { - cat("RESULT: Analysis key cannot be used for authentication ❌\n") - cat("=====================================\n\n") - cat("You still need to:\n") - cat(" 1. Create a Benchling App to get client_id/client_secret\n") - cat(" 2. Use those credentials to generate an OAuth2 bearer token\n") - cat(" 3. Use the analysis key only to extract subdomain/analysis_id\n\n") - cat("The current workflow (using .Renviron with client credentials) is correct.\n\n") -} - -cat("Press Enter to exit...") -readline() From 2fb816e63c63804d451bb8b85e54e0b6dabb240f Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 09:23:35 -0400 Subject: [PATCH 11/36] Document dual authentication approach - JWT default with OAuth2 alternative Added comprehensive documentation and code artifacts for both authentication methods: JWT (Analysis Key) - DEFAULT: - Simple, user-attributable, 10-minute expiration - Best for: learning, demos, quick workflows - Active implementation in get_dataframe.R and app.R OAuth2 (Benchling App) - ALTERNATIVE: - Permanent credentials, app-attributable - Best for: production, long-running workflows (>10 min) - Fully documented in commented code blocks Changes: - get_dataframe.R: Added auth comparison header, OAuth2 template (lines 108-167) - app.R: Added auth guidance comments - README.md: New "Authentication Methods" section with tradeoffs - CLAUDE.md: New "Authentication Architecture" section with implementation details - .Renviron.example: Recreated with clear guidance for both approaches Key insights documented: - JWT tokens expire after 10 minutes (not 15) - User vs app attribution implications - When to choose each approach - How to switch between them This provides educational value while supporting real-world use cases. --- .Renviron.example | 31 ++++++++++++++++ README.md | 22 +++++++++++ app.R | 19 +++++++++- get_dataframe.R | 94 +++++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 .Renviron.example diff --git a/.Renviron.example b/.Renviron.example new file mode 100644 index 0000000..fc5870c --- /dev/null +++ b/.Renviron.example @@ -0,0 +1,31 @@ +################################################################################ +# Benchling Authentication Configuration +################################################################################ +# +# This file is ONLY needed if using Benchling App (OAuth2) authentication +# for long-running workflows. The default JWT approach doesn't need this. +# +# See README.md "Authentication Methods" section for when to use each approach. +# +################################################################################ + +# -------------------------------------------------------------------------- +# Option 1: Analysis Key (JWT) - Default, no configuration needed! +# -------------------------------------------------------------------------- +# The script prompts for your analysis key when you run it. +# +# OPTIONAL: Set this to avoid prompts (useful for automation) +# BENCHLING_ANALYSIS_KEY=ana_XXXXX:eyJhbGc... + +# -------------------------------------------------------------------------- +# Option 2: Benchling App (OAuth2) - For production/long workflows +# -------------------------------------------------------------------------- +# Prerequisites: +# 1. Create Benchling App: https://docs.benchling.com/docs/getting-started-benchling-apps +# 2. Grant permissions: analyses, data-frames, files (read/write) +# 3. Uncomment OAuth2 code blocks in get_dataframe.R and app.R +# +# Then set these values: +# BENCHLING_CLIENT_ID=your_client_id_here +# BENCHLING_CLIENT_SECRET=your_client_secret_here +# BENCHLING_TENANT_SUBDOMAIN=your_subdomain diff --git a/README.md b/README.md index 430db66..5d34e27 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,28 @@ Provided for educational purposes only; not for production use. 4. **Get Analysis Key:** Generate key from your analysis (format: `ana_XXXXX:eyJhbGc...`) 5. **Run the workflow:** The script will prompt for your analysis key - that's it! +## Authentication Methods + +This repository uses **Analysis Key (JWT) authentication** by default - perfect for learning and quick workflows. + +### Analysis Key (JWT) - Default ✅ +**Best for:** Learning, demos, workflows under 10 minutes + +- ✅ **Simple:** Just paste your analysis key +- ✅ **User-attributable:** Actions are tied to the person who generated the key +- ⚠️ **Expires after 10 minutes:** If your workflow takes longer, it will fail +- ⚠️ **Analysis-specific:** Each analysis has its own key + +### Benchling App (OAuth2) - Alternative +**Best for:** Production systems, long-running workflows, processing multiple analyses + +- ✅ **Permanent credentials:** No expiration +- ✅ **Reusable:** Works across all analyses +- ⚠️ **More setup:** Requires creating a Benchling App +- ⚠️ **App-attributable:** Actions are tied to the app, not a specific user + +**Want to use App credentials?** See commented code blocks in `get_dataframe.R` and `app.R` with step-by-step instructions. Also see [Benchling Apps Guide](https://docs.benchling.com/docs/getting-started-benchling-apps). + 📖 **Detailed Setup Instructions** (click to expand) ### Prerequisites diff --git a/app.R b/app.R index b689082..ca1973c 100644 --- a/app.R +++ b/app.R @@ -47,7 +47,20 @@ ui <- fluidPage(theme = shinytheme("cerulean"), # Define server function server <- function(input, output) { - # Extract subdomain from analysis key + ################################################################################ + # AUTHENTICATION: This app uses Analysis Key (JWT) by default + # + # To switch to Benchling App credentials for long-running workflows: + # 1. See commented OAuth2 code in get_dataframe.R for the pattern + # 2. Load credentials at app startup (before ui definition) + # 3. Replace JWT extraction below with OAuth2 token generation + # 4. Change UI label from "Analysis Key" to "Analysis ID" + # + # Current approach: User-attributable, 10-minute expiration + # OAuth2 approach: App-attributable, permanent credentials + ################################################################################ + + # Extract subdomain from analysis key JWT subdomain <- reactive({ split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) @@ -59,11 +72,15 @@ server <- function(input, output) { # Get dataset from Benchling datasetInput <- reactive({ + # Option 1: Analysis Key (JWT) - CURRENT DEFAULT # Parse analysis key to extract JWT token key_parts <- strsplit(input$DatasetKey, ":", fixed = TRUE)[[1]] analysis_id <- key_parts[1] access_token <- key_parts[2] # JWT token IS the bearer token! + # Option 2: Benchling App (OAuth2) - See get_dataframe.R for full pattern + # Uncomment and adapt OAuth2 code from get_dataframe.R here if needed + # Get analysis endpoint <- "/api/v2-beta/analyses/" URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, analysis_id, sep = "") diff --git a/get_dataframe.R b/get_dataframe.R index 0fd0bc8..1ebf7bc 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -7,7 +7,29 @@ library(jsonlite) library(base64enc) ################################################################################ -# Get Analysis Key (Only Credential Needed!) +# AUTHENTICATION: Choose Your Approach +################################################################################ +# +# This script supports two authentication methods: +# +# 1. ANALYSIS KEY (JWT) - Default, recommended for learning +# ✓ Simple - just one credential +# ✓ User-attributable (actions tied to who generated the key) +# ✗ Expires after 10 minutes +# ✗ Specific to one analysis +# +# 2. BENCHLING APP (OAuth2) - For production/long-running workflows +# ✓ Permanent credentials (no expiration) +# ✓ Works across multiple analyses +# ✗ Requires creating a Benchling App +# ✗ App-attributable (not tied to specific user) +# +# To switch to App credentials: Comment out the JWT section below and +# uncomment the OAuth2 section that follows it. +################################################################################ + +################################################################################ +# Option 1: Analysis Key Authentication (JWT) - CURRENT DEFAULT ################################################################################ # Check if analysis key is in environment (optional) @@ -19,7 +41,8 @@ if (analysis_key == "") { cat("Enter your Benchling Analysis Key\n") cat("========================================\n") cat("The analysis key format is: ana_XXXXX:eyJhbGc...\n") - cat("You can find this in your Benchling analysis.\n\n") + cat("You can find this in your Benchling analysis.\n") + cat("Note: JWT tokens expire after 10 minutes.\n\n") # Prompt for analysis key analysis_key <- readline(prompt = "Analysis Key: ") @@ -34,10 +57,6 @@ if (analysis_key == "") { cat("\n✓ Analysis key provided\n\n") } -################################################################################ -# Parse Analysis Key and Extract Authentication Token -################################################################################ - cat("Parsing analysis key...\n") tryCatch({ @@ -71,7 +90,8 @@ tryCatch({ cat("✓ Analysis key parsed successfully\n") cat(" Subdomain:", subdomain, "\n") cat(" Analysis ID:", analysis_id, "\n") - cat(" Authentication: Using JWT from analysis key\n\n") + cat(" Authentication: Using JWT from analysis key (user-attributable)\n") + cat(" Token expires: ~10 minutes from generation\n\n") }, error = function(e) { stop(paste( @@ -82,6 +102,66 @@ tryCatch({ )) }) +################################################################################ +# Option 2: Benchling App Authentication (OAuth2) - COMMENTED OUT BY DEFAULT +################################################################################ +# +# Use this approach for: +# - Long-running workflows (>10 minutes) +# - Production systems +# - Workflows that process multiple analyses +# +# Prerequisites: +# 1. Create a Benchling App: https://docs.benchling.com/docs/getting-started-benchling-apps +# 2. Grant permissions: analyses:read/write, data-frames:read/write, files:read/write +# 3. Create .Renviron file with: +# BENCHLING_CLIENT_ID=your_client_id +# BENCHLING_CLIENT_SECRET=your_client_secret +# BENCHLING_TENANT_SUBDOMAIN=your_subdomain +# +# To use: Comment out the JWT section above, uncomment the code below. +# +# # Load App credentials +# client_id <- Sys.getenv("BENCHLING_CLIENT_ID") +# client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") +# subdomain <- Sys.getenv("BENCHLING_TENANT_SUBDOMAIN") +# +# if (client_id == "" || client_secret == "" || subdomain == "") { +# stop("Missing Benchling App credentials! Please set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_TENANT_SUBDOMAIN in .Renviron") +# } +# +# # Prompt for analysis ID only (not full key) +# if (analysis_key == "") { +# cat("\nEnter Analysis ID (e.g., ana_XXXXX): ") +# analysis_id <- readline() +# } else { +# # Extract ID from analysis key if provided +# analysis_id <- gsub(":.*$", "", analysis_key) +# } +# +# # Generate OAuth2 bearer token +# cat("Authenticating with Benchling App credentials...\n") +# token_url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") +# token_request <- httr::POST( +# url = token_url, +# body = paste0("client_id=", client_id, +# "&client_secret=", client_secret, +# "&grant_type=client_credentials"), +# httr::accept('application/json'), +# httr::content_type('application/x-www-form-urlencoded') +# ) +# +# if (token_request$status_code != 200) { +# stop("OAuth2 authentication failed! Check your client_id and client_secret.") +# } +# +# request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) +# access_token <- request_body$access_token +# +# cat("✓ OAuth2 authentication successful (app-attributable)\n") +# cat(" Token expires in:", request_body$expires_in, "seconds\n\n") +################################################################################ + ############################################################### # Use the Get analysis endpoint and retrieve the dataframe id ############################################################### From e1db7e4a65d111daefe80ad714fcb2c8aacd27fd Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 09:39:30 -0400 Subject: [PATCH 12/36] Clarify analysis key structure in README Added explicit note that analysis key format is analysis_id:JWT_token with colon delimiter, and that the JWT portion is used as the bearer token. --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5d34e27..92bb812 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,12 @@ Provided for educational purposes only; not for production use. ## Authentication Methods -This repository uses **Analysis Key (JWT) authentication** by default - perfect for learning and quick workflows. +This repository uses **Analysis Key (JWT) authentication** by default. + +**Analysis Key Structure:** `ana_XXXXX:eyJhbGc...` (analysis_id + JWT token separated by colon) ### Analysis Key (JWT) - Default ✅ + **Best for:** Learning, demos, workflows under 10 minutes - ✅ **Simple:** Just paste your analysis key @@ -24,7 +27,10 @@ This repository uses **Analysis Key (JWT) authentication** by default - perfect - ⚠️ **Expires after 10 minutes:** If your workflow takes longer, it will fail - ⚠️ **Analysis-specific:** Each analysis has its own key +The JWT token (part after the colon) contains the authentication credentials and is used directly as the bearer token for API requests. + ### Benchling App (OAuth2) - Alternative + **Best for:** Production systems, long-running workflows, processing multiple analyses - ✅ **Permanent credentials:** No expiration @@ -59,10 +65,10 @@ Analyses are where you'll attach input datasets and receive output results. - `Cell.Mortality.Concentration` - Drug concentration values - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours - `Cell.Line.Name` - Cell line identifier - **Example data format:** + **Example data format:** 4. **Get the Analysis Key:** - Once created, generate an analysis key from the Analysis settings - - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (JWT token) + - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (`analysis_id`:`JWT token`) - **Note:** Analysis keys are specific to each analysis run ### Part 2: Install Dependencies @@ -202,8 +208,6 @@ Check your Analysis in Benchling - you should see: - [Benchling Analyses Guide](https://help.benchling.com/hc/en-us/articles/15298157390861) - [Working with Datasets Using R](https://docs.benchling.com/docs/working-with-datasets-using-r) - - ## Local Testing 🧪 Want to test IC50 calculations without connecting to Benchling? Use the local test script: From 5fe289cf827c3f19041f8d2c015da082acb494f6 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 09:42:43 -0400 Subject: [PATCH 13/36] Add detailed instructions for obtaining analysis key Specified exact UI steps: click 'Connect with external tool' then 'Copy Analysis Key' in the popup. Added to both Quick Setup and detailed instructions sections. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 92bb812..4fe1c04 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Provided for educational purposes only; not for production use. 1. **Install R 4.5.3+** (if not already installed) 2. **Install dependencies:** `Rscript -e "renv::restore()"` 3. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) in Benchling with input dataset -4. **Get Analysis Key:** Generate key from your analysis (format: `ana_XXXXX:eyJhbGc...`) +4. **Get Analysis Key:** In your analysis, click **"Connect with external tool"** → **"Copy Analysis Key"** 5. **Run the workflow:** The script will prompt for your analysis key - that's it! ## Authentication Methods @@ -67,9 +67,10 @@ Analyses are where you'll attach input datasets and receive output results. - `Cell.Line.Name` - Cell line identifier **Example data format:** 4. **Get the Analysis Key:** - - Once created, generate an analysis key from the Analysis settings + - In your analysis, click **"Connect with external tool"** + - In the popup window, click **"Copy Analysis Key"** - Format looks like: `ana_XXXXXXXX:eyJhbGc...` (`analysis_id`:`JWT token`) - - **Note:** Analysis keys are specific to each analysis run + - **Note:** Analysis keys are specific to each analysis run and expire after 10 minutes ### Part 2: Install Dependencies From 60e116b80535ec4af4830c4557014c81adc4dfc1 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 09:47:17 -0400 Subject: [PATCH 14/36] Add sample data upload step to Quick Setup Added explicit step to upload examples/sample_ic50_data.csv to the analysis. Noted that in production usage, this would be an existing dataset or results table from experiments. Updated both Quick Setup and detailed instructions. --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4fe1c04..f2536ae 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,11 @@ Provided for educational purposes only; not for production use. 1. **Install R 4.5.3+** (if not already installed) 2. **Install dependencies:** `Rscript -e "renv::restore()"` -3. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) in Benchling with input dataset -4. **Get Analysis Key:** In your analysis, click **"Connect with external tool"** → **"Copy Analysis Key"** -5. **Run the workflow:** The script will prompt for your analysis key - that's it! +3. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) in Benchling +4. **Upload Sample Data:** Attach `examples/sample_ic50_data.csv` as an input dataset to your analysis + - **Note:** In production usage, this would be an existing dataset or results table from your experiments +5. **Get Analysis Key:** In your analysis, click **"Connect with external tool"** → **"Copy Analysis Key"** +6. **Run the workflow:** The script will prompt for your analysis key - that's it! ## Authentication Methods @@ -60,12 +62,14 @@ Analyses are where you'll attach input datasets and receive output results. - **Description:** Optional, explains what this analysis does 3. **Attach Input Dataset:** - Click **"Add Input"** → **"Dataset"** - - Select or upload a CSV dataset with your mortality data + - **For this example:** Upload `examples/sample_ic50_data.csv` from this repository + - **For production use:** Select an existing dataset or results table from your experiments - **Required columns:** - `Cell.Mortality.Concentration` - Drug concentration values - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours - `Cell.Line.Name` - Cell line identifier - **Example data format:** + + **Example data format:** 4. **Get the Analysis Key:** - In your analysis, click **"Connect with external tool"** - In the popup window, click **"Copy Analysis Key"** From 907d1d89034a03bb676060bda16bce6067cba4fb Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 09:51:44 -0400 Subject: [PATCH 15/36] Add clear section markers for switching between JWT and OAuth2 Added START/END markers around authentication sections to make it obvious which code blocks to comment/uncomment when switching approaches: get_dataframe.R: - ### START: JWT AUTHENTICATION (Comment out this entire section if using OAuth2) ### - ### END: JWT AUTHENTICATION ### - ### START: OAUTH2 AUTHENTICATION (Uncomment this entire section if using OAuth2) ### - ### END: OAUTH2 AUTHENTICATION ### app.R: - Similar markers around JWT sections - Reference to get_dataframe.R lines for OAuth2 pattern Makes it much easier for users to switch between authentication methods. --- app.R | 15 ++++++++++----- get_dataframe.R | 6 ++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app.R b/app.R index ca1973c..e6522b8 100644 --- a/app.R +++ b/app.R @@ -53,13 +53,16 @@ server <- function(input, output) { # To switch to Benchling App credentials for long-running workflows: # 1. See commented OAuth2 code in get_dataframe.R for the pattern # 2. Load credentials at app startup (before ui definition) - # 3. Replace JWT extraction below with OAuth2 token generation - # 4. Change UI label from "Analysis Key" to "Analysis ID" + # 3. Comment out the JWT sections below (marked with START/END) + # 4. Uncomment and adapt OAuth2 code from get_dataframe.R + # 5. Change UI label from "Analysis Key" to "Analysis ID" # # Current approach: User-attributable, 10-minute expiration # OAuth2 approach: App-attributable, permanent credentials ################################################################################ + ### START: JWT AUTHENTICATION (Comment out these sections if using OAuth2) ### + # Extract subdomain from analysis key JWT subdomain <- reactive({ split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) @@ -72,14 +75,16 @@ server <- function(input, output) { # Get dataset from Benchling datasetInput <- reactive({ - # Option 1: Analysis Key (JWT) - CURRENT DEFAULT # Parse analysis key to extract JWT token key_parts <- strsplit(input$DatasetKey, ":", fixed = TRUE)[[1]] analysis_id <- key_parts[1] access_token <- key_parts[2] # JWT token IS the bearer token! - # Option 2: Benchling App (OAuth2) - See get_dataframe.R for full pattern - # Uncomment and adapt OAuth2 code from get_dataframe.R here if needed + ### END: JWT AUTHENTICATION ### + + ### START: OAUTH2 AUTHENTICATION (Uncomment and adapt from get_dataframe.R if needed) ### + # See get_dataframe.R lines 108-167 for the complete OAuth2 implementation pattern + ### END: OAUTH2 AUTHENTICATION ### # Get analysis endpoint <- "/api/v2-beta/analyses/" diff --git a/get_dataframe.R b/get_dataframe.R index 1ebf7bc..50fd2a4 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -31,6 +31,7 @@ library(base64enc) ################################################################################ # Option 1: Analysis Key Authentication (JWT) - CURRENT DEFAULT ################################################################################ +### START: JWT AUTHENTICATION (Comment out this entire section if using OAuth2) ### # Check if analysis key is in environment (optional) analysis_key <- Sys.getenv("BENCHLING_ANALYSIS_KEY") @@ -102,9 +103,12 @@ tryCatch({ )) }) +### END: JWT AUTHENTICATION ### + ################################################################################ # Option 2: Benchling App Authentication (OAuth2) - COMMENTED OUT BY DEFAULT ################################################################################ +### START: OAUTH2 AUTHENTICATION (Uncomment this entire section if using OAuth2) ### # # Use this approach for: # - Long-running workflows (>10 minutes) @@ -160,6 +164,8 @@ tryCatch({ # # cat("✓ OAuth2 authentication successful (app-attributable)\n") # cat(" Token expires in:", request_body$expires_in, "seconds\n\n") +# +### END: OAUTH2 AUTHENTICATION ### ################################################################################ ############################################################### From ffbf3376f2fe6b1d518e053490951a019e009bba Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 10:27:24 -0400 Subject: [PATCH 16/36] Simplify app.R authentication switching with USE_OAUTH2 flag Replaced comment/uncomment blocks with a single flag at top of file: - USE_OAUTH2 <- FALSE (default, JWT authentication) - USE_OAUTH2 <- TRUE (OAuth2 with app credentials) Benefits: - Much simpler switching - just change one line - Same UX for both methods (paste full analysis key) - Clear configuration section at top - OAuth2 credentials only loaded when needed Also: - Added Shiny packages to renv.lock (shiny, shinythemes, shinycssloaders) - Updated CLAUDE.md with current line references (gitignored) - Confirmed README already shows correct shiny::runApp() usage --- app.R | 79 +- renv.lock | 4440 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 4362 insertions(+), 157 deletions(-) diff --git a/app.R b/app.R index e6522b8..8489ad9 100644 --- a/app.R +++ b/app.R @@ -12,6 +12,23 @@ library(htmlwidgets) # Source utility functions source("utils.R") +################################################################################ +# AUTHENTICATION CONFIGURATION - Set your method here +################################################################################ +USE_OAUTH2 <- TRUE # Set to FALSE for JWT (default), TRUE for OAuth2 + +# OAuth2 credentials (only used if USE_OAUTH2 = TRUE) +if (USE_OAUTH2) { + client_id <- Sys.getenv("BENCHLING_CLIENT_ID") + client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") + subdomain_fixed <- Sys.getenv("BENCHLING_TENANT_SUBDOMAIN") + + if (client_id == "" || client_secret == "" || subdomain_fixed == "") { + stop("OAuth2 enabled but credentials missing! Set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_TENANT_SUBDOMAIN in .Renviron") + } +} +################################################################################ + # Define UI ui <- fluidPage(theme = shinytheme("cerulean"), @@ -47,44 +64,50 @@ ui <- fluidPage(theme = shinytheme("cerulean"), # Define server function server <- function(input, output) { - ################################################################################ - # AUTHENTICATION: This app uses Analysis Key (JWT) by default - # - # To switch to Benchling App credentials for long-running workflows: - # 1. See commented OAuth2 code in get_dataframe.R for the pattern - # 2. Load credentials at app startup (before ui definition) - # 3. Comment out the JWT sections below (marked with START/END) - # 4. Uncomment and adapt OAuth2 code from get_dataframe.R - # 5. Change UI label from "Analysis Key" to "Analysis ID" - # - # Current approach: User-attributable, 10-minute expiration - # OAuth2 approach: App-attributable, permanent credentials - ################################################################################ - - ### START: JWT AUTHENTICATION (Comment out these sections if using OAuth2) ### - - # Extract subdomain from analysis key JWT + # Extract subdomain subdomain <- reactive({ - split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) - payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) - subdomain_raw <- payload$aud - # Remove .benchling.com if present - gsub("\\.benchling\\.com$", "", subdomain_raw) + if (USE_OAUTH2) { + # OAuth2: use fixed subdomain from credentials + subdomain_fixed + } else { + # JWT: extract from analysis key + split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) + payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) + subdomain_raw <- payload$aud + gsub("\\.benchling\\.com$", "", subdomain_raw) + } }) # Get dataset from Benchling datasetInput <- reactive({ - # Parse analysis key to extract JWT token + # Extract analysis ID from key key_parts <- strsplit(input$DatasetKey, ":", fixed = TRUE)[[1]] analysis_id <- key_parts[1] - access_token <- key_parts[2] # JWT token IS the bearer token! - ### END: JWT AUTHENTICATION ### + # Get access token based on auth method + if (USE_OAUTH2) { + # OAuth2: Generate token from app credentials + token_url <- paste0("https://", subdomain_fixed, ".benchling.com/api/v2/token") + token_request <- httr::POST( + url = token_url, + body = paste0("client_id=", client_id, + "&client_secret=", client_secret, + "&grant_type=client_credentials"), + httr::accept('application/json'), + httr::content_type('application/x-www-form-urlencoded') + ) + + if (token_request$status_code != 200) { + stop("OAuth2 authentication failed!") + } - ### START: OAUTH2 AUTHENTICATION (Uncomment and adapt from get_dataframe.R if needed) ### - # See get_dataframe.R lines 108-167 for the complete OAuth2 implementation pattern - ### END: OAUTH2 AUTHENTICATION ### + request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) + access_token <- request_body$access_token + } else { + # JWT: Use token from analysis key + access_token <- key_parts[2] + } # Get analysis endpoint <- "/api/v2-beta/analyses/" diff --git a/renv.lock b/renv.lock index 0a272f6..cbb3c39 100644 --- a/renv.lock +++ b/renv.lock @@ -9,6 +9,159 @@ ] }, "Packages": { + "Deriv": { + "Package": "Deriv", + "Version": "4.2.0", + "Source": "Repository", + "Type": "Package", + "Title": "Symbolic Differentiation", + "Date": "2025-06-20", + "Authors@R": "c(person(given=\"Andrew\", family=\"Clausen\", role=\"aut\"), person(given=\"Serguei\", family=\"Sokol\", role=c(\"aut\", \"cre\"), email=\"sokol@insa-toulouse.fr\", comment = c(ORCID = \"0000-0002-5674-3327\")), person(given=\"Andreas\", family=\"Rappold\", role=\"ctb\", email=\"arappold@gmx.at\"))", + "Description": "R-based solution for symbolic differentiation. It admits user-defined function as well as function substitution in arguments of functions to be differentiated. Some symbolic simplification is part of the work.", + "License": "GPL (>= 3)", + "Suggests": [ + "testthat (>= 0.11.0)" + ], + "BugReports": "https://github.com/sgsokol/Deriv/issues", + "RoxygenNote": "7.3.1", + "Imports": [ + "methods" + ], + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Andrew Clausen [aut], Serguei Sokol [aut, cre] (ORCID: ), Andreas Rappold [ctb]", + "Maintainer": "Serguei Sokol ", + "Repository": "CRAN" + }, + "Formula": { + "Package": "Formula", + "Version": "1.2-5", + "Source": "Repository", + "Date": "2023-02-23", + "Title": "Extended Model Formulas", + "Description": "Infrastructure for extended formulas with multiple parts on the right-hand side and/or multiple responses on the left-hand side (see ).", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Yves\", family = \"Croissant\", role = \"aut\", email = \"Yves.Croissant@univ-reunion.fr\"))", + "Depends": [ + "R (>= 2.0.0)", + "stats" + ], + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "no", + "Author": "Achim Zeileis [aut, cre] (), Yves Croissant [aut]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "MASS": { + "Package": "MASS", + "Version": "7.3-65", + "Source": "Repository", + "Priority": "recommended", + "Date": "2025-02-19", + "Revision": "$Rev: 3681 $", + "Depends": [ + "R (>= 4.4.0)", + "grDevices", + "graphics", + "stats", + "utils" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "lattice", + "nlme", + "nnet", + "survival" + ], + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"Bill\", \"Venables\", role = c(\"aut\", \"cph\")), person(c(\"Douglas\", \"M.\"), \"Bates\", role = \"ctb\"), person(\"Kurt\", \"Hornik\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"Albrecht\", \"Gebhardt\", role = \"trl\", comment = \"partial port ca 1998\"), person(\"David\", \"Firth\", role = \"ctb\", comment = \"support functions for polr\"))", + "Description": "Functions and datasets to support Venables and Ripley, \"Modern Applied Statistics with S\" (4th edition, 2002).", + "Title": "Support Functions and Datasets for Venables and Ripley's MASS", + "LazyData": "yes", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "Contact": "", + "NeedsCompilation": "yes", + "Author": "Brian Ripley [aut, cre, cph], Bill Venables [aut, cph], Douglas M. Bates [ctb], Kurt Hornik [trl] (partial port ca 1998), Albrecht Gebhardt [trl] (partial port ca 1998), David Firth [ctb] (support functions for polr)", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN" + }, + "Matrix": { + "Package": "Matrix", + "Version": "1.7-5", + "Source": "Repository", + "VersionNote": "do also bump src/version.h, inst/include/Matrix/version.h", + "Date": "2026-03-20", + "Priority": "recommended", + "Title": "Sparse and Dense Matrix Classes and Methods", + "Description": "A rich hierarchy of sparse and dense matrix classes, including general, symmetric, triangular, and diagonal matrices with numeric, logical, or pattern entries. Efficient methods for operating on such matrices, often wrapping the 'BLAS', 'LAPACK', and 'SuiteSparse' libraries.", + "License": "GPL (>= 2) | file LICENCE", + "URL": "https://Matrix.R-forge.R-project.org", + "BugReports": "https://R-forge.R-project.org/tracker/?atid=294&group_id=61", + "Contact": "Matrix-authors@R-project.org", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Timothy A.\", \"Davis\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7614-6899\", \"SuiteSparse libraries\", \"collaborators listed in dir(system.file(\\\"doc\\\", \\\"SuiteSparse\\\", package=\\\"Matrix\\\"), pattern=\\\"License\\\", full.names=TRUE, recursive=TRUE)\")), person(\"George\", \"Karypis\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2753-1437\", \"METIS library\", \"Copyright: Regents of the University of Minnesota\")), person(\"Jason\", \"Riedy\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4345-4200\", \"GNU Octave's condest() and onenormest()\", \"Copyright: Regents of the University of California\")), person(\"Jens\", \"Oehlschlägel\", role = \"ctb\", comment = \"initial nearPD()\"), person(\"R Core Team\", role = \"ctb\", comment = c(ROR = \"02zz1nj61\", \"base R's matrix implementation\")))", + "Depends": [ + "R (>= 4.4)", + "methods" + ], + "Imports": [ + "grDevices", + "graphics", + "grid", + "lattice", + "stats", + "utils" + ], + "Suggests": [ + "MASS", + "datasets", + "sfsmisc", + "tools" + ], + "Enhances": [ + "SparseM", + "graph" + ], + "LazyData": "no", + "LazyDataNote": "not possible, since we use data/*.R and our S4 classes", + "BuildResaveData": "no", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut, cre] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Timothy A. Davis [ctb] (ORCID: , SuiteSparse libraries, collaborators listed in dir(system.file(\"doc\", \"SuiteSparse\", package=\"Matrix\"), pattern=\"License\", full.names=TRUE, recursive=TRUE)), George Karypis [ctb] (ORCID: , METIS library, Copyright: Regents of the University of Minnesota), Jason Riedy [ctb] (ORCID: , GNU Octave's condest() and onenormest(), Copyright: Regents of the University of California), Jens Oehlschlägel [ctb] (initial nearPD()), R Core Team [ctb] (ROR: , base R's matrix implementation)", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "MatrixModels": { + "Package": "MatrixModels", + "Version": "0.5-4", + "Source": "Repository", + "VersionNote": "Released 0.5-3 on 2023-11-06", + "Date": "2025-03-25", + "Title": "Modelling with Sparse and Dense Matrices", + "Contact": "Matrix-authors@R-project.org", + "Authors@R": "c( person(\"Douglas\", \"Bates\", role = \"aut\", email = \"bates@stat.wisc.edu\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = c(\"aut\", \"cre\"), email = \"mmaechler+Matrix@gmail.com\", comment = c(ORCID = \"0000-0002-8685-9910\")))", + "Description": "Generalized Linear Modelling with sparse and dense 'Matrix' matrices, using modular prediction and response module classes.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "stats", + "methods", + "Matrix (>= 1.6-0)", + "Matrix(< 1.8-0)" + ], + "ImportsNote": "_not_yet_stats4", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "License": "GPL (>= 2)", + "URL": "https://Matrix.R-forge.R-project.org/, https://r-forge.r-project.org/R/?group_id=61", + "BugReports": "https://R-forge.R-project.org/tracker/?func=add&atid=294&group_id=61", + "NeedsCompilation": "no", + "Author": "Douglas Bates [aut] (), Martin Maechler [aut, cre] ()", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, "R6": { "Package": "R6", "Version": "2.6.1", @@ -35,190 +188,3181 @@ "Maintainer": "Winston Chang ", "Repository": "CRAN" }, - "askpass": { - "Package": "askpass", - "Version": "1.2.1", + "RColorBrewer": { + "Package": "RColorBrewer", + "Version": "1.1-3", "Source": "Repository", - "Type": "Package", - "Title": "Password Entry Utilities for R, Git, and SSH", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.r-universe.dev/askpass", - "BugReports": "https://github.com/r-lib/askpass/issues", + "Date": "2022-04-03", + "Title": "ColorBrewer Palettes", + "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", + "Author": "Erich Neuwirth [aut, cre]", + "Maintainer": "Erich Neuwirth ", + "Depends": [ + "R (>= 2.0.0)" + ], + "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", + "License": "Apache License 2.0", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "Rcpp": { + "Package": "Rcpp", + "Version": "1.1.1", + "Source": "Repository", + "Title": "Seamless R and C++ Integration", + "Date": "2026-01-07", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", + "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "methods", + "utils" + ], + "Suggests": [ + "tinytest", + "inline", + "rbenchmark", + "pkgKitten (>= 0.1.2)" + ], + "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", + "License": "GPL (>= 2)", + "BugReports": "https://github.com/RcppCore/Rcpp/issues", + "MailingList": "rcpp-devel@lists.r-forge.r-project.org", + "RoxygenNote": "6.1.1", "Encoding": "UTF-8", + "VignetteBuilder": "Rcpp", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), JJ Allaire [aut] (ORCID: ), Kevin Ushey [aut] (ORCID: ), Qiang Kou [aut] (ORCID: ), Nathan Russell [aut], Iñaki Ucar [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), John Chambers [aut]", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "RcppArmadillo": { + "Package": "RcppArmadillo", + "Version": "15.2.4-1", + "Source": "Repository", + "Type": "Package", + "Title": "'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library", + "Date": "2026-03-17", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Binxiang\", \"Ni\", role = \"aut\"), person(\"Conrad\", \"Sanderson\", role = \"aut\", comment = c(ORCID = \"0000-0002-0049-4501\")))", + "Description": "'Armadillo' is a templated C++ linear algebra library aiming towards a good balance between speed and ease of use. It provides high-level syntax and functionality deliberately similar to Matlab. It is useful for algorithm development directly in C++, or quick conversion of research code into production environments. It provides efficient classes for vectors, matrices and cubes where dense and sparse matrices are supported. Integer, floating point and complex numbers are supported. A sophisticated expression evaluator (based on template meta-programming) automatically combines several operations to increase speed and efficiency. Dynamic evaluation automatically chooses optimal code paths based on detected matrix structures. Matrix decompositions are provided through integration with LAPACK, or one of its high performance drop-in replacements (such as 'MKL' or 'OpenBLAS'). It can automatically use 'OpenMP' multi-threading (parallelisation) to speed up computationally expensive operations. . The 'RcppArmadillo' package includes the header files from the 'Armadillo' library; users do not need to install 'Armadillo' itself in order to use 'RcppArmadillo'. Starting from release 15.0.0, the minimum compilation standard is C++14 so 'Armadillo' version 14.6.3 is included as a fallback when an R package forces the C++11 standard. Package authors should set a '#define' to select the 'current' version, or select the 'legacy' version (also chosen as default) if they must. See 'GitHub issue #475' for details. . Since release 7.800.0, 'Armadillo' is licensed under Apache License 2; previous releases were under licensed as MPL 2.0 from version 3.800.0 onwards and LGPL-3 prior to that; 'RcppArmadillo' (the 'Rcpp' bindings/bridge to Armadillo) is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", + "License": "GPL (>= 2)", + "LazyLoad": "yes", + "Depends": [ + "R (>= 3.3.0)" + ], + "LinkingTo": [ + "Rcpp" + ], "Imports": [ - "sys (>= 2.1)" + "Rcpp (>= 1.0.12)", + "stats", + "utils", + "methods" ], - "RoxygenNote": "7.2.3", "Suggests": [ - "testthat" + "tinytest", + "Matrix (>= 1.3.0)", + "pkgKitten", + "reticulate", + "slam" ], - "Language": "en-US", + "URL": "https://github.com/RcppCore/RcppArmadillo, https://dirk.eddelbuettel.com/code/rcpp.armadillo.html", + "BugReports": "https://github.com/RcppCore/RcppArmadillo/issues", + "RoxygenNote": "6.0.1", "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Romain Francois [aut] (ORCID: ), Doug Bates [aut] (ORCID: ), Binxiang Ni [aut], Conrad Sanderson [aut] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", "Repository": "CRAN" }, - "curl": { - "Package": "curl", - "Version": "7.0.0", + "RcppEigen": { + "Package": "RcppEigen", + "Version": "0.3.4.0.2", "Source": "Repository", "Type": "Package", - "Title": "A Modern and Flexible Web Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", - "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", - "License": "MIT + file LICENSE", - "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", - "URL": "https://jeroen.r-universe.dev/curl", - "BugReports": "https://github.com/jeroen/curl/issues", + "Title": "'Rcpp' Integration for the 'Eigen' Templated Linear Algebra Library", + "Date": "2024-08-23", + "Authors@R": "c(person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Yixuan\", \"Qiu\", role = \"aut\", comment = c(ORCID = \"0000-0003-0109-6692\")), person(\"Authors of\", \"Eigen\", role = \"cph\", comment = \"Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS\"))", + "Copyright": "See the file COPYRIGHTS for various Eigen copyright details", + "Description": "R and 'Eigen' integration using 'Rcpp'. 'Eigen' is a C++ template library for linear algebra: matrices, vectors, numerical solvers and related algorithms. It supports dense and sparse matrices on integer, floating point and complex numbers, decompositions of such matrices, and solutions of linear systems. Its performance on many algorithms is comparable with some of the best implementations based on 'Lapack' and level-3 'BLAS'. The 'RcppEigen' package includes the header files from the 'Eigen' C++ template library. Thus users do not need to install 'Eigen' itself in order to use 'RcppEigen'. Since version 3.1.1, 'Eigen' is licensed under the Mozilla Public License (version 2); earlier version were licensed under the GNU LGPL version 3 or later. 'RcppEigen' (the 'Rcpp' bindings/bridge to 'Eigen') is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.", + "License": "GPL (>= 2) | file LICENSE", + "LazyLoad": "yes", + "Depends": [ + "R (>= 3.6.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "Imports": [ + "Rcpp (>= 0.11.0)", + "stats", + "utils" + ], "Suggests": [ - "spelling", - "testthat (>= 1.0.0)", - "knitr", - "jsonlite", - "later", - "rmarkdown", - "httpuv (>= 1.4.4)", - "webutils" + "Matrix", + "inline", + "tinytest", + "pkgKitten", + "microbenchmark" ], - "VignetteBuilder": "knitr", + "URL": "https://github.com/RcppCore/RcppEigen, https://dirk.eddelbuettel.com/code/rcpp.eigen.html", + "BugReports": "https://github.com/RcppCore/RcppEigen/issues", + "NeedsCompilation": "yes", + "Author": "Doug Bates [aut] (), Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), Yixuan Qiu [aut] (), Authors of Eigen [cph] (Authorship and copyright in included Eigen library as detailed in inst/COPYRIGHTS)", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "Rdpack": { + "Package": "Rdpack", + "Version": "2.6.6", + "Source": "Repository", + "Type": "Package", + "Title": "Update and Manipulate Rd Documentation Objects", + "Authors@R": "c( person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"aut\", \"cre\"), email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\")), person(given = \"Duncan\", family = \"Murdoch\", role = \"ctb\", email = \"murdoch.duncan@gmail.com\") )", + "Description": "Functions for manipulation of R documentation objects, including functions reprompt() and ereprompt() for updating 'Rd' documentation for functions, methods and classes; 'Rd' macros for citations and import of references from 'bibtex' files for use in 'Rd' files and 'roxygen2' comments; 'Rd' macros for evaluating and inserting snippets of 'R' code and the results of its evaluation or creating graphics on the fly; and many functions for manipulation of references and Rd files.", + "URL": "https://geobosh.github.io/Rdpack/ (doc), https://CRAN.R-project.org/package=Rdpack", + "BugReports": "https://github.com/GeoBosh/Rdpack/issues", "Depends": [ - "R (>= 3.0.0)" + "R (>= 2.15.0)", + "methods" ], - "RoxygenNote": "7.3.2", + "Imports": [ + "tools", + "utils", + "rbibutils (> 2.4)" + ], + "Suggests": [ + "grDevices", + "testthat", + "rstudioapi", + "rprojroot", + "gbRd" + ], + "License": "GPL (>= 2)", + "LazyLoad": "yes", "Encoding": "UTF-8", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", - "Maintainer": "Jeroen Ooms ", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Author": "Georgi N. Boshnakov [aut, cre] (ORCID: ), Duncan Murdoch [ctb]", + "Maintainer": "Georgi N. Boshnakov ", "Repository": "CRAN" }, - "httr": { - "Package": "httr", - "Version": "1.4.8", + "S7": { + "Package": "S7", + "Version": "0.2.1", "Source": "Repository", - "Title": "Tools for Working with URLs and HTTP", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", + "Title": "An Object Oriented System Meant to Become a Successor to S3 and S4", + "Authors@R": "c( person(\"Object-Oriented Programming Working Group\", role = \"cph\"), person(\"Davis\", \"Vaughan\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"Will\", \"Landau\", role = \"aut\"), person(\"Michael\", \"Lawrence\", role = \"aut\"), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Luke\", \"Tierney\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")) )", + "Description": "A new object oriented programming system designed to be a successor to S3 and S4. It includes formal class, generic, and method specification, and a limited form of multiple dispatch. It has been designed and implemented collaboratively by the R Consortium Object-Oriented Programming Working Group, which includes representatives from R-Core, 'Bioconductor', 'Posit'/'tidyverse', and the wider R community.", "License": "MIT + file LICENSE", - "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", - "BugReports": "https://github.com/r-lib/httr/issues", + "URL": "https://rconsortium.github.io/S7/, https://github.com/RConsortium/S7", + "BugReports": "https://github.com/RConsortium/S7/issues", "Depends": [ - "R (>= 3.6)" + "R (>= 3.5.0)" ], "Imports": [ - "curl (>= 5.1.0)", - "jsonlite", - "mime", - "openssl (>= 0.8)", - "R6" + "utils" ], "Suggests": [ + "bench", + "callr", "covr", - "httpuv", - "jpeg", "knitr", - "png", - "readr", + "methods", "rmarkdown", - "testthat (>= 0.8.0)", - "xml2" + "testthat (>= 3.2.0)", + "tibble" ], "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", + "Config/build/compilation-database": "true", + "Config/Needs/website": "sloop", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Config/testthat/start-first": "external-generic", "Encoding": "UTF-8", "RoxygenNote": "7.3.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", + "NeedsCompilation": "yes", + "Author": "Object-Oriented Programming Working Group [cph], Davis Vaughan [aut], Jim Hester [aut] (ORCID: ), Tomasz Kalinowski [aut], Will Landau [aut], Michael Lawrence [aut], Martin Maechler [aut] (ORCID: ), Luke Tierney [aut], Hadley Wickham [aut, cre] (ORCID: )", "Maintainer": "Hadley Wickham ", "Repository": "CRAN" }, - "jsonlite": { - "Package": "jsonlite", - "Version": "2.0.0", + "SparseM": { + "Package": "SparseM", + "Version": "1.84-2", "Source": "Repository", - "Title": "A Simple and Robust JSON Parser and Generator for R", - "License": "MIT + file LICENSE", + "Authors@R": "c( person(\"Roger\", \"Koenker\", role = c(\"cre\",\"aut\"), email = \"rkoenker@uiuc.edu\"), person(c(\"Pin\", \"Tian\"), \"Ng\", role = c(\"ctb\"), comment = \"Contributions to Sparse QR code\", email = \"pin.ng@nau.edu\") , person(\"Yousef\", \"Saad\", role = c(\"ctb\"), comment = \"author of sparskit2\") , person(\"Ben\", \"Shaby\", role = c(\"ctb\"), comment = \"author of chol2csr\") , person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(\"chol() tweaks; S4\", ORCID = \"0000-0002-8685-9910\")) )", + "Maintainer": "Roger Koenker ", "Depends": [ + "R (>= 2.15)", "methods" ], - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", - "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", - "BugReports": "https://github.com/jeroen/jsonlite/issues", - "Maintainer": "Jeroen Ooms ", - "VignetteBuilder": "knitr, R.rsp", - "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", + "Imports": [ + "graphics", + "stats", + "utils" + ], + "VignetteBuilder": "knitr", "Suggests": [ - "httr", - "vctrs", - "testthat", - "knitr", - "rmarkdown", - "R.rsp", - "sf" + "knitr" ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", + "Description": "Some basic linear algebra functionality for sparse matrices is provided: including Cholesky decomposition and backsolving as well as standard R subsetting and Kronecker products.", + "License": "GPL (>= 2)", + "Title": "Sparse Linear Algebra", + "URL": "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html", "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", + "Author": "Roger Koenker [cre, aut], Pin Tian Ng [ctb] (Contributions to Sparse QR code), Yousef Saad [ctb] (author of sparskit2), Ben Shaby [ctb] (author of chol2csr), Martin Maechler [ctb] (chol() tweaks; S4, )", "Repository": "CRAN" }, - "mime": { - "Package": "mime", - "Version": "0.13", + "TH.data": { + "Package": "TH.data", + "Version": "1.1-5", "Source": "Repository", - "Type": "Package", - "Title": "Map Filenames to MIME Types", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", - "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", + "Title": "TH's Data Archive", + "Date": "2025-11-17", + "Authors@R": "c(person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\"))", + "Description": "Contains data sets used in other packages Torsten Hothorn maintains.", + "Depends": [ + "R (>= 3.5.0)", + "survival", + "MASS" + ], + "Suggests": [ + "trtf", + "tram", + "rms", + "coin", + "ATR", + "multcomp", + "gridExtra", + "vcd", + "colorspace", + "lattice", + "knitr", + "dplyr", + "openxlsx", + "plyr" + ], + "LazyData": "yes", + "VignetteBuilder": "knitr", + "License": "GPL-3", + "NeedsCompilation": "no", + "Author": "Torsten Hothorn [aut, cre]", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN" + }, + "abind": { + "Package": "abind", + "Version": "1.4-8", + "Source": "Repository", + "Date": "2024-09-08", + "Title": "Combine Multidimensional Arrays", + "Authors@R": "c(person(\"Tony\", \"Plate\", email = \"tplate@acm.org\", role = c(\"aut\", \"cre\")), person(\"Richard\", \"Heiberger\", role = c(\"aut\")))", + "Maintainer": "Tony Plate ", + "Description": "Combine multidimensional arrays into a single array. This is a generalization of 'cbind' and 'rbind'. Works with vectors, matrices, and higher-dimensional arrays (aka tensors). Also provides functions 'adrop', 'asub', and 'afill' for manipulating, extracting and replacing data in arrays.", + "Depends": [ + "R (>= 1.5.0)" + ], "Imports": [ - "tools" + "methods", + "utils" ], - "License": "GPL", - "URL": "https://github.com/yihui/mime", - "BugReports": "https://github.com/yihui/mime/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", - "Maintainer": "Yihui Xie ", + "License": "MIT + file LICENSE", + "NeedsCompilation": "no", + "Author": "Tony Plate [aut, cre], Richard Heiberger [aut]", "Repository": "CRAN" }, - "openssl": { - "Package": "openssl", - "Version": "2.3.5", + "askpass": { + "Package": "askpass", + "Version": "1.2.1", "Source": "Repository", "Type": "Package", - "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", - "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", + "Title": "Password Entry Utilities for R, Git, and SSH", + "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", + "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/openssl", - "BugReports": "https://github.com/jeroen/openssl/issues", - "SystemRequirements": "OpenSSL >= 1.0.2", - "VignetteBuilder": "knitr", + "URL": "https://r-lib.r-universe.dev/askpass", + "BugReports": "https://github.com/r-lib/askpass/issues", + "Encoding": "UTF-8", "Imports": [ - "askpass" + "sys (>= 2.1)" ], + "RoxygenNote": "7.2.3", "Suggests": [ - "curl", - "testthat (>= 2.1.0)", - "digest", - "knitr", - "rmarkdown", - "jsonlite", - "jose", - "sodium" + "testthat" ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", + "Language": "en-US", "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", + "Author": "Jeroen Ooms [aut, cre] ()", "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" }, - "renv": { + "backports": { + "Package": "backports", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Reimplementations of Functions Introduced Since R-3.0.0", + "Authors@R": "c( person(\"Michel\", \"Lang\", NULL, \"michellang@gmail.com\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Duncan\", \"Murdoch\", NULL, \"murdoch.duncan@gmail.com\", role = c(\"aut\")), person(\"R Core Team\", role = \"aut\"))", + "Maintainer": "Michel Lang ", + "Description": "Functions introduced or changed since R v3.0.0 are re-implemented in this package. The backports are conditionally exported in order to let R resolve the function name to either the implemented backport, or the respective base version, if available. Package developers can make use of new functions or arguments by selectively importing specific backports to support older installations.", + "URL": "https://github.com/r-lib/backports", + "BugReports": "https://github.com/r-lib/backports/issues", + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "yes", + "ByteCompile": "yes", + "Depends": [ + "R (>= 3.0.0)" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "Author": "Michel Lang [cre, aut] (), Duncan Murdoch [aut], R Core Team [aut]", + "Repository": "CRAN" + }, + "base64enc": { + "Package": "base64enc", + "Version": "0.1-6", + "Source": "Repository", + "Title": "Tools for 'base64' Encoding", + "Author": "Simon Urbanek [aut, cre, cph] (https://urbanek.nz, ORCID: )", + "Authors@R": "person(\"Simon\", \"Urbanek\", role=c(\"aut\",\"cre\",\"cph\"), email=\"Simon.Urbanek@r-project.org\", comment=c(\"https://urbanek.nz\", ORCID=\"0000-0003-2297-1732\"))", + "Maintainer": "Simon Urbanek ", + "Depends": [ + "R (>= 2.9.0)" + ], + "Enhances": [ + "png" + ], + "Description": "Tools for handling 'base64' encoding. It is more flexible than the orphaned 'base64' package.", + "License": "GPL-2 | GPL-3", + "URL": "https://www.rforge.net/base64enc", + "BugReports": "https://github.com/s-u/base64enc/issues", + "NeedsCompilation": "yes", + "Repository": "CRAN" + }, + "boot": { + "Package": "boot", + "Version": "1.3-32", + "Source": "Repository", + "Priority": "recommended", + "Date": "2025-08-29", + "Authors@R": "c(person(\"Angelo\", \"Canty\", role = \"aut\", email = \"cantya@mcmaster.ca\", comment = \"author of original code for S\"), person(\"Brian\", \"Ripley\", role = c(\"aut\", \"trl\"), email = \"Brian.Ripley@R-project.org\", comment = \"conversion to R, maintainer 1999--2022, author of parallel support\"), person(\"Alessandra R.\", \"Brazzale\", role = c(\"ctb\", \"cre\"), email = \"brazzale@stat.unipd.it\", comment = \"minor bug fixes\"))", + "Maintainer": "Alessandra R. Brazzale ", + "Note": "Maintainers are not available to give advice on using a package they did not author.", + "Description": "Functions and datasets for bootstrapping from the book \"Bootstrap Methods and Their Application\" by A. C. Davison and D. V. Hinkley (1997, CUP), originally written by Angelo Canty for S.", + "Title": "Bootstrap Functions", + "Depends": [ + "R (>= 3.0.0)", + "graphics", + "stats" + ], + "Suggests": [ + "MASS", + "survival" + ], + "LazyData": "yes", + "ByteCompile": "yes", + "License": "Unlimited", + "NeedsCompilation": "no", + "Author": "Angelo Canty [aut] (author of original code for S), Brian Ripley [aut, trl] (conversion to R, maintainer 1999--2022, author of parallel support), Alessandra R. Brazzale [ctb, cre] (minor bug fixes)", + "Repository": "CRAN" + }, + "broom": { + "Package": "broom", + "Version": "1.0.12", + "Source": "Repository", + "Type": "Package", + "Title": "Convert Statistical Objects into Tidy Tibbles", + "Authors@R": "c( person(\"David\", \"Robinson\", , \"admiral.david@gmail.com\", role = \"aut\"), person(\"Alex\", \"Hayes\", , \"alexpghayes@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4985-5160\")), person(\"Simon\", \"Couch\", , \"simon.couch@posit.co\", role = c(\"aut\"), comment = c(ORCID = \"0000-0001-5676-5107\")), person(\"Emil\", \"Hvitfeldt\", , \"emil.hvitfeldt@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0679-1945\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Indrajeet\", \"Patil\", , \"patilindrajeet.science@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1995-6531\")), person(\"Derek\", \"Chiu\", , \"dchiu@bccrc.ca\", role = \"ctb\"), person(\"Matthieu\", \"Gomez\", , \"mattg@princeton.edu\", role = \"ctb\"), person(\"Boris\", \"Demeshev\", , \"boris.demeshev@gmail.com\", role = \"ctb\"), person(\"Dieter\", \"Menne\", , \"dieter.menne@menne-biomed.de\", role = \"ctb\"), person(\"Benjamin\", \"Nutter\", , \"nutter@battelle.org\", role = \"ctb\"), person(\"Luke\", \"Johnston\", , \"luke.johnston@mail.utoronto.ca\", role = \"ctb\"), person(\"Ben\", \"Bolker\", , \"bolker@mcmaster.ca\", role = \"ctb\"), person(\"Francois\", \"Briatte\", , \"f.briatte@gmail.com\", role = \"ctb\"), person(\"Jeffrey\", \"Arnold\", , \"jeffrey.arnold@gmail.com\", role = \"ctb\"), person(\"Jonah\", \"Gabry\", , \"jsg2201@columbia.edu\", role = \"ctb\"), person(\"Luciano\", \"Selzer\", , \"luciano.selzer@gmail.com\", role = \"ctb\"), person(\"Gavin\", \"Simpson\", , \"ucfagls@gmail.com\", role = \"ctb\"), person(\"Jens\", \"Preussner\", , \"jens.preussner@mpi-bn.mpg.de\", role = \"ctb\"), person(\"Jay\", \"Hesselberth\", , \"jay.hesselberth@gmail.com\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"ctb\"), person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = \"ctb\"), person(\"Alessandro\", \"Gasparini\", , \"ag475@leicester.ac.uk\", role = \"ctb\"), person(\"Lukasz\", \"Komsta\", , \"lukasz.komsta@umlub.pl\", role = \"ctb\"), person(\"Frederick\", \"Novometsky\", role = \"ctb\"), person(\"Wilson\", \"Freitas\", role = \"ctb\"), person(\"Michelle\", \"Evans\", role = \"ctb\"), person(\"Jason Cory\", \"Brunson\", , \"cornelioid@gmail.com\", role = \"ctb\"), person(\"Simon\", \"Jackson\", , \"drsimonjackson@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Whalley\", , \"ben.whalley@plymouth.ac.uk\", role = \"ctb\"), person(\"Karissa\", \"Whiting\", , \"karissa.whiting@gmail.com\", role = \"ctb\"), person(\"Yves\", \"Rosseel\", , \"yrosseel@gmail.com\", role = \"ctb\"), person(\"Michael\", \"Kuehn\", , \"mkuehn10@gmail.com\", role = \"ctb\"), person(\"Jorge\", \"Cimentada\", , \"cimentadaj@gmail.com\", role = \"ctb\"), person(\"Erle\", \"Holgersen\", , \"erle.holgersen@gmail.com\", role = \"ctb\"), person(\"Karl\", \"Dunkle Werner\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0523-7309\")), person(\"Ethan\", \"Christensen\", , \"christensen.ej@gmail.com\", role = \"ctb\"), person(\"Steven\", \"Pav\", , \"shabbychef@gmail.com\", role = \"ctb\"), person(\"Paul\", \"PJ\", , \"pjpaul.stephens@gmail.com\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Patrick\", \"Kennedy\", , \"pkqstr@protonmail.com\", role = \"ctb\"), person(\"Lily\", \"Medina\", , \"lilymiru@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Fannin\", , \"captain@pirategrunt.com\", role = \"ctb\"), person(\"Jason\", \"Muhlenkamp\", , \"jason.muhlenkamp@gmail.com\", role = \"ctb\"), person(\"Matt\", \"Lehman\", role = \"ctb\"), person(\"Bill\", \"Denney\", , \"wdenney@humanpredictions.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Nic\", \"Crane\", role = \"ctb\"), person(\"Andrew\", \"Bates\", role = \"ctb\"), person(\"Vincent\", \"Arel-Bundock\", , \"vincent.arel-bundock@umontreal.ca\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2042-7063\")), person(\"Hideaki\", \"Hayashi\", role = \"ctb\"), person(\"Luis\", \"Tobalina\", role = \"ctb\"), person(\"Annie\", \"Wang\", , \"anniewang.uc@gmail.com\", role = \"ctb\"), person(\"Wei Yang\", \"Tham\", , \"weiyang.tham@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", , \"clara.wang.94@gmail.com\", role = \"ctb\"), person(\"Abby\", \"Smith\", , \"als1@u.northwestern.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3207-0375\")), person(\"Jasper\", \"Cooper\", , \"jaspercooper@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8639-3188\")), person(\"E Auden\", \"Krauska\", , \"krauskae@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1466-5850\")), person(\"Alex\", \"Wang\", , \"x249wang@uwaterloo.ca\", role = \"ctb\"), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Charles\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9978-011X\")), person(\"Jared\", \"Wilber\", role = \"ctb\"), person(\"Vilmantas\", \"Gegzna\", , \"GegznaV@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-9500-5167\")), person(\"Eduard\", \"Szoecs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Angus\", \"Moore\", , \"angusmoore9@gmail.com\", role = \"ctb\"), person(\"Nick\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Marius\", \"Barth\", , \"marius.barth.uni.koeln@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-3421-6665\")), person(\"Bruna\", \"Wundervald\", , \"brunadaviesw@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8163-220X\")), person(\"Joyce\", \"Cahoon\", , \"joyceyu48@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7217-4702\")), person(\"Grant\", \"McDermott\", , \"grantmcd@uoregon.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0001-7883-8573\")), person(\"Kevin\", \"Zarca\", , \"kevin.zarca@gmail.com\", role = \"ctb\"), person(\"Shiro\", \"Kuriwaki\", , \"shirokuriwaki@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5687-2647\")), person(\"Lukas\", \"Wallrich\", , \"lukas.wallrich@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-2121-5177\")), person(\"James\", \"Martherus\", , \"james@martherus.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8285-3300\")), person(\"Chuliang\", \"Xiao\", , \"cxiao@umich.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8466-9398\")), person(\"Joseph\", \"Larmarange\", , \"joseph@larmarange.net\", role = \"ctb\"), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", , \"michal2992@gmail.com\", role = \"ctb\"), person(\"Hakon\", \"Malmedal\", , \"hmalmedal@gmail.com\", role = \"ctb\"), person(\"Clara\", \"Wang\", role = \"ctb\"), person(\"Sergio\", \"Oller\", , \"sergioller@gmail.com\", role = \"ctb\"), person(\"Luke\", \"Sonnet\", , \"luke.sonnet@gmail.com\", role = \"ctb\"), person(\"Jim\", \"Hester\", , \"jim.hester@posit.co\", role = \"ctb\"), person(\"Ben\", \"Schneider\", , \"benjamin.julius.schneider@gmail.com\", role = \"ctb\"), person(\"Bernie\", \"Gray\", , \"bfgray3@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9190-6032\")), person(\"Mara\", \"Averick\", , \"mara@posit.co\", role = \"ctb\"), person(\"Aaron\", \"Jacobs\", , \"atheriel@gmail.com\", role = \"ctb\"), person(\"Andreas\", \"Bender\", , \"bender.at.R@gmail.com\", role = \"ctb\"), person(\"Sven\", \"Templer\", , \"sven.templer@gmail.com\", role = \"ctb\"), person(\"Paul-Christian\", \"Buerkner\", , \"paul.buerkner@gmail.com\", role = \"ctb\"), person(\"Matthew\", \"Kay\", , \"mjskay@umich.edu\", role = \"ctb\"), person(\"Erwan\", \"Le Pennec\", , \"lepennec@gmail.com\", role = \"ctb\"), person(\"Johan\", \"Junkka\", , \"johan.junkka@umu.se\", role = \"ctb\"), person(\"Hao\", \"Zhu\", , \"haozhu233@gmail.com\", role = \"ctb\"), person(\"Benjamin\", \"Soltoff\", , \"soltoffbc@uchicago.edu\", role = \"ctb\"), person(\"Zoe\", \"Wilkinson Saldana\", , \"zoewsaldana@gmail.com\", role = \"ctb\"), person(\"Tyler\", \"Littlefield\", , \"tylurp1@gmail.com\", role = \"ctb\"), person(\"Charles T.\", \"Gray\", , \"charlestigray@gmail.com\", role = \"ctb\"), person(\"Shabbh E.\", \"Banks\", role = \"ctb\"), person(\"Serina\", \"Robinson\", , \"robi0916@umn.edu\", role = \"ctb\"), person(\"Roger\", \"Bivand\", , \"Roger.Bivand@nhh.no\", role = \"ctb\"), person(\"Riinu\", \"Ots\", , \"riinuots@gmail.com\", role = \"ctb\"), person(\"Nicholas\", \"Williams\", , \"ntwilliams.personal@gmail.com\", role = \"ctb\"), person(\"Nina\", \"Jakobsen\", role = \"ctb\"), person(\"Michael\", \"Weylandt\", , \"michael.weylandt@gmail.com\", role = \"ctb\"), person(\"Lisa\", \"Lendway\", , \"llendway@macalester.edu\", role = \"ctb\"), person(\"Karl\", \"Hailperin\", , \"khailper@gmail.com\", role = \"ctb\"), person(\"Josue\", \"Rodriguez\", , \"jerrodriguez@ucdavis.edu\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", , \"jenny@posit.co\", role = \"ctb\"), person(\"Chris\", \"Jarvis\", , \"Christopher1.jarvis@gmail.com\", role = \"ctb\"), person(\"Greg\", \"Macfarlane\", , \"gregmacfarlane@gmail.com\", role = \"ctb\"), person(\"Brian\", \"Mannakee\", , \"bmannakee@gmail.com\", role = \"ctb\"), person(\"Drew\", \"Tyre\", , \"atyre2@unl.edu\", role = \"ctb\"), person(\"Shreyas\", \"Singh\", , \"shreyas.singh.298@gmail.com\", role = \"ctb\"), person(\"Laurens\", \"Geffert\", , \"laurensgeffert@gmail.com\", role = \"ctb\"), person(\"Hong\", \"Ooi\", , \"hongooi@microsoft.com\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", , \"henrikb@braju.com\", role = \"ctb\"), person(\"Eduard\", \"Szocs\", , \"eduardszoecs@gmail.com\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", , \"davidhughjones@gmail.com\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", , \"Matthieu.Stigler@gmail.com\", role = \"ctb\"), person(\"Hugo\", \"Tavares\", , \"hm533@cam.ac.uk\", role = \"ctb\", comment = c(ORCID = \"0000-0001-9373-2726\")), person(\"R. Willem\", \"Vervoort\", , \"Willemvervoort@gmail.com\", role = \"ctb\"), person(\"Brenton M.\", \"Wiernik\", , \"brenton@wiernik.org\", role = \"ctb\"), person(\"Josh\", \"Yamamoto\", , \"joshuayamamoto5@gmail.com\", role = \"ctb\"), person(\"Jasme\", \"Lee\", role = \"ctb\"), person(\"Taren\", \"Sanders\", , \"taren.sanders@acu.edu.au\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4504-6008\")), person(\"Ilaria\", \"Prosdocimi\", , \"prosdocimi.ilaria@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8565-094X\")), person(\"Daniel D.\", \"Sjoberg\", , \"danield.sjoberg@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0862-2018\")), person(\"Alex\", \"Reinhart\", , \"areinhar@stat.cmu.edu\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6658-514X\")) )", + "Description": "Summarizes key information about statistical objects in tidy tibbles. This makes it easy to report results, create plots and consistently work with large numbers of models at once. Broom provides three verbs that each provide different types of information about a model. tidy() summarizes information about model components such as coefficients of a regression. glance() reports information about an entire model, such as goodness of fit measures like AIC and BIC. augment() adds information about individual observations to a dataset, such as fitted values or influence measures.", + "License": "MIT + file LICENSE", + "URL": "https://broom.tidymodels.org/, https://github.com/tidymodels/broom", + "BugReports": "https://github.com/tidymodels/broom/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "backports", + "cli", + "dplyr (>= 1.0.0)", + "generics (>= 0.0.2)", + "glue", + "lifecycle", + "purrr", + "rlang (>= 1.1.0)", + "stringr", + "tibble (>= 3.0.0)", + "tidyr (>= 1.0.0)" + ], + "Suggests": [ + "AER", + "AUC", + "bbmle", + "betareg (>= 3.2-1)", + "biglm", + "binGroup", + "boot", + "btergm (>= 1.10.6)", + "car (>= 3.1-2)", + "carData", + "caret", + "cluster", + "cmprsk", + "coda", + "covr", + "drc", + "e1071", + "emmeans", + "epiR (>= 2.0.85)", + "ergm (>= 3.10.4)", + "fixest (>= 0.9.0)", + "gam (>= 1.15)", + "gee", + "geepack", + "ggplot2", + "glmnet", + "glmnetUtils", + "gmm", + "Hmisc", + "interp", + "irlba", + "joineRML", + "Kendall", + "knitr", + "ks", + "Lahman", + "lavaan (>= 0.6.18)", + "leaps", + "lfe", + "lm.beta", + "lme4", + "lmodel2", + "lmtest (>= 0.9.38)", + "lsmeans", + "maps", + "margins", + "MASS", + "mclust", + "mediation", + "metafor", + "mfx", + "mgcv", + "mlogit", + "modeldata", + "modeltests (>= 0.1.6)", + "muhaz", + "multcomp", + "network", + "nnet", + "ordinal", + "plm", + "poLCA", + "psych", + "quantreg", + "rmarkdown", + "robust", + "robustbase", + "rsample", + "sandwich", + "spatialreg", + "spdep (>= 1.1)", + "speedglm", + "spelling", + "stats4", + "survey", + "survival (>= 3.6-4)", + "systemfit", + "testthat (>= 3.0.0)", + "tseries", + "vars", + "zoo" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-25", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "Collate": "'aaa-documentation-helper.R' 'null-and-default.R' 'aer.R' 'auc.R' 'base.R' 'bbmle.R' 'betareg.R' 'biglm.R' 'bingroup.R' 'boot.R' 'broom-package.R' 'broom.R' 'btergm.R' 'car.R' 'caret.R' 'cluster.R' 'cmprsk.R' 'data-frame.R' 'deprecated-0-7-0.R' 'drc.R' 'emmeans.R' 'epiR.R' 'ergm.R' 'fixest.R' 'gam.R' 'geepack.R' 'glmnet-cv-glmnet.R' 'glmnet-glmnet.R' 'gmm.R' 'hmisc.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'joinerml.R' 'kendall.R' 'ks.R' 'lavaan.R' 'leaps.R' 'lfe.R' 'list-irlba.R' 'list-optim.R' 'list-svd.R' 'list-xyz.R' 'list.R' 'lm-beta.R' 'lmodel2.R' 'lmtest.R' 'maps.R' 'margins.R' 'mass-fitdistr.R' 'mass-negbin.R' 'mass-polr.R' 'mass-ridgelm.R' 'stats-lm.R' 'mass-rlm.R' 'mclust.R' 'mediation.R' 'metafor.R' 'mfx.R' 'mgcv.R' 'mlogit.R' 'muhaz.R' 'multcomp.R' 'nnet.R' 'nobs.R' 'ordinal-clm.R' 'ordinal-clmm.R' 'plm.R' 'polca.R' 'psych.R' 'stats-nls.R' 'quantreg-nlrq.R' 'quantreg-rq.R' 'quantreg-rqs.R' 'robust-glmrob.R' 'robust-lmrob.R' 'robustbase-glmrob.R' 'robustbase-lmrob.R' 'sp.R' 'spdep.R' 'speedglm-speedglm.R' 'speedglm-speedlm.R' 'stats-anova.R' 'stats-arima.R' 'stats-decompose.R' 'stats-factanal.R' 'stats-glm.R' 'stats-htest.R' 'stats-kmeans.R' 'stats-loess.R' 'stats-mlm.R' 'stats-prcomp.R' 'stats-smooth.spline.R' 'stats-summary-lm.R' 'stats-time-series.R' 'survey.R' 'survival-aareg.R' 'survival-cch.R' 'survival-coxph.R' 'survival-pyears.R' 'survival-survdiff.R' 'survival-survexp.R' 'survival-survfit.R' 'survival-survreg.R' 'systemfit.R' 'tseries.R' 'utilities.R' 'vars.R' 'zoo.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "David Robinson [aut], Alex Hayes [aut] (ORCID: ), Simon Couch [aut] (ORCID: ), Emil Hvitfeldt [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Indrajeet Patil [ctb] (ORCID: ), Derek Chiu [ctb], Matthieu Gomez [ctb], Boris Demeshev [ctb], Dieter Menne [ctb], Benjamin Nutter [ctb], Luke Johnston [ctb], Ben Bolker [ctb], Francois Briatte [ctb], Jeffrey Arnold [ctb], Jonah Gabry [ctb], Luciano Selzer [ctb], Gavin Simpson [ctb], Jens Preussner [ctb], Jay Hesselberth [ctb], Hadley Wickham [ctb], Matthew Lincoln [ctb], Alessandro Gasparini [ctb], Lukasz Komsta [ctb], Frederick Novometsky [ctb], Wilson Freitas [ctb], Michelle Evans [ctb], Jason Cory Brunson [ctb], Simon Jackson [ctb], Ben Whalley [ctb], Karissa Whiting [ctb], Yves Rosseel [ctb], Michael Kuehn [ctb], Jorge Cimentada [ctb], Erle Holgersen [ctb], Karl Dunkle Werner [ctb] (ORCID: ), Ethan Christensen [ctb], Steven Pav [ctb], Paul PJ [ctb], Ben Schneider [ctb], Patrick Kennedy [ctb], Lily Medina [ctb], Brian Fannin [ctb], Jason Muhlenkamp [ctb], Matt Lehman [ctb], Bill Denney [ctb] (ORCID: ), Nic Crane [ctb], Andrew Bates [ctb], Vincent Arel-Bundock [ctb] (ORCID: ), Hideaki Hayashi [ctb], Luis Tobalina [ctb], Annie Wang [ctb], Wei Yang Tham [ctb], Clara Wang [ctb], Abby Smith [ctb] (ORCID: ), Jasper Cooper [ctb] (ORCID: ), E Auden Krauska [ctb] (ORCID: ), Alex Wang [ctb], Malcolm Barrett [ctb] (ORCID: ), Charles Gray [ctb] (ORCID: ), Jared Wilber [ctb], Vilmantas Gegzna [ctb] (ORCID: ), Eduard Szoecs [ctb], Frederik Aust [ctb] (ORCID: ), Angus Moore [ctb], Nick Williams [ctb], Marius Barth [ctb] (ORCID: ), Bruna Wundervald [ctb] (ORCID: ), Joyce Cahoon [ctb] (ORCID: ), Grant McDermott [ctb] (ORCID: ), Kevin Zarca [ctb], Shiro Kuriwaki [ctb] (ORCID: ), Lukas Wallrich [ctb] (ORCID: ), James Martherus [ctb] (ORCID: ), Chuliang Xiao [ctb] (ORCID: ), Joseph Larmarange [ctb], Max Kuhn [ctb], Michal Bojanowski [ctb], Hakon Malmedal [ctb], Clara Wang [ctb], Sergio Oller [ctb], Luke Sonnet [ctb], Jim Hester [ctb], Ben Schneider [ctb], Bernie Gray [ctb] (ORCID: ), Mara Averick [ctb], Aaron Jacobs [ctb], Andreas Bender [ctb], Sven Templer [ctb], Paul-Christian Buerkner [ctb], Matthew Kay [ctb], Erwan Le Pennec [ctb], Johan Junkka [ctb], Hao Zhu [ctb], Benjamin Soltoff [ctb], Zoe Wilkinson Saldana [ctb], Tyler Littlefield [ctb], Charles T. Gray [ctb], Shabbh E. Banks [ctb], Serina Robinson [ctb], Roger Bivand [ctb], Riinu Ots [ctb], Nicholas Williams [ctb], Nina Jakobsen [ctb], Michael Weylandt [ctb], Lisa Lendway [ctb], Karl Hailperin [ctb], Josue Rodriguez [ctb], Jenny Bryan [ctb], Chris Jarvis [ctb], Greg Macfarlane [ctb], Brian Mannakee [ctb], Drew Tyre [ctb], Shreyas Singh [ctb], Laurens Geffert [ctb], Hong Ooi [ctb], Henrik Bengtsson [ctb], Eduard Szocs [ctb], David Hugh-Jones [ctb], Matthieu Stigler [ctb], Hugo Tavares [ctb] (ORCID: ), R. Willem Vervoort [ctb], Brenton M. Wiernik [ctb], Josh Yamamoto [ctb], Jasme Lee [ctb], Taren Sanders [ctb] (ORCID: ), Ilaria Prosdocimi [ctb] (ORCID: ), Daniel D. Sjoberg [ctb] (ORCID: ), Alex Reinhart [ctb] (ORCID: )", + "Maintainer": "Emil Hvitfeldt ", + "Repository": "CRAN" + }, + "bslib": { + "Package": "bslib", + "Version": "0.10.0", + "Source": "Repository", + "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", + "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", + "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", + "BugReports": "https://github.com/rstudio/bslib/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Imports": [ + "base64enc", + "cachem", + "fastmap (>= 1.1.1)", + "grDevices", + "htmltools (>= 0.5.8)", + "jquerylib (>= 0.1.3)", + "jsonlite", + "lifecycle", + "memoise (>= 2.0.1)", + "mime", + "rlang", + "sass (>= 0.4.9)" + ], + "Suggests": [ + "brand.yml", + "bsicons", + "curl", + "fontawesome", + "future", + "ggplot2", + "knitr", + "lattice", + "magrittr", + "rappdirs", + "rmarkdown (>= 2.7)", + "shiny (>= 1.11.1)", + "testthat", + "thematic", + "tools", + "utils", + "withr", + "yaml" + ], + "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", + "Config/Needs/routine": "chromote, desc, renv", + "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'accordion.R' 'breakpoints.R' 'bs-current-theme.R' 'bs-dependencies.R' 'bs-global.R' 'bs-remove.R' 'bs-theme-layers.R' 'bs-theme-preset-bootswatch.R' 'bs-theme-preset-brand.R' 'bs-theme-preset-builtin.R' 'bs-theme-preset.R' 'utils.R' 'bs-theme-preview.R' 'bs-theme-update.R' 'bs-theme.R' 'bslib-package.R' 'buttons.R' 'card.R' 'deprecated.R' 'files.R' 'fill.R' 'imports.R' 'input-code-editor.R' 'input-dark-mode.R' 'input-submit.R' 'input-switch.R' 'layout.R' 'nav-items.R' 'nav-update.R' 'navbar_options.R' 'navs-legacy.R' 'navs.R' 'onLoad.R' 'page.R' 'popover.R' 'precompiled.R' 'print.R' 'shiny-devmode.R' 'sidebar.R' 'staticimports.R' 'toast.R' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (ORCID: ), Joe Cheng [aut], Garrick Aden-Buie [aut] (ORCID: ), Posit Software, PBC [cph, fnd], Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Javi Aguilar [ctb, cph] (Bootstrap colorpicker library), Thomas Park [ctb, cph] (Bootswatch library), PayPal [ctb, cph] (Bootstrap accessibility plugin)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "cachem": { + "Package": "cachem", + "Version": "1.1.0", + "Source": "Repository", + "Title": "Cache R Objects with Automatic Pruning", + "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "ByteCompile": "true", + "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", + "Imports": [ + "rlang", + "fastmap (>= 1.2.0)" + ], + "Suggests": [ + "testthat" + ], + "RoxygenNote": "7.2.3", + "Config/Needs/routine": "lobstr", + "Config/Needs/website": "pkgdown", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "car": { + "Package": "car", + "Version": "3.1-5", + "Source": "Repository", + "Date": "2026-01-05", + "Title": "Companion to Applied Regression", + "Authors@R": "c(person(\"John\", \"Fox\", role =\"aut\" , email = \"jfox@mcmaster.ca\"), person(\"Sanford\", \"Weisberg\", role = \"aut\", email = \"sandy@umn.edu\"), person(\"Brad\", \"Price\", role = c(\"aut\", \"cre\"), email = \"brad.price@mail.wvu.edu\"), person(\"Daniel\", \"Adler\", role=\"ctb\"), person(\"Douglas\", \"Bates\", role = \"ctb\"), person(\"Gabriel\", \"Baud-Bovy\", role = \"ctb\"), person(\"Ben\", \"Bolker\", role=\"ctb\"), person(\"Steve\", \"Ellison\", role=\"ctb\"), person(\"David\", \"Firth\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Gregor\", \"Gorjanc\", role = \"ctb\"), person(\"Spencer\", \"Graves\", role = \"ctb\"), person(\"Richard\", \"Heiberger\", role = \"ctb\"), person(\"Pavel\", \"Krivitsky\", role = \"ctb\"), person(\"Rafael\", \"Laboissiere\", role = \"ctb\"), person(\"Martin\", \"Maechler\", role=\"ctb\"), person(\"Georges\", \"Monette\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Henric\", \"Nilsson\", role = \"ctb\"), person(\"Derek\", \"Ogle\", role = \"ctb\"), person(\"Iain\", \"Proctor\", role = \"ctb\"), person(\"Brian\", \"Ripley\", role = \"ctb\"), person(\"Tom\", \"Short\", role=\"ctb\"), person(\"William\", \"Venables\", role = \"ctb\"), person(\"Steve\", \"Walker\", role=\"ctb\"), person(\"David\", \"Winsemius\", role=\"ctb\"), person(\"Achim\", \"Zeileis\", role = \"ctb\"), person(\"R-Core\", role=\"ctb\"))", + "Depends": [ + "R (>= 3.5.0)", + "carData (>= 3.0-0)" + ], + "Imports": [ + "abind", + "Formula", + "MASS", + "mgcv", + "nnet", + "pbkrtest (>= 0.4-4)", + "quantreg", + "grDevices", + "utils", + "stats", + "graphics", + "lme4 (>= 1.1-27.1)", + "nlme", + "scales" + ], + "Suggests": [ + "alr4", + "boot", + "coxme", + "effects", + "knitr", + "leaps", + "lmtest", + "Matrix", + "MatrixModels", + "ordinal", + "plotrix", + "mvtnorm", + "rgl (>= 0.111.3)", + "rio", + "sandwich", + "SparseM", + "survival", + "survey" + ], + "ByteCompile": "yes", + "LazyLoad": "yes", + "Description": "Functions to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Third Edition, Sage, 2019.", + "License": "GPL (>= 2)", + "URL": "https://github.com/bprice2652/car_repo, https://CRAN.R-project.org/package=car, https://z.umn.edu/carbook", + "VignetteBuilder": "knitr", + "NeedsCompilation": "no", + "Author": "John Fox [aut], Sanford Weisberg [aut], Brad Price [aut, cre], Daniel Adler [ctb], Douglas Bates [ctb], Gabriel Baud-Bovy [ctb], Ben Bolker [ctb], Steve Ellison [ctb], David Firth [ctb], Michael Friendly [ctb], Gregor Gorjanc [ctb], Spencer Graves [ctb], Richard Heiberger [ctb], Pavel Krivitsky [ctb], Rafael Laboissiere [ctb], Martin Maechler [ctb], Georges Monette [ctb], Duncan Murdoch [ctb], Henric Nilsson [ctb], Derek Ogle [ctb], Iain Proctor [ctb], Brian Ripley [ctb], Tom Short [ctb], William Venables [ctb], Steve Walker [ctb], David Winsemius [ctb], Achim Zeileis [ctb], R-Core [ctb]", + "Maintainer": "Brad Price ", + "Repository": "CRAN" + }, + "carData": { + "Package": "carData", + "Version": "3.0-6", + "Source": "Repository", + "Date": "2026-01-30", + "Title": "Companion to Applied Regression Data Sets", + "Authors@R": "c(person(\"John\", \"Fox\", role = \"aut\", email = \"jfox@mcmaster.ca\"), person(\"Sanford\", \"Weisberg\", role = \"aut\", email = \"sandy@umn.edu\"), person(\"Brad\", \"Price\", role = c(\"aut\", \"cre\"), email = \"brad.price@mail.wvu.edu\"))", + "Depends": [ + "R (>= 3.5.0)" + ], + "Suggests": [ + "car (>= 3.0-0)" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "Description": "Datasets to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Third Edition, Sage (2019).", + "License": "GPL (>= 2)", + "URL": "https://r-forge.r-project.org/projects/car/, https://CRAN.R-project.org/package=carData, https://z.umn.edu/carbook", + "NeedsCompilation": "no", + "Author": "John Fox [aut], Sanford Weisberg [aut], Brad Price [aut, cre]", + "Maintainer": "Brad Price ", + "Repository": "CRAN" + }, + "cli": { + "Package": "cli", + "Version": "3.6.5", + "Source": "Repository", + "Title": "Helpers for Developing Command Line Interfaces", + "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", + "License": "MIT + file LICENSE", + "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", + "BugReports": "https://github.com/r-lib/cli/issues", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "callr", + "covr", + "crayon", + "digest", + "glue (>= 1.6.0)", + "grDevices", + "htmltools", + "htmlwidgets", + "knitr", + "methods", + "processx", + "ps (>= 1.3.4.9000)", + "rlang (>= 1.0.2.9003)", + "rmarkdown", + "rprojroot", + "rstudioapi", + "testthat (>= 3.2.0)", + "tibble", + "whoami", + "withr" + ], + "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "codetools": { + "Package": "codetools", + "Version": "0.2-20", + "Source": "Repository", + "Priority": "recommended", + "Author": "Luke Tierney ", + "Description": "Code analysis tools for R.", + "Title": "Code Analysis Tools for R", + "Depends": [ + "R (>= 2.1)" + ], + "Maintainer": "Luke Tierney ", + "URL": "https://gitlab.com/luke-tierney/codetools", + "License": "GPL", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "colorspace": { + "Package": "colorspace", + "Version": "2.1-2", + "Source": "Repository", + "Date": "2025-09-22", + "Title": "A Toolbox for Manipulating and Assessing Colors and Palettes", + "Authors@R": "c(person(given = \"Ross\", family = \"Ihaka\", role = \"aut\", email = \"ihaka@stat.auckland.ac.nz\"), person(given = \"Paul\", family = \"Murrell\", role = \"aut\", email = \"paul@stat.auckland.ac.nz\", comment = c(ORCID = \"0000-0002-3224-8858\")), person(given = \"Kurt\", family = \"Hornik\", role = \"aut\", email = \"Kurt.Hornik@R-project.org\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(given = c(\"Jason\", \"C.\"), family = \"Fisher\", role = \"aut\", email = \"jfisher@usgs.gov\", comment = c(ORCID = \"0000-0001-9032-8912\")), person(given = \"Reto\", family = \"Stauffer\", role = \"aut\", email = \"Reto.Stauffer@uibk.ac.at\", comment = c(ORCID = \"0000-0002-3798-5507\")), person(given = c(\"Claus\", \"O.\"), family = \"Wilke\", role = \"aut\", email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(given = c(\"Claire\", \"D.\"), family = \"McWhite\", role = \"aut\", email = \"claire.mcwhite@utmail.utexas.edu\", comment = c(ORCID = \"0000-0001-7346-3047\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")))", + "Description": "Carries out mapping between assorted color spaces including RGB, HSV, HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB, and polar CIELAB. Qualitative, sequential, and diverging color palettes based on HCL colors are provided along with corresponding ggplot2 color scales. Color palette choice is aided by an interactive app (with either a Tcl/Tk or a shiny graphical user interface) and shiny apps with an HCL color picker and a color vision deficiency emulator. Plotting functions for displaying and assessing palettes include color swatches, visualizations of the HCL space, and trajectories in HCL and/or RGB spectrum. Color manipulation functions include: desaturation, lightening/darkening, mixing, and simulation of color vision deficiencies (deutanomaly, protanomaly, tritanomaly). Details can be found on the project web page at and in the accompanying scientific paper: Zeileis et al. (2020, Journal of Statistical Software, ).", + "Depends": [ + "R (>= 3.0.0)", + "methods" + ], + "Imports": [ + "graphics", + "grDevices", + "stats" + ], + "Suggests": [ + "datasets", + "utils", + "KernSmooth", + "MASS", + "kernlab", + "mvtnorm", + "vcd", + "tcltk", + "shiny", + "shinyjs", + "ggplot2", + "dplyr", + "scales", + "grid", + "png", + "jpeg", + "knitr", + "rmarkdown", + "RColorBrewer", + "rcartocolor", + "scico", + "viridis", + "wesanderson" + ], + "VignetteBuilder": "knitr", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://colorspace.R-Forge.R-project.org/, https://hclwizard.org/", + "BugReports": "https://colorspace.R-Forge.R-project.org/contact.html", + "LazyData": "yes", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Ross Ihaka [aut], Paul Murrell [aut] (ORCID: ), Kurt Hornik [aut] (ORCID: ), Jason C. Fisher [aut] (ORCID: ), Reto Stauffer [aut] (ORCID: ), Claus O. Wilke [aut] (ORCID: ), Claire D. McWhite [aut] (ORCID: ), Achim Zeileis [aut, cre] (ORCID: )", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "commonmark": { + "Package": "commonmark", + "Version": "2.0.0", + "Source": "Repository", + "Type": "Package", + "Title": "High Performance CommonMark and Github Markdown Rendering in R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", + "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", + "License": "BSD_2_clause + file LICENSE", + "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", + "BugReports": "https://github.com/r-lib/commonmark/issues", + "Suggests": [ + "curl", + "testthat", + "xml2" + ], + "RoxygenNote": "7.3.2", + "Language": "en-US", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), John MacFarlane [cph] (Author of cmark)", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "cowplot": { + "Package": "cowplot", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Streamlined Plot Theme and Plot Annotations for 'ggplot2'", + "Authors@R": "person( given = \"Claus O.\", family = \"Wilke\", role = c(\"aut\", \"cre\"), email = \"wilke@austin.utexas.edu\", comment = c(ORCID = \"0000-0002-7470-9261\") )", + "Description": "Provides various features that help with creating publication-quality figures with 'ggplot2', such as a set of themes, functions to align plots and arrange them into complex compound figures, and functions that make it easy to annotate plots and or mix plots with images. The package was originally written for internal use in the Wilke lab, hence the name (Claus O. Wilke's plot package). It has also been used extensively in the book Fundamentals of Data Visualization.", + "URL": "https://wilkelab.org/cowplot/", + "BugReports": "https://github.com/wilkelab/cowplot/issues", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "ggplot2 (>= 3.5.2)", + "grid", + "gtable", + "grDevices", + "methods", + "rlang", + "scales" + ], + "License": "GPL-2", + "Suggests": [ + "Cairo", + "covr", + "dplyr", + "forcats", + "gridGraphics (>= 0.4-0)", + "knitr", + "lattice", + "magick", + "maps", + "PASWR", + "patchwork", + "rmarkdown", + "ragg", + "testthat (>= 1.0.0)", + "tidyr", + "vdiffr (>= 0.3.0)", + "VennDiagram" + ], + "VignetteBuilder": "knitr", + "Collate": "'add_sub.R' 'align_plots.R' 'as_grob.R' 'as_gtable.R' 'axis_canvas.R' 'cowplot.R' 'draw.R' 'get_plot_component.R' 'get_axes.R' 'get_titles.R' 'get_legend.R' 'get_panel.R' 'gtable.R' 'key_glyph.R' 'plot_grid.R' 'save.R' 'set_null_device.R' 'setup.R' 'stamp.R' 'themes.R' 'utils_ggplot2.R'", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Claus O. Wilke [aut, cre] (ORCID: )", + "Maintainer": "Claus O. Wilke ", + "Repository": "CRAN" + }, + "cpp11": { + "Package": "cpp11", + "Version": "0.5.3", + "Source": "Repository", + "Title": "A C++11 Interface for R's C Interface", + "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", + "License": "MIT + file LICENSE", + "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", + "BugReports": "https://github.com/r-lib/cpp11/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "bench", + "brio", + "callr", + "cli", + "covr", + "decor", + "desc", + "ggplot2", + "glue", + "knitr", + "lobstr", + "mockery", + "progress", + "rmarkdown", + "scales", + "Rcpp", + "testthat (>= 3.2.0)", + "tibble", + "utils", + "vctrs", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Davis Vaughan [aut, cre] (ORCID: ), Jim Hester [aut] (ORCID: ), Romain François [aut] (ORCID: ), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "crosstalk": { + "Package": "crosstalk", + "Version": "1.2.2", + "Source": "Repository", + "Type": "Package", + "Title": "Inter-Widget Interactivity for HTML Widgets", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Kristopher Michael\", \"Kowal\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(, \"es5-shim contributors\", role = c(\"ctb\", \"cph\"), comment = \"es5-shim library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\") )", + "Description": "Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files). Currently supports linked brushing and filtering.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/crosstalk/, https://github.com/rstudio/crosstalk", + "BugReports": "https://github.com/rstudio/crosstalk/issues", + "Imports": [ + "htmltools (>= 0.3.6)", + "jsonlite", + "lazyeval", + "R6" + ], + "Suggests": [ + "bslib", + "ggplot2", + "sass", + "shiny", + "testthat (>= 2.1.0)" + ], + "Config/Needs/website": "jcheng5/d3scatter, DT, leaflet, rmarkdown", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Brian Reavis [ctb, cph] (selectize.js library), Kristopher Michael Kowal [ctb, cph] (es5-shim library), es5-shim contributors [ctb, cph] (es5-shim library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "curl": { + "Package": "curl", + "Version": "7.0.0", + "Source": "Repository", + "Type": "Package", + "Title": "A Modern and Flexible Web Client for R", + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", + "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", + "License": "MIT + file LICENSE", + "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", + "URL": "https://jeroen.r-universe.dev/curl", + "BugReports": "https://github.com/jeroen/curl/issues", + "Suggests": [ + "spelling", + "testthat (>= 1.0.0)", + "knitr", + "jsonlite", + "later", + "rmarkdown", + "httpuv (>= 1.4.4)", + "webutils" + ], + "VignetteBuilder": "knitr", + "Depends": [ + "R (>= 3.0.0)" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "Language": "en-US", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "data.table": { + "Package": "data.table", + "Version": "1.18.2.1", + "Source": "Repository", + "Title": "Extension of `data.frame`", + "Depends": [ + "R (>= 3.4.0)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "bit64 (>= 4.0.0)", + "bit (>= 4.0.4)", + "R.utils (>= 2.13.0)", + "xts", + "zoo (>= 1.8-1)", + "yaml", + "knitr", + "markdown" + ], + "Description": "Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns, friendly and fast character-separated-value read/write. Offers a natural and flexible syntax, for faster development.", + "License": "MPL-2.0 | file LICENSE", + "URL": "https://r-datatable.com, https://Rdatatable.gitlab.io/data.table, https://github.com/Rdatatable/data.table", + "BugReports": "https://github.com/Rdatatable/data.table/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "ByteCompile": "TRUE", + "Authors@R": "c( person(\"Tyson\",\"Barrett\", role=c(\"aut\",\"cre\"), email=\"t.barrett88@gmail.com\", comment = c(ORCID=\"0000-0002-2137-1391\")), person(\"Matt\",\"Dowle\", role=\"aut\", email=\"mattjdowle@gmail.com\"), person(\"Arun\",\"Srinivasan\", role=\"aut\", email=\"asrini@pm.me\"), person(\"Jan\",\"Gorecki\", role=\"aut\", email=\"j.gorecki@wit.edu.pl\"), person(\"Michael\",\"Chirico\", role=\"aut\", email=\"michaelchirico4@gmail.com\", comment = c(ORCID=\"0000-0003-0787-087X\")), person(\"Toby\",\"Hocking\", role=\"aut\", email=\"toby.hocking@r-project.org\", comment = c(ORCID=\"0000-0002-3146-0865\")), person(\"Benjamin\",\"Schwendinger\",role=\"aut\", comment = c(ORCID=\"0000-0003-3315-8114\")), person(\"Ivan\", \"Krylov\", role=\"aut\", email=\"ikrylov@disroot.org\", comment = c(ORCID=\"0000-0002-0172-3812\")), person(\"Pasha\",\"Stetsenko\", role=\"ctb\"), person(\"Tom\",\"Short\", role=\"ctb\"), person(\"Steve\",\"Lianoglou\", role=\"ctb\"), person(\"Eduard\",\"Antonyan\", role=\"ctb\"), person(\"Markus\",\"Bonsch\", role=\"ctb\"), person(\"Hugh\",\"Parsonage\", role=\"ctb\"), person(\"Scott\",\"Ritchie\", role=\"ctb\"), person(\"Kun\",\"Ren\", role=\"ctb\"), person(\"Xianying\",\"Tan\", role=\"ctb\"), person(\"Rick\",\"Saporta\", role=\"ctb\"), person(\"Otto\",\"Seiskari\", role=\"ctb\"), person(\"Xianghui\",\"Dong\", role=\"ctb\"), person(\"Michel\",\"Lang\", role=\"ctb\"), person(\"Watal\",\"Iwasaki\", role=\"ctb\"), person(\"Seth\",\"Wenchel\", role=\"ctb\"), person(\"Karl\",\"Broman\", role=\"ctb\"), person(\"Tobias\",\"Schmidt\", role=\"ctb\"), person(\"David\",\"Arenburg\", role=\"ctb\"), person(\"Ethan\",\"Smith\", role=\"ctb\"), person(\"Francois\",\"Cocquemas\", role=\"ctb\"), person(\"Matthieu\",\"Gomez\", role=\"ctb\"), person(\"Philippe\",\"Chataignon\", role=\"ctb\"), person(\"Nello\",\"Blaser\", role=\"ctb\"), person(\"Dmitry\",\"Selivanov\", role=\"ctb\"), person(\"Andrey\",\"Riabushenko\", role=\"ctb\"), person(\"Cheng\",\"Lee\", role=\"ctb\"), person(\"Declan\",\"Groves\", role=\"ctb\"), person(\"Daniel\",\"Possenriede\", role=\"ctb\"), person(\"Felipe\",\"Parages\", role=\"ctb\"), person(\"Denes\",\"Toth\", role=\"ctb\"), person(\"Mus\",\"Yaramaz-David\", role=\"ctb\"), person(\"Ayappan\",\"Perumal\", role=\"ctb\"), person(\"James\",\"Sams\", role=\"ctb\"), person(\"Martin\",\"Morgan\", role=\"ctb\"), person(\"Michael\",\"Quinn\", role=\"ctb\"), person(given=\"@javrucebo\", role=\"ctb\", comment=\"GitHub user\"), person(\"Marc\",\"Halperin\", role=\"ctb\"), person(\"Roy\",\"Storey\", role=\"ctb\"), person(\"Manish\",\"Saraswat\", role=\"ctb\"), person(\"Morgan\",\"Jacob\", role=\"ctb\"), person(\"Michael\",\"Schubmehl\", role=\"ctb\"), person(\"Davis\",\"Vaughan\", role=\"ctb\"), person(\"Leonardo\",\"Silvestri\", role=\"ctb\"), person(\"Jim\",\"Hester\", role=\"ctb\"), person(\"Anthony\",\"Damico\", role=\"ctb\"), person(\"Sebastian\",\"Freundt\", role=\"ctb\"), person(\"David\",\"Simons\", role=\"ctb\"), person(\"Elliott\",\"Sales de Andrade\", role=\"ctb\"), person(\"Cole\",\"Miller\", role=\"ctb\"), person(\"Jens Peder\",\"Meldgaard\", role=\"ctb\"), person(\"Vaclav\",\"Tlapak\", role=\"ctb\"), person(\"Kevin\",\"Ushey\", role=\"ctb\"), person(\"Dirk\",\"Eddelbuettel\", role=\"ctb\"), person(\"Tony\",\"Fischetti\", role=\"ctb\"), person(\"Ofek\",\"Shilon\", role=\"ctb\"), person(\"Vadim\",\"Khotilovich\", role=\"ctb\"), person(\"Hadley\",\"Wickham\", role=\"ctb\"), person(\"Bennet\",\"Becker\", role=\"ctb\"), person(\"Kyle\",\"Haynes\", role=\"ctb\"), person(\"Boniface Christian\",\"Kamgang\", role=\"ctb\"), person(\"Olivier\",\"Delmarcell\", role=\"ctb\"), person(\"Josh\",\"O'Brien\", role=\"ctb\"), person(\"Dereck\",\"de Mezquita\", role=\"ctb\"), person(\"Michael\",\"Czekanski\", role=\"ctb\"), person(\"Dmitry\", \"Shemetov\", role=\"ctb\"), person(\"Nitish\", \"Jha\", role=\"ctb\"), person(\"Joshua\", \"Wu\", role=\"ctb\"), person(\"Iago\", \"Giné-Vázquez\", role=\"ctb\"), person(\"Anirban\", \"Chetia\", role=\"ctb\"), person(\"Doris\", \"Amoakohene\", role=\"ctb\"), person(\"Angel\", \"Feliz\", role=\"ctb\"), person(\"Michael\",\"Young\", role=\"ctb\"), person(\"Mark\", \"Seeto\", role=\"ctb\"), person(\"Philippe\", \"Grosjean\", role=\"ctb\"), person(\"Vincent\", \"Runge\", role=\"ctb\"), person(\"Christian\", \"Wia\", role=\"ctb\"), person(\"Elise\", \"Maigné\", role=\"ctb\"), person(\"Vincent\", \"Rocher\", role=\"ctb\"), person(\"Vijay\", \"Lulla\", role=\"ctb\"), person(\"Aljaž\", \"Sluga\", role=\"ctb\"), person(\"Bill\", \"Evans\", role=\"ctb\"), person(\"Reino\", \"Bruner\", role=\"ctb\"), person(given=\"@badasahog\", role=\"ctb\", comment=\"GitHub user\"), person(\"Vinit\", \"Thakur\", role=\"ctb\"), person(\"Mukul\", \"Kumar\", role=\"ctb\"), person(\"Ildikó\", \"Czeller\", role=\"ctb\"), person(\"Manmita\", \"Das\", role=\"ctb\") )", + "NeedsCompilation": "yes", + "Author": "Tyson Barrett [aut, cre] (ORCID: ), Matt Dowle [aut], Arun Srinivasan [aut], Jan Gorecki [aut], Michael Chirico [aut] (ORCID: ), Toby Hocking [aut] (ORCID: ), Benjamin Schwendinger [aut] (ORCID: ), Ivan Krylov [aut] (ORCID: ), Pasha Stetsenko [ctb], Tom Short [ctb], Steve Lianoglou [ctb], Eduard Antonyan [ctb], Markus Bonsch [ctb], Hugh Parsonage [ctb], Scott Ritchie [ctb], Kun Ren [ctb], Xianying Tan [ctb], Rick Saporta [ctb], Otto Seiskari [ctb], Xianghui Dong [ctb], Michel Lang [ctb], Watal Iwasaki [ctb], Seth Wenchel [ctb], Karl Broman [ctb], Tobias Schmidt [ctb], David Arenburg [ctb], Ethan Smith [ctb], Francois Cocquemas [ctb], Matthieu Gomez [ctb], Philippe Chataignon [ctb], Nello Blaser [ctb], Dmitry Selivanov [ctb], Andrey Riabushenko [ctb], Cheng Lee [ctb], Declan Groves [ctb], Daniel Possenriede [ctb], Felipe Parages [ctb], Denes Toth [ctb], Mus Yaramaz-David [ctb], Ayappan Perumal [ctb], James Sams [ctb], Martin Morgan [ctb], Michael Quinn [ctb], @javrucebo [ctb] (GitHub user), Marc Halperin [ctb], Roy Storey [ctb], Manish Saraswat [ctb], Morgan Jacob [ctb], Michael Schubmehl [ctb], Davis Vaughan [ctb], Leonardo Silvestri [ctb], Jim Hester [ctb], Anthony Damico [ctb], Sebastian Freundt [ctb], David Simons [ctb], Elliott Sales de Andrade [ctb], Cole Miller [ctb], Jens Peder Meldgaard [ctb], Vaclav Tlapak [ctb], Kevin Ushey [ctb], Dirk Eddelbuettel [ctb], Tony Fischetti [ctb], Ofek Shilon [ctb], Vadim Khotilovich [ctb], Hadley Wickham [ctb], Bennet Becker [ctb], Kyle Haynes [ctb], Boniface Christian Kamgang [ctb], Olivier Delmarcell [ctb], Josh O'Brien [ctb], Dereck de Mezquita [ctb], Michael Czekanski [ctb], Dmitry Shemetov [ctb], Nitish Jha [ctb], Joshua Wu [ctb], Iago Giné-Vázquez [ctb], Anirban Chetia [ctb], Doris Amoakohene [ctb], Angel Feliz [ctb], Michael Young [ctb], Mark Seeto [ctb], Philippe Grosjean [ctb], Vincent Runge [ctb], Christian Wia [ctb], Elise Maigné [ctb], Vincent Rocher [ctb], Vijay Lulla [ctb], Aljaž Sluga [ctb], Bill Evans [ctb], Reino Bruner [ctb], @badasahog [ctb] (GitHub user), Vinit Thakur [ctb], Mukul Kumar [ctb], Ildikó Czeller [ctb], Manmita Das [ctb]", + "Maintainer": "Tyson Barrett ", + "Repository": "CRAN" + }, + "digest": { + "Package": "digest", + "Version": "0.6.39", + "Source": "Repository", + "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\", comment = c(ORCID = \"0000-0002-8059-9767\")), person(\"Jarek\", \"Tuszynski\", role=\"ctb\"), person(\"Henrik\", \"Bengtsson\", role=\"ctb\", comment = c(ORCID = \"0000-0002-7579-5165\")), person(\"Simon\", \"Urbanek\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2297-1732\")), person(\"Mario\", \"Frasca\", role=\"ctb\"), person(\"Bryan\", \"Lewis\", role=\"ctb\"), person(\"Murray\", \"Stokely\", role=\"ctb\"), person(\"Hannes\", \"Muehleisen\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8552-0029\")), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Wush\", \"Wu\", role=\"ctb\", comment = c(ORCID = \"0000-0001-5180-0567\")), person(\"Qiang\", \"Kou\", role=\"ctb\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Thierry\", \"Onkelinx\", role=\"ctb\", comment = c(ORCID = \"0000-0001-8804-4216\")), person(\"Michel\", \"Lang\", role=\"ctb\", comment = c(ORCID = \"0000-0001-9754-0393\")), person(\"Viliam\", \"Simko\", role=\"ctb\"), person(\"Kurt\", \"Hornik\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4198-9911\")), person(\"Radford\", \"Neal\", role=\"ctb\", comment = c(ORCID = \"0000-0002-2473-3407\")), person(\"Kendon\", \"Bell\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9093-8312\")), person(\"Matthew\", \"de Queljoe\", role=\"ctb\"), person(\"Dmitry\", \"Selivanov\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0492-6647\")), person(\"Ion\", \"Suruceanu\", role=\"ctb\", comment = c(ORCID = \"0009-0005-6446-4909\")), person(\"Bill\", \"Denney\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5759-428X\")), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\", comment = c(ORCID = \"0009-0008-8480-1329\")), person(\"Sergey\", \"Fedorov\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5970-7233\")), person(\"Will\", \"Landau\", role=\"ctb\", comment = c(ORCID = \"0000-0003-1878-3253\")), person(\"Floris\", \"Vanderhaeghe\", role=\"ctb\", comment = c(ORCID = \"0000-0002-6378-6229\")), person(\"Kevin\", \"Tappe\", role=\"ctb\"), person(\"Harris\", \"McGehee\", role=\"ctb\"), person(\"Tim\", \"Mastny\", role=\"ctb\"), person(\"Aaron\", \"Peikert\", role=\"ctb\", comment = c(ORCID = \"0000-0001-7813-818X\")), person(\"Mark\", \"van der Loo\", role=\"ctb\", comment = c(ORCID = \"0000-0002-9807-4686\")), person(\"Chris\", \"Muir\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2555-3878\")), person(\"Moritz\", \"Beller\", role=\"ctb\", comment = c(ORCID = \"0000-0003-4852-0526\")), person(\"Sebastian\", \"Campbell\", role=\"ctb\", comment = c(ORCID = \"0009-0000-5948-4503\")), person(\"Winston\", \"Chang\", role=\"ctb\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Dean\", \"Attali\", role=\"ctb\", comment = c(ORCID = \"0000-0002-5645-3493\")), person(\"Michael\", \"Chirico\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0787-087X\")), person(\"Kevin\", \"Ushey\", role=\"ctb\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Carl\", \"Pearson\", role=\"ctb\", comment = c(ORCID = \"0000-0003-0701-7860\")))", + "Date": "2025-11-19", + "Title": "Create Compact Hash Digests of R Objects", + "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as 'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", + "URL": "https://github.com/eddelbuettel/digest, https://eddelbuettel.github.io/digest/, https://dirk.eddelbuettel.com/code/digest.html", + "BugReports": "https://github.com/eddelbuettel/digest/issues", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "utils" + ], + "License": "GPL (>= 2)", + "Suggests": [ + "tinytest", + "simplermarkdown", + "rbenchmark" + ], + "VignetteBuilder": "simplermarkdown", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Dirk Eddelbuettel [aut, cre] (ORCID: ), Antoine Lucas [ctb] (ORCID: ), Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (ORCID: ), Simon Urbanek [ctb] (ORCID: ), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb] (ORCID: ), Duncan Murdoch [ctb], Jim Hester [ctb] (ORCID: ), Wush Wu [ctb] (ORCID: ), Qiang Kou [ctb] (ORCID: ), Thierry Onkelinx [ctb] (ORCID: ), Michel Lang [ctb] (ORCID: ), Viliam Simko [ctb], Kurt Hornik [ctb] (ORCID: ), Radford Neal [ctb] (ORCID: ), Kendon Bell [ctb] (ORCID: ), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb] (ORCID: ), Ion Suruceanu [ctb] (ORCID: ), Bill Denney [ctb] (ORCID: ), Dirk Schumacher [ctb], András Svraka [ctb] (ORCID: ), Sergey Fedorov [ctb] (ORCID: ), Will Landau [ctb] (ORCID: ), Floris Vanderhaeghe [ctb] (ORCID: ), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (ORCID: ), Mark van der Loo [ctb] (ORCID: ), Chris Muir [ctb] (ORCID: ), Moritz Beller [ctb] (ORCID: ), Sebastian Campbell [ctb] (ORCID: ), Winston Chang [ctb] (ORCID: ), Dean Attali [ctb] (ORCID: ), Michael Chirico [ctb] (ORCID: ), Kevin Ushey [ctb] (ORCID: ), Carl Pearson [ctb] (ORCID: )", + "Maintainer": "Dirk Eddelbuettel ", + "Repository": "CRAN" + }, + "doBy": { + "Package": "doBy", + "Version": "4.7.1", + "Source": "Repository", + "Title": "Groupwise Statistics, LSmeans, Linear Estimates, Utilities", + "Authors@R": "c( person(given = \"Ulrich\", family = \"Halekoh\", email = \"uhalekoh@health.sdu.dk\", role = c(\"aut\", \"cph\")), person(given = \"Søren\", family = \"Højsgaard\", email = \"sorenh@math.aau.dk\", role = c(\"aut\", \"cre\", \"cph\")) )", + "Description": "Utility package containing: Main categories: Working with grouped data: 'do' something to data when stratified 'by' some variables. General linear estimates. Data handling utilities. Functional programming, in particular restrict functions to a smaller domain. Miscellaneous functions for data handling. Model stability in connection with model selection. Miscellaneous other tools.", + "Encoding": "UTF-8", + "VignetteBuilder": "knitr", + "LazyData": "true", + "LazyDataCompression": "xz", + "URL": "https://github.com/hojsgaard/doBy", + "License": "GPL (>= 2)", + "Depends": [ + "R (>= 4.2.0)", + "methods" + ], + "Imports": [ + "boot", + "broom", + "cowplot", + "Deriv", + "dplyr", + "forecast", + "ggplot2", + "MASS", + "Matrix", + "modelr", + "microbenchmark", + "rlang", + "purrr", + "tibble", + "tidyr" + ], + "Suggests": [ + "geepack", + "knitr", + "lme4", + "markdown", + "rmarkdown", + "multcomp", + "pbkrtest (>= 0.5.2)", + "survival", + "testthat (>= 2.1.0)" + ], + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Ulrich Halekoh [aut, cph], Søren Højsgaard [aut, cre, cph]", + "Maintainer": "Søren Højsgaard ", + "Repository": "CRAN" + }, + "dplyr": { + "Package": "dplyr", + "Version": "1.2.0", + "Source": "Repository", + "Type": "Package", + "Title": "A Grammar of Data Manipulation", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", + "License": "MIT + file LICENSE", + "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", + "BugReports": "https://github.com/tidyverse/dplyr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli (>= 3.6.2)", + "generics", + "glue (>= 1.3.2)", + "lifecycle (>= 1.0.5)", + "magrittr (>= 1.5)", + "methods", + "pillar (>= 1.9.0)", + "R6", + "rlang (>= 1.1.7)", + "tibble (>= 3.2.0)", + "tidyselect (>= 1.2.0)", + "utils", + "vctrs (>= 0.7.1)" + ], + "Suggests": [ + "broom", + "covr", + "DBI", + "dbplyr (>= 2.2.1)", + "ggplot2", + "knitr", + "Lahman", + "lobstr", + "nycflights13", + "purrr", + "rmarkdown", + "RSQLite", + "stringi (>= 1.7.6)", + "testthat (>= 3.1.5)", + "tidyr (>= 1.3.0)", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Romain François [aut] (ORCID: ), Lionel Henry [aut], Kirill Müller [aut] (ORCID: ), Davis Vaughan [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "drc": { + "Package": "drc", + "Version": "3.0-1", + "Source": "Repository", + "Date": "2016-08-25", + "Title": "Analysis of Dose-Response Curves", + "Author": "Christian Ritz , Jens C. Strebig ", + "Maintainer": "Christian Ritz ", + "Depends": [ + "R (>= 2.0.0)", + "MASS", + "stats" + ], + "Imports": [ + "car", + "gtools", + "multcomp", + "plotrix", + "scales" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "Description": "Analysis of dose-response data is made available through a suite of flexible and versatile model fitting and after-fitting functions.", + "License": "GPL-2 | file LICENCE", + "URL": "http://www.r-project.org, http://www.bioassay.dk", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "evaluate": { + "Package": "evaluate", + "Version": "1.0.5", + "Source": "Repository", + "Type": "Package", + "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", + "License": "MIT + file LICENSE", + "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", + "BugReports": "https://github.com/r-lib/evaluate/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "callr", + "covr", + "ggplot2 (>= 3.3.6)", + "lattice", + "methods", + "pkgload", + "ragg (>= 1.4.0)", + "rlang (>= 1.1.5)", + "knitr", + "testthat (>= 3.0.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (ORCID: ), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "farver": { + "Package": "farver", + "Version": "2.1.2", + "Source": "Repository", + "Type": "Package", + "Title": "High Performance Colour Space Manipulation", + "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", + "License": "MIT + file LICENSE", + "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", + "BugReports": "https://github.com/thomasp85/farver/issues", + "Suggests": [ + "covr", + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.1", + "NeedsCompilation": "yes", + "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "fastmap": { + "Package": "fastmap", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Fast Data Structures", + "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", + "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "Suggests": [ + "testthat (>= 2.1.1)" + ], + "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", + "BugReports": "https://github.com/r-lib/fastmap/issues", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "fontawesome": { + "Package": "fontawesome", + "Version": "0.5.3", + "Source": "Repository", + "Type": "Package", + "Title": "Easily Work with 'Font Awesome' Icons", + "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", + "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", + "BugReports": "https://github.com/rstudio/fontawesome/issues", + "Encoding": "UTF-8", + "ByteCompile": "true", + "RoxygenNote": "7.3.2", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "rlang (>= 1.0.6)", + "htmltools (>= 0.5.1.1)" + ], + "Suggests": [ + "covr", + "dplyr (>= 1.0.8)", + "gt (>= 0.9.0)", + "knitr (>= 1.31)", + "testthat (>= 3.0.0)", + "rsvg" + ], + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", + "Maintainer": "Richard Iannone ", + "Repository": "CRAN" + }, + "forecast": { + "Package": "forecast", + "Version": "9.0.2", + "Source": "Repository", + "Title": "Forecasting Functions for Time Series and Linear Models", + "Description": "Methods and tools for displaying and analysing univariate time series forecasts including exponential smoothing via state space models and automatic ARIMA modelling.", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "colorspace", + "fracdiff", + "generics (>= 0.1.2)", + "ggplot2 (>= 3.4.0)", + "graphics", + "lmtest", + "magrittr", + "nnet", + "parallel", + "Rcpp (>= 0.12.4)", + "stats", + "timeDate", + "urca", + "withr", + "zoo" + ], + "Suggests": [ + "forecTheta", + "knitr", + "methods", + "rmarkdown", + "rticles", + "scales", + "seasonal", + "testthat (>= 3.3.0)", + "uroot" + ], + "LinkingTo": [ + "Rcpp (>= 0.12.4)", + "RcppArmadillo (>= 0.2.35)" + ], + "LazyData": "yes", + "ByteCompile": "TRUE", + "Authors@R": "c( person(\"Rob\", \"Hyndman\", email = \"Rob.Hyndman@monash.edu\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0002-2140-5352\")), person(\"George\", \"Athanasopoulos\", role = \"aut\", comment = c(ORCID = \"0000-0002-5389-2802\")), person(\"Christoph\", \"Bergmeir\", role = \"aut\", comment = c(ORCID = \"0000-0002-3665-9021\")), person(\"Gabriel\", \"Caceres\", role = \"aut\", comment = c(ORCID = \"0000-0002-2947-2023\")), person(\"Leanne\", \"Chhay\", role = \"aut\"), person(\"Kirill\", \"Kuroptev\", role = \"aut\"), person(\"Maximilian\", \"Mücke\", role = \"aut\", comment = c(ORCID = \"0009-0000-9432-9795\")), person(\"Mitchell\", \"O'Hara-Wild\", role = \"aut\", comment = c(ORCID = \"0000-0001-6729-7695\")), person(\"Fotios\", \"Petropoulos\", role = \"aut\", comment = c(ORCID = \"0000-0003-3039-4955\")), person(\"Slava\", \"Razbash\", role = \"aut\"), person(\"Earo\", \"Wang\", role = \"aut\", comment = c(ORCID = \"0000-0001-6448-5260\")), person(\"Farah\", \"Yasmeen\", role = \"aut\", comment = c(ORCID = \"0000-0002-1479-5401\")), person(\"Federico\", \"Garza\", role = \"ctb\"), person(\"Daniele\", \"Girolimetto\", role = \"ctb\"), person(\"Ross\", \"Ihaka\", role = c(\"ctb\", \"cph\")), person(\"R Core Team\", role = c(\"ctb\", \"cph\")), person(\"Daniel\", \"Reid\", role = \"ctb\"), person(\"David\", \"Shaub\", role = \"ctb\"), person(\"Yuan\", \"Tang\", role = \"ctb\", comment = c(ORCID = \"0000-0001-5243-233X\")), person(\"Xiaoqian\", \"Wang\", role = \"ctb\"), person(\"Zhenyu\", \"Zhou\", role = \"ctb\") )", + "BugReports": "https://github.com/robjhyndman/forecast/issues", + "License": "GPL-3", + "URL": "https://pkg.robjhyndman.com/forecast/, https://github.com/robjhyndman/forecast", + "VignetteBuilder": "knitr", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Rob Hyndman [aut, cre, cph] (ORCID: ), George Athanasopoulos [aut] (ORCID: ), Christoph Bergmeir [aut] (ORCID: ), Gabriel Caceres [aut] (ORCID: ), Leanne Chhay [aut], Kirill Kuroptev [aut], Maximilian Mücke [aut] (ORCID: ), Mitchell O'Hara-Wild [aut] (ORCID: ), Fotios Petropoulos [aut] (ORCID: ), Slava Razbash [aut], Earo Wang [aut] (ORCID: ), Farah Yasmeen [aut] (ORCID: ), Federico Garza [ctb], Daniele Girolimetto [ctb], Ross Ihaka [ctb, cph], R Core Team [ctb, cph], Daniel Reid [ctb], David Shaub [ctb], Yuan Tang [ctb] (ORCID: ), Xiaoqian Wang [ctb], Zhenyu Zhou [ctb]", + "Maintainer": "Rob Hyndman ", + "Repository": "CRAN" + }, + "fracdiff": { + "Package": "fracdiff", + "Version": "1.5-3", + "Source": "Repository", + "VersionNote": "Released 1.5-0 on 2019-12-09, 1.5-1 on 2020-01-20, 1.5-2 on 2022-10-31", + "Date": "2024-02-01", + "Title": "Fractionally Differenced ARIMA aka ARFIMA(P,d,q) Models", + "Authors@R": "c(person(\"Martin\",\"Maechler\", role=c(\"aut\",\"cre\"), email=\"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(\"Chris\", \"Fraley\", role=c(\"ctb\",\"cph\"), comment = \"S original; Fortran code\") , person(\"Friedrich\", \"Leisch\", role = \"ctb\", comment = c(\"R port\", ORCID = \"0000-0001-7278-1983\")) , person(\"Valderio\", \"Reisen\", role=\"ctb\", comment = \"fdGPH() & fdSperio()\") , person(\"Artur\", \"Lemonte\", role=\"ctb\", comment = \"fdGPH() & fdSperio()\") , person(\"Rob\", \"Hyndman\", email=\"Rob.Hyndman@monash.edu\", role=\"ctb\", comment = c(\"residuals() & fitted()\", ORCID = \"0000-0002-2140-5352\")) )", + "Description": "Maximum likelihood estimation of the parameters of a fractionally differenced ARIMA(p,d,q) model (Haslett and Raftery, Appl.Statistics, 1989); including inference and basic methods. Some alternative algorithms to estimate \"H\".", + "Imports": [ + "stats" + ], + "Suggests": [ + "longmemo", + "forecast", + "urca" + ], + "License": "GPL (>= 2)", + "URL": "https://github.com/mmaechler/fracdiff", + "BugReports": "https://github.com/mmaechler/fracdiff/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Martin Maechler [aut, cre] (), Chris Fraley [ctb, cph] (S original; Fortran code), Friedrich Leisch [ctb] (R port, ), Valderio Reisen [ctb] (fdGPH() & fdSperio()), Artur Lemonte [ctb] (fdGPH() & fdSperio()), Rob Hyndman [ctb] (residuals() & fitted(), )", + "Maintainer": "Martin Maechler ", + "Repository": "CRAN" + }, + "fs": { + "Package": "fs", + "Version": "2.0.1", + "Source": "Repository", + "Title": "Cross-Platform File System Operations Based on 'libuv'", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", , \"jeroenooms@gmail.com\", role = \"cre\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", + "License": "MIT + file LICENSE", + "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", + "BugReports": "https://github.com/r-lib/fs/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "covr", + "crayon", + "knitr", + "pillar (>= 1.0.0)", + "rmarkdown", + "spelling", + "testthat (>= 3.0.0)", + "tibble (>= 1.1.0)", + "vctrs (>= 0.3.0)", + "withr" + ], + "VignetteBuilder": "knitr", + "SystemRequirements": "libuv: libuv-devel (rpm) or libuv1-dev (deb). Alternatively to build the vendored libuv 'cmake' is required. GNU make.", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Copyright": "file COPYRIGHTS", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut], Jeroen Ooms [cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "generics": { + "Package": "generics", + "Version": "0.1.4", + "Source": "Repository", + "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", + "License": "MIT + file LICENSE", + "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", + "BugReports": "https://github.com/r-lib/generics/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "covr", + "pkgload", + "testthat (>= 3.0.0)", + "tibble", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "ggplot2": { + "Package": "ggplot2", + "Version": "4.0.2", + "Source": "Repository", + "Title": "Create Elegant Data Visualisations Using the Grammar of Graphics", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Winston\", \"Chang\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Kohske\", \"Takahashi\", role = \"aut\"), person(\"Claus\", \"Wilke\", role = \"aut\", comment = c(ORCID = \"0000-0002-7470-9261\")), person(\"Kara\", \"Woo\", role = \"aut\", comment = c(ORCID = \"0000-0002-5125-4188\")), person(\"Hiroaki\", \"Yutani\", role = \"aut\", comment = c(ORCID = \"0000-0002-3385-7233\")), person(\"Dewey\", \"Dunnington\", role = \"aut\", comment = c(ORCID = \"0000-0002-9415-4582\")), person(\"Teun\", \"van den Brand\", role = \"aut\", comment = c(ORCID = \"0000-0002-9335-7468\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A system for 'declaratively' creating graphics, based on \"The Grammar of Graphics\". You provide the data, tell 'ggplot2' how to map variables to aesthetics, what graphical primitives to use, and it takes care of the details.", + "License": "MIT + file LICENSE", + "URL": "https://ggplot2.tidyverse.org, https://github.com/tidyverse/ggplot2", + "BugReports": "https://github.com/tidyverse/ggplot2/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "grDevices", + "grid", + "gtable (>= 0.3.6)", + "isoband", + "lifecycle (> 1.0.1)", + "rlang (>= 1.1.0)", + "S7", + "scales (>= 1.4.0)", + "stats", + "vctrs (>= 0.6.0)", + "withr (>= 2.5.0)" + ], + "Suggests": [ + "broom", + "covr", + "dplyr", + "ggplot2movies", + "hexbin", + "Hmisc", + "hms", + "knitr", + "mapproj", + "maps", + "MASS", + "mgcv", + "multcomp", + "munsell", + "nlme", + "profvis", + "quantreg", + "quarto", + "ragg (>= 1.2.6)", + "RColorBrewer", + "roxygen2", + "rpart", + "sf (>= 0.7-3)", + "svglite (>= 2.1.2)", + "testthat (>= 3.1.5)", + "tibble", + "vdiffr (>= 1.0.6)", + "xml2" + ], + "Enhances": [ + "sp" + ], + "VignetteBuilder": "quarto", + "Config/Needs/website": "ggtext, tidyr, forcats, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Collate": "'ggproto.R' 'ggplot-global.R' 'aaa-.R' 'aes-colour-fill-alpha.R' 'aes-evaluation.R' 'aes-group-order.R' 'aes-linetype-size-shape.R' 'aes-position.R' 'all-classes.R' 'compat-plyr.R' 'utilities.R' 'aes.R' 'annotation-borders.R' 'utilities-checks.R' 'legend-draw.R' 'geom-.R' 'annotation-custom.R' 'annotation-logticks.R' 'scale-type.R' 'layer.R' 'make-constructor.R' 'geom-polygon.R' 'geom-map.R' 'annotation-map.R' 'geom-raster.R' 'annotation-raster.R' 'annotation.R' 'autolayer.R' 'autoplot.R' 'axis-secondary.R' 'backports.R' 'bench.R' 'bin.R' 'coord-.R' 'coord-cartesian-.R' 'coord-fixed.R' 'coord-flip.R' 'coord-map.R' 'coord-munch.R' 'coord-polar.R' 'coord-quickmap.R' 'coord-radial.R' 'coord-sf.R' 'coord-transform.R' 'data.R' 'docs_layer.R' 'facet-.R' 'facet-grid-.R' 'facet-null.R' 'facet-wrap.R' 'fortify-map.R' 'fortify-models.R' 'fortify-spatial.R' 'fortify.R' 'stat-.R' 'geom-abline.R' 'geom-rect.R' 'geom-bar.R' 'geom-tile.R' 'geom-bin2d.R' 'geom-blank.R' 'geom-boxplot.R' 'geom-col.R' 'geom-path.R' 'geom-contour.R' 'geom-point.R' 'geom-count.R' 'geom-crossbar.R' 'geom-segment.R' 'geom-curve.R' 'geom-defaults.R' 'geom-ribbon.R' 'geom-density.R' 'geom-density2d.R' 'geom-dotplot.R' 'geom-errorbar.R' 'geom-freqpoly.R' 'geom-function.R' 'geom-hex.R' 'geom-histogram.R' 'geom-hline.R' 'geom-jitter.R' 'geom-label.R' 'geom-linerange.R' 'geom-pointrange.R' 'geom-quantile.R' 'geom-rug.R' 'geom-sf.R' 'geom-smooth.R' 'geom-spoke.R' 'geom-text.R' 'geom-violin.R' 'geom-vline.R' 'ggplot2-package.R' 'grob-absolute.R' 'grob-dotstack.R' 'grob-null.R' 'grouping.R' 'properties.R' 'margins.R' 'theme-elements.R' 'guide-.R' 'guide-axis.R' 'guide-axis-logticks.R' 'guide-axis-stack.R' 'guide-axis-theta.R' 'guide-legend.R' 'guide-bins.R' 'guide-colorbar.R' 'guide-colorsteps.R' 'guide-custom.R' 'guide-none.R' 'guide-old.R' 'guides-.R' 'guides-grid.R' 'hexbin.R' 'import-standalone-obj-type.R' 'import-standalone-types-check.R' 'labeller.R' 'labels.R' 'layer-sf.R' 'layout.R' 'limits.R' 'performance.R' 'plot-build.R' 'plot-construction.R' 'plot-last.R' 'plot.R' 'position-.R' 'position-collide.R' 'position-dodge.R' 'position-dodge2.R' 'position-identity.R' 'position-jitter.R' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.R' 'quick-plot.R' 'reshape-add-margins.R' 'save.R' 'scale-.R' 'scale-alpha.R' 'scale-binned.R' 'scale-brewer.R' 'scale-colour.R' 'scale-continuous.R' 'scale-date.R' 'scale-discrete-.R' 'scale-expansion.R' 'scale-gradient.R' 'scale-grey.R' 'scale-hue.R' 'scale-identity.R' 'scale-linetype.R' 'scale-linewidth.R' 'scale-manual.R' 'scale-shape.R' 'scale-size.R' 'scale-steps.R' 'scale-view.R' 'scale-viridis.R' 'scales-.R' 'stat-align.R' 'stat-bin.R' 'stat-summary-2d.R' 'stat-bin2d.R' 'stat-bindot.R' 'stat-binhex.R' 'stat-boxplot.R' 'stat-connect.R' 'stat-contour.R' 'stat-count.R' 'stat-density-2d.R' 'stat-density.R' 'stat-ecdf.R' 'stat-ellipse.R' 'stat-function.R' 'stat-identity.R' 'stat-manual.R' 'stat-qq-line.R' 'stat-qq.R' 'stat-quantilemethods.R' 'stat-sf-coordinates.R' 'stat-sf.R' 'stat-smooth-methods.R' 'stat-smooth.R' 'stat-sum.R' 'stat-summary-bin.R' 'stat-summary-hex.R' 'stat-summary.R' 'stat-unique.R' 'stat-ydensity.R' 'summarise-plot.R' 'summary.R' 'theme.R' 'theme-defaults.R' 'theme-current.R' 'theme-sub.R' 'utilities-break.R' 'utilities-grid.R' 'utilities-help.R' 'utilities-patterns.R' 'utilities-resolution.R' 'utilities-tidy-eval.R' 'zxx.R' 'zzz.R'", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Lionel Henry [aut], Thomas Lin Pedersen [aut, cre] (ORCID: ), Kohske Takahashi [aut], Claus Wilke [aut] (ORCID: ), Kara Woo [aut] (ORCID: ), Hiroaki Yutani [aut] (ORCID: ), Dewey Dunnington [aut] (ORCID: ), Teun van den Brand [aut] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "glue": { + "Package": "glue", + "Version": "1.8.0", + "Source": "Repository", + "Title": "Interpreted String Literals", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", + "License": "MIT + file LICENSE", + "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", + "BugReports": "https://github.com/tidyverse/glue/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "methods" + ], + "Suggests": [ + "crayon", + "DBI (>= 1.2.0)", + "dplyr", + "knitr", + "magrittr", + "rlang", + "rmarkdown", + "RSQLite", + "testthat (>= 3.2.0)", + "vctrs (>= 0.3.0)", + "waldo (>= 0.5.3)", + "withr" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "yes", + "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]", + "Maintainer": "Jennifer Bryan ", + "Repository": "CRAN" + }, + "gtable": { + "Package": "gtable", + "Version": "0.3.6", + "Source": "Repository", + "Title": "Arrange 'Grobs' in Tables", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools to make it easier to work with \"tables\" of 'grobs'. The 'gtable' package defines a 'gtable' grob class that specifies a grid along with a list of grobs and their placement in the grid. Further the package makes it easy to manipulate and combine 'gtable' objects so that complex compositions can be built up sequentially.", + "License": "MIT + file LICENSE", + "URL": "https://gtable.r-lib.org, https://github.com/r-lib/gtable", + "BugReports": "https://github.com/r-lib/gtable/issues", + "Depends": [ + "R (>= 4.0)" + ], + "Imports": [ + "cli", + "glue", + "grid", + "lifecycle", + "rlang (>= 1.1.0)", + "stats" + ], + "Suggests": [ + "covr", + "ggplot2", + "knitr", + "profvis", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2024-10-25", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "gtools": { + "Package": "gtools", + "Version": "3.9.5", + "Source": "Repository", + "Title": "Various R Programming Tools", + "Description": "Functions to assist in R programming, including: - assist in developing, updating, and maintaining R and R packages ('ask', 'checkRVersion', 'getDependencies', 'keywords', 'scat'), - calculate the logit and inverse logit transformations ('logit', 'inv.logit'), - test if a value is missing, empty or contains only NA and NULL values ('invalid'), - manipulate R's .Last function ('addLast'), - define macros ('defmacro'), - detect odd and even integers ('odd', 'even'), - convert strings containing non-ASCII characters (like single quotes) to plain ASCII ('ASCIIfy'), - perform a binary search ('binsearch'), - sort strings containing both numeric and character components ('mixedsort'), - create a factor variable from the quantiles of a continuous variable ('quantcut'), - enumerate permutations and combinations ('combinations', 'permutation'), - calculate and convert between fold-change and log-ratio ('foldchange', 'logratio2foldchange', 'foldchange2logratio'), - calculate probabilities and generate random numbers from Dirichlet distributions ('rdirichlet', 'ddirichlet'), - apply a function over adjacent subsets of a vector ('running'), - modify the TCP_NODELAY ('de-Nagle') flag for socket objects, - efficient 'rbind' of data frames, even if the column names don't match ('smartbind'), - generate significance stars from p-values ('stars.pval'), - convert characters to/from ASCII codes ('asc', 'chr'), - convert character vector to ASCII representation ('ASCIIfy'), - apply title capitalization rules to a character vector ('capwords').", + "Authors@R": "c(person(\"Gregory R.\", \"Warnes\", role = \"aut\"), person(\"Ben\", \"Bolker\", role = c(\"aut\", \"cre\"), email = \"bolker@mcmaster.ca\", comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Thomas\", \"Lumley\", role = \"aut\"), person(\"Arni\", \"Magnusson\", role = \"aut\"), person(\"Bill\", \"Venables\", role = \"aut\"), person(\"Genei\", \"Ryodan\", role = \"aut\"), person(\"Steffen\", \"Moeller\", role = \"aut\"), person(\"Ian\", \"Wilson\", role = \"ctb\"), person(\"Mark\", \"Davis\", role = \"ctb\"), person(\"Nitin\", \"Jain\", role=\"ctb\"), person(\"Scott\", \"Chamberlain\", role = \"ctb\"))", + "License": "GPL-2", + "Depends": [ + "methods", + "stats", + "utils" + ], + "URL": "https://github.com/r-gregmisc/gtools", + "BugReports": "https://github.com/r-gregmisc/gtools/issues", + "Language": "en-US", + "Suggests": [ + "car", + "gplots", + "knitr", + "rstudioapi", + "SGP", + "taxize" + ], + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Gregory R. Warnes [aut], Ben Bolker [aut, cre] (), Thomas Lumley [aut], Arni Magnusson [aut], Bill Venables [aut], Genei Ryodan [aut], Steffen Moeller [aut], Ian Wilson [ctb], Mark Davis [ctb], Nitin Jain [ctb], Scott Chamberlain [ctb]", + "Maintainer": "Ben Bolker ", + "Repository": "CRAN" + }, + "highr": { + "Package": "highr", + "Version": "0.12", + "Source": "Repository", + "Type": "Package", + "Title": "Syntax Highlighting for R Source Code", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", + "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", + "Depends": [ + "R (>= 3.3.0)" + ], + "Imports": [ + "xfun (>= 0.18)" + ], + "Suggests": [ + "knitr", + "markdown", + "testit" + ], + "License": "GPL", + "URL": "https://github.com/yihui/highr", + "BugReports": "https://github.com/yihui/highr/issues", + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: ), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "htmltools": { + "Package": "htmltools", + "Version": "0.5.9", + "Source": "Repository", + "Type": "Package", + "Title": "Tools for HTML", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools for HTML generation and output.", + "License": "GPL (>= 2)", + "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", + "BugReports": "https://github.com/rstudio/htmltools/issues", + "Depends": [ + "R (>= 2.14.1)" + ], + "Imports": [ + "base64enc", + "digest", + "fastmap (>= 1.1.0)", + "grDevices", + "rlang (>= 1.0.0)", + "utils" + ], + "Suggests": [ + "Cairo", + "markdown", + "ragg", + "shiny", + "testthat", + "withr" + ], + "Enhances": [ + "knitr" + ], + "Config/Needs/check": "knitr", + "Config/Needs/website": "rstudio/quillt, bench", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Winston Chang [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "htmlwidgets": { + "Package": "htmlwidgets", + "Version": "1.6.4", + "Source": "Repository", + "Type": "Package", + "Title": "HTML Widgets for R", + "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", + "License": "MIT + file LICENSE", + "URL": "https://github.com/ramnathv/htmlwidgets", + "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", + "Imports": [ + "grDevices", + "htmltools (>= 0.5.7)", + "jsonlite (>= 0.9.16)", + "knitr (>= 1.8)", + "rmarkdown", + "yaml" + ], + "Suggests": [ + "testthat" + ], + "Enhances": [ + "shiny (>= 1.1)" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.2.3", + "NeedsCompilation": "no", + "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "httpuv": { + "Package": "httpuv", + "Version": "1.6.17", + "Source": "Repository", + "Type": "Package", + "Title": "HTTP and WebSocket Server Library", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", + "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", + "License": "GPL (>= 2) | file LICENSE", + "URL": "https://rstudio.github.io/httpuv/, https://github.com/rstudio/httpuv", + "BugReports": "https://github.com/rstudio/httpuv/issues", + "Depends": [ + "R (>= 2.15.1)" + ], + "Imports": [ + "later (>= 0.8.0)", + "promises", + "R6", + "Rcpp (>= 1.0.7)", + "utils" + ], + "Suggests": [ + "callr", + "curl", + "jsonlite", + "testthat (>= 3.0.0)", + "websocket" + ], + "LinkingTo": [ + "later", + "Rcpp" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-07-01", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "GNU make, zlib", + "Collate": "'RcppExports.R' 'httpuv-package.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC [cph, fnd] (ROR: ), Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "httr": { + "Package": "httr", + "Version": "1.4.8", + "Source": "Repository", + "Title": "Tools for Working with URLs and HTTP", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", + "License": "MIT + file LICENSE", + "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", + "BugReports": "https://github.com/r-lib/httr/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "curl (>= 5.1.0)", + "jsonlite", + "mime", + "openssl (>= 0.8)", + "R6" + ], + "Suggests": [ + "covr", + "httpuv", + "jpeg", + "knitr", + "png", + "readr", + "rmarkdown", + "testthat (>= 0.8.0)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "isoband": { + "Package": "isoband", + "Version": "0.3.0", + "Source": "Repository", + "Title": "Generate Isolines and Isobands from Regularly Spaced Elevation Grids", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Claus O.\", \"Wilke\", , \"wilke@austin.utexas.edu\", role = \"aut\", comment = c(\"Original author\", ORCID = \"0000-0002-7470-9261\")), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.", + "License": "MIT + file LICENSE", + "URL": "https://isoband.r-lib.org, https://github.com/r-lib/isoband", + "BugReports": "https://github.com/r-lib/isoband/issues", + "Imports": [ + "cli", + "grid", + "rlang", + "utils" + ], + "Suggests": [ + "covr", + "ggplot2", + "knitr", + "magick", + "bench", + "rmarkdown", + "sf", + "testthat (>= 3.0.0)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-12-05", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Config/build/compilation-database": "true", + "LinkingTo": [ + "cpp11" + ], + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut] (ORCID: ), Claus O. Wilke [aut] (Original author, ORCID: ), Thomas Lin Pedersen [aut, cre] (ORCID: ), Posit, PBC [cph, fnd] (ROR: )", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "jquerylib": { + "Package": "jquerylib", + "Version": "0.1.4", + "Source": "Repository", + "Title": "Obtain 'jQuery' as an HTML Dependency Object", + "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", + "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Config/testthat/edition": "3", + "RoxygenNote": "7.0.2", + "Imports": [ + "htmltools" + ], + "Suggests": [ + "testthat" + ], + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "jsonlite": { + "Package": "jsonlite", + "Version": "2.0.0", + "Source": "Repository", + "Title": "A Simple and Robust JSON Parser and Generator for R", + "License": "MIT + file LICENSE", + "Depends": [ + "methods" + ], + "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", + "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", + "BugReports": "https://github.com/jeroen/jsonlite/issues", + "Maintainer": "Jeroen Ooms ", + "VignetteBuilder": "knitr, R.rsp", + "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", + "Suggests": [ + "httr", + "vctrs", + "testthat", + "knitr", + "rmarkdown", + "R.rsp", + "sf" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", + "Repository": "CRAN" + }, + "knitr": { + "Package": "knitr", + "Version": "1.51", + "Source": "Repository", + "Type": "Package", + "Title": "A General-Purpose Package for Dynamic Report Generation in R", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "evaluate (>= 0.15)", + "highr (>= 0.11)", + "methods", + "tools", + "xfun (>= 0.52)", + "yaml (>= 2.1.19)" + ], + "Suggests": [ + "bslib", + "DBI (>= 0.4-1)", + "digest", + "formatR", + "gifski", + "gridSVG", + "htmlwidgets (>= 0.7)", + "jpeg", + "JuliaCall (>= 0.11.1)", + "magick", + "litedown", + "markdown (>= 1.3)", + "otel", + "otelsdk", + "png", + "ragg", + "reticulate (>= 1.4)", + "rgl (>= 0.95.1201)", + "rlang", + "rmarkdown", + "sass", + "showtext", + "styler (>= 1.2.0)", + "targets (>= 0.6.0)", + "testit", + "tibble", + "tikzDevice (>= 0.10)", + "tinytex (>= 0.56)", + "webshot", + "rstudioapi", + "svglite" + ], + "License": "GPL", + "URL": "https://yihui.org/knitr/", + "BugReports": "https://github.com/yihui/knitr/issues", + "Encoding": "UTF-8", + "VignetteBuilder": "litedown, knitr", + "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", + "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'otel.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre] (ORCID: , URL: https://yihui.org), Abhraneel Sarma [ctb], Adam Vogt [ctb], Alastair Andrew [ctb], Alex Zvoleff [ctb], Amar Al-Zubaidi [ctb], Andre Simon [ctb] (the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de), Aron Atkins [ctb], Aaron Wolen [ctb], Ashley Manton [ctb], Atsushi Yasumoto [ctb] (ORCID: ), Ben Baumer [ctb], Brian Diggs [ctb], Brian Zhang [ctb], Bulat Yapparov [ctb], Cassio Pereira [ctb], Christophe Dervieux [ctb], David Hall [ctb], David Hugh-Jones [ctb], David Robinson [ctb], Doug Hemken [ctb], Duncan Murdoch [ctb], Elio Campitelli [ctb], Ellis Hughes [ctb], Emily Riederer [ctb], Fabian Hirschmann [ctb], Fitch Simeon [ctb], Forest Fang [ctb], Frank E Harrell Jr [ctb] (the Sweavel package at inst/misc/Sweavel.sty), Garrick Aden-Buie [ctb], Gregoire Detrez [ctb], Hadley Wickham [ctb], Hao Zhu [ctb], Heewon Jeon [ctb], Henrik Bengtsson [ctb], Hiroaki Yutani [ctb], Ian Lyttle [ctb], Hodges Daniel [ctb], Jacob Bien [ctb], Jake Burkhead [ctb], James Manton [ctb], Jared Lander [ctb], Jason Punyon [ctb], Javier Luraschi [ctb], Jeff Arnold [ctb], Jenny Bryan [ctb], Jeremy Ashkenas [ctb, cph] (the CSS file at inst/misc/docco-classic.css), Jeremy Stephens [ctb], Jim Hester [ctb], Joe Cheng [ctb], Johannes Ranke [ctb], John Honaker [ctb], John Muschelli [ctb], Jonathan Keane [ctb], JJ Allaire [ctb], Johan Toloe [ctb], Jonathan Sidi [ctb], Joseph Larmarange [ctb], Julien Barnier [ctb], Kaiyin Zhong [ctb], Kamil Slowikowski [ctb], Karl Forner [ctb], Kevin K. Smith [ctb], Kirill Mueller [ctb], Kohske Takahashi [ctb], Lorenz Walthert [ctb], Lucas Gallindo [ctb], Marius Hofert [ctb], Martin Modrák [ctb], Michael Chirico [ctb], Michael Friendly [ctb], Michal Bojanowski [ctb], Michel Kuhlmann [ctb], Miller Patrick [ctb], Nacho Caballero [ctb], Nick Salkowski [ctb], Niels Richard Hansen [ctb], Noam Ross [ctb], Obada Mahdi [ctb], Pavel N. Krivitsky [ctb] (ORCID: ), Pedro Faria [ctb], Qiang Li [ctb], Ramnath Vaidyanathan [ctb], Richard Cotton [ctb], Robert Krzyzanowski [ctb], Rodrigo Copetti [ctb], Romain Francois [ctb], Ruaridh Williamson [ctb], Sagiru Mati [ctb] (ORCID: ), Scott Kostyshak [ctb], Sebastian Meyer [ctb], Sietse Brouwer [ctb], Simon de Bernard [ctb], Sylvain Rousseau [ctb], Taiyun Wei [ctb], Thibaut Assus [ctb], Thibaut Lamadon [ctb], Thomas Leeper [ctb], Tim Mastny [ctb], Tom Torsney-Weir [ctb], Trevor Davis [ctb], Viktoras Veitas [ctb], Weicheng Zhu [ctb], Wush Wu [ctb], Zachary Foster [ctb], Zhian N. Kamvar [ctb] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "labeling": { + "Package": "labeling", + "Version": "0.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Axis Labeling", + "Date": "2023-08-29", + "Author": "Justin Talbot,", + "Maintainer": "Nuno Sempere ", + "Description": "Functions which provide a range of axis labeling algorithms.", + "License": "MIT + file LICENSE | Unlimited", + "Collate": "'labeling.R'", + "NeedsCompilation": "no", + "Imports": [ + "stats", + "graphics" + ], + "Repository": "CRAN" + }, + "later": { + "Package": "later", + "Version": "1.4.8", + "Source": "Repository", + "Type": "Package", + "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", + "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", + "License": "MIT + file LICENSE", + "URL": "https://later.r-lib.org, https://github.com/r-lib/later", + "BugReports": "https://github.com/r-lib/later/issues", + "Depends": [ + "R (>= 3.5)" + ], + "Imports": [ + "Rcpp (>= 1.0.10)", + "rlang" + ], + "Suggests": [ + "knitr", + "nanonext", + "promises", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "Rcpp" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-07-18", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], Charlie Gao [aut, cre] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: ), Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", + "Maintainer": "Charlie Gao ", + "Repository": "CRAN" + }, + "lattice": { + "Package": "lattice", + "Version": "0.22-9", + "Source": "Repository", + "Date": "2026-02-03", + "Priority": "recommended", + "Title": "Trellis Graphics for R", + "Authors@R": "c(person(\"Deepayan\", \"Sarkar\", role = c(\"aut\", \"cre\"), email = \"deepayan.sarkar@r-project.org\", comment = c(ORCID = \"0000-0003-4107-1553\")), person(\"Felix\", \"Andrews\", role = \"ctb\"), person(\"Kevin\", \"Wright\", role = \"ctb\", comment = \"documentation\"), person(\"Neil\", \"Klepeis\", role = \"ctb\"), person(\"Johan\", \"Larsson\", role = \"ctb\", comment = \"miscellaneous improvements\"), person(\"Zhijian (Jason)\", \"Wen\", role = \"cph\", comment = \"filled contour code\"), person(\"Paul\", \"Murrell\", role = \"ctb\", email = \"paul@stat.auckland.ac.nz\"), person(\"Stefan\", \"Eng\", role = \"ctb\", comment = \"violin plot improvements\"), person(\"Achim\", \"Zeileis\", role = \"ctb\", comment = \"modern colors\"), person(\"Alexandre\", \"Courtiol\", role = \"ctb\", comment = \"generics for larrows, lpolygon, lrect and lsegments\") )", + "Description": "A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.", + "Depends": [ + "R (>= 4.0.0)" + ], + "Suggests": [ + "KernSmooth", + "MASS", + "latticeExtra", + "colorspace" + ], + "Imports": [ + "grid", + "grDevices", + "graphics", + "stats", + "utils" + ], + "Enhances": [ + "chron", + "zoo" + ], + "LazyLoad": "yes", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "https://lattice.r-forge.r-project.org/", + "BugReports": "https://github.com/deepayan/lattice/issues", + "NeedsCompilation": "yes", + "Author": "Deepayan Sarkar [aut, cre] (ORCID: ), Felix Andrews [ctb], Kevin Wright [ctb] (documentation), Neil Klepeis [ctb], Johan Larsson [ctb] (miscellaneous improvements), Zhijian (Jason) Wen [cph] (filled contour code), Paul Murrell [ctb], Stefan Eng [ctb] (violin plot improvements), Achim Zeileis [ctb] (modern colors), Alexandre Courtiol [ctb] (generics for larrows, lpolygon, lrect and lsegments)", + "Maintainer": "Deepayan Sarkar ", + "Repository": "CRAN" + }, + "lazyeval": { + "Package": "lazyeval", + "Version": "0.2.2", + "Source": "Repository", + "Title": "Lazy (Non-Standard) Evaluation", + "Description": "An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", ,\"hadley@rstudio.com\", c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", + "License": "GPL-3", + "LazyData": "true", + "Depends": [ + "R (>= 3.1.0)" + ], + "Suggests": [ + "knitr", + "rmarkdown (>= 0.2.65)", + "testthat", + "covr" + ], + "VignetteBuilder": "knitr", + "RoxygenNote": "6.1.1", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre], RStudio [cph]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.5", + "Source": "Repository", + "Title": "Manage the Life Cycle of your Package Functions", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", + "License": "MIT + file LICENSE", + "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", + "BugReports": "https://github.com/r-lib/lifecycle/issues", + "Depends": [ + "R (>= 3.6)" + ], + "Imports": [ + "cli (>= 3.4.0)", + "rlang (>= 1.1.0)" + ], + "Suggests": [ + "covr", + "knitr", + "lintr (>= 3.1.0)", + "rmarkdown", + "testthat (>= 3.0.1)", + "tibble", + "tidyverse", + "tools", + "vctrs", + "withr", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate, usethis", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "lme4": { + "Package": "lme4", + "Version": "2.0-1", + "Source": "Repository", + "Title": "Linear Mixed-Effects Models using 'Eigen' and S4", + "Authors@R": "c(person(\"Douglas\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Ben\", \"Bolker\", role = c(\"cre\", \"aut\"), email = \"bbolker+lme4@gmail.com\", comment = c(ORCID = \"0000-0002-2127-0443\")), person(\"Steven\", \"Walker\", role = \"aut\", comment = c(ORCID = \"0000-0002-4394-9078\")), person(\"Rune Haubo Bojesen\", \"Christensen\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4494-3399\")), person(\"Henrik\", \"Singmann\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4842-3657\")), person(\"Bin\", \"Dai\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\", comment = c(ORCID = \"0000-0001-8172-3603\")), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Peter\", \"Green\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0238-9852\")), person(\"John\", \"Fox\", role = \"ctb\"), person(\"Alexander\", \"Bauer\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-9101-3362\", \"shared copyright on simulate.formula\")), person(\"Emi\", \"Tanaka\", role = \"ctb\", comment = c(ORCID = \"0000-0002-1455-259X\")), person(\"Mikael\", \"Jagan\", role = \"aut\", comment = c(ORCID = \"0000-0002-3542-2938\")), person(\"Ross D.\", \"Boylan\", role = \"ctb\", comment = c(ORCID = \"0009-0003-4123-8090\")), person(\"Anna\", \"Ly\", role = \"aut\", comment = c(ORCID = \"0000-0002-0210-0342\")))", + "Description": "Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' \"glue\".", + "Depends": [ + "R (>= 3.6)", + "Matrix", + "methods", + "stats" + ], + "LinkingTo": [ + "Matrix (>= 1.5-0)", + "Rcpp (>= 0.10.5)", + "RcppEigen (>= 0.3.3.9.4)" + ], + "Imports": [ + "MASS", + "Rdpack", + "boot", + "graphics", + "grid", + "lattice", + "minqa (>= 1.1.15)", + "nlme (>= 3.1-123)", + "nloptr (>= 1.0.4)", + "parallel", + "reformulas (>= 0.4.3.1)", + "rlang", + "splines", + "utils" + ], + "Suggests": [ + "HSAUR3", + "MEMSS", + "car", + "dfoptim", + "gamm4", + "ggplot2", + "glmmTMB", + "knitr", + "merDeriv", + "mgcv", + "mlmRev", + "numDeriv", + "optimx (>= 2013.8.6)", + "pbkrtest", + "rmarkdown", + "rr2", + "semEff", + "statmod", + "testthat (>= 0.8.1)", + "tibble" + ], + "Enhances": [ + "DHARMa", + "performance" + ], + "RdMacros": "Rdpack", + "VignetteBuilder": "knitr", + "LazyData": "yes", + "License": "GPL (>= 2)", + "URL": "https://github.com/lme4/lme4/", + "BugReports": "https://github.com/lme4/lme4/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Douglas Bates [aut] (ORCID: ), Martin Maechler [aut] (ORCID: ), Ben Bolker [cre, aut] (ORCID: ), Steven Walker [aut] (ORCID: ), Rune Haubo Bojesen Christensen [ctb] (ORCID: ), Henrik Singmann [ctb] (ORCID: ), Bin Dai [ctb], Fabian Scheipl [ctb] (ORCID: ), Gabor Grothendieck [ctb], Peter Green [ctb] (ORCID: ), John Fox [ctb], Alexander Bauer [ctb], Pavel N. Krivitsky [ctb, cph] (ORCID: , shared copyright on simulate.formula), Emi Tanaka [ctb] (ORCID: ), Mikael Jagan [aut] (ORCID: ), Ross D. Boylan [ctb] (ORCID: ), Anna Ly [aut] (ORCID: )", + "Maintainer": "Ben Bolker ", + "Repository": "CRAN" + }, + "lmtest": { + "Package": "lmtest", + "Version": "0.9-40", + "Source": "Repository", + "Title": "Testing Linear Regression Models", + "Date": "2022-03-21", + "Authors@R": "c(person(given = \"Torsten\", family = \"Hothorn\", role = \"aut\", email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")), person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = c(\"Richard\", \"W.\"), family = \"Farebrother\", role = \"aut\", comment = \"pan.f\"), person(given = \"Clint\", family = \"Cummins\", role = \"aut\", comment = \"pan.f\"), person(given = \"Giovanni\", family = \"Millo\", role = \"ctb\"), person(given = \"David\", family = \"Mitchell\", role = \"ctb\"))", + "Description": "A collection of tests, data sets, and examples for diagnostic checking in linear regression models. Furthermore, some generic tools for inference in parametric models are provided.", + "LazyData": "yes", + "Depends": [ + "R (>= 3.0.0)", + "stats", + "zoo" + ], + "Suggests": [ + "car", + "strucchange", + "sandwich", + "dynlm", + "stats4", + "survival", + "AER" + ], + "Imports": [ + "graphics" + ], + "License": "GPL-2 | GPL-3", + "NeedsCompilation": "yes", + "Author": "Torsten Hothorn [aut] (), Achim Zeileis [aut, cre] (), Richard W. Farebrother [aut] (pan.f), Clint Cummins [aut] (pan.f), Giovanni Millo [ctb], David Mitchell [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "magrittr": { + "Package": "magrittr", + "Version": "2.0.4", + "Source": "Repository", + "Type": "Package", + "Title": "A Forward-Pipe Operator for R", + "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"cre\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", + "License": "MIT + file LICENSE", + "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", + "BugReports": "https://github.com/tidyverse/magrittr/issues", + "Depends": [ + "R (>= 3.4.0)" + ], + "Suggests": [ + "covr", + "knitr", + "rlang", + "rmarkdown", + "testthat" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "Yes", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "memoise": { + "Package": "memoise", + "Version": "2.0.1", + "Source": "Repository", + "Title": "'Memoisation' of Functions", + "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", + "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", + "License": "MIT + file LICENSE", + "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", + "BugReports": "https://github.com/r-lib/memoise/issues", + "Imports": [ + "rlang (>= 0.4.10)", + "cachem" + ], + "Suggests": [ + "digest", + "aws.s3", + "covr", + "googleAuthR", + "googleCloudStorageR", + "httr", + "testthat" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.1.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "mgcv": { + "Package": "mgcv", + "Version": "1.9-4", + "Source": "Repository", + "Authors@R": "person(given = \"Simon\", family = \"Wood\", role = c(\"aut\", \"cre\"), email = \"simon.wood@r-project.org\")", + "Title": "Mixed GAM Computation Vehicle with Automatic Smoothness Estimation", + "Description": "Generalized additive (mixed) models, some of their extensions and other generalized ridge regression with multiple smoothing parameter estimation by (Restricted) Marginal Likelihood, Cross Validation and similar, or using iterated nested Laplace approximation for fully Bayesian inference. See Wood (2025) for an overview. Includes a gam() function, a wide variety of smoothers, 'JAGS' support and distributions beyond the exponential family.", + "Priority": "recommended", + "Depends": [ + "R (>= 4.4.0)", + "nlme (>= 3.1-64)" + ], + "Imports": [ + "methods", + "stats", + "graphics", + "Matrix", + "splines", + "utils" + ], + "Suggests": [ + "parallel", + "survival", + "MASS" + ], + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Author": "Simon Wood [aut, cre]", + "Maintainer": "Simon Wood ", + "Repository": "CRAN" + }, + "microbenchmark": { + "Package": "microbenchmark", + "Version": "1.5.0", + "Source": "Repository", + "Title": "Accurate Timing Functions", + "Description": "Provides infrastructure to accurately measure and compare the execution time of R expressions.", + "Authors@R": "c(person(\"Olaf\", \"Mersmann\", role=c(\"aut\")), person(\"Claudia\", \"Beleites\", role=c(\"ctb\")), person(\"Rainer\", \"Hurling\", role=c(\"ctb\")), person(\"Ari\", \"Friedman\", role=c(\"ctb\")), person(given=c(\"Joshua\",\"M.\"), family=\"Ulrich\", role=\"cre\", email=\"josh.m.ulrich@gmail.com\"))", + "URL": "https://github.com/joshuaulrich/microbenchmark/", + "BugReports": "https://github.com/joshuaulrich/microbenchmark/issues/", + "License": "BSD_2_clause + file LICENSE", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "graphics", + "stats" + ], + "Suggests": [ + "ggplot2", + "multcomp", + "RUnit" + ], + "SystemRequirements": "On a Unix-alike, one of the C functions mach_absolute_time (macOS), clock_gettime or gethrtime. If none of these is found, the obsolescent POSIX function gettimeofday will be tried.", + "ByteCompile": "yes", + "NeedsCompilation": "yes", + "Author": "Olaf Mersmann [aut], Claudia Beleites [ctb], Rainer Hurling [ctb], Ari Friedman [ctb], Joshua M. Ulrich [cre]", + "Maintainer": "Joshua M. Ulrich ", + "Repository": "CRAN" + }, + "mime": { + "Package": "mime", + "Version": "0.13", + "Source": "Repository", + "Type": "Package", + "Title": "Map Filenames to MIME Types", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", + "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", + "Imports": [ + "tools" + ], + "License": "GPL", + "URL": "https://github.com/yihui/mime", + "BugReports": "https://github.com/yihui/mime/issues", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "minqa": { + "Package": "minqa", + "Version": "1.2.8", + "Source": "Repository", + "Type": "Package", + "Title": "Derivative-Free Optimization Algorithms by Quadratic Approximation", + "Authors@R": "c(person(given = \"Douglas\", family = \"Bates\", role = \"aut\"), person(given = c(\"Katharine\", \"M.\"), family = \"Mullen\", role = c(\"aut\", \"cre\"), email = \"katharine.mullen@stat.ucla.edu\"), person(given = c(\"John\", \"C.\"), family = \"Nash\", role = \"aut\"), person(given = \"Ravi\", family = \"Varadhan\", role = \"aut\"))", + "Maintainer": "Katharine M. Mullen ", + "Description": "Derivative-free optimization by quadratic approximation based on an interface to Fortran implementations by M. J. D. Powell.", + "License": "GPL-2", + "URL": "http://optimizer.r-forge.r-project.org", + "Imports": [ + "Rcpp (>= 0.9.10)" + ], + "LinkingTo": [ + "Rcpp" + ], + "SystemRequirements": "GNU make", + "NeedsCompilation": "yes", + "Repository": "CRAN", + "Author": "Douglas Bates [aut], Katharine M. Mullen [aut, cre], John C. Nash [aut], Ravi Varadhan [aut]" + }, + "modelr": { + "Package": "modelr", + "Version": "0.1.11", + "Source": "Repository", + "Title": "Modelling Functions that Work with the Pipe", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Functions for modelling that help you seamlessly integrate modelling into a pipeline of data manipulation and visualisation.", + "License": "GPL-3", + "URL": "https://modelr.tidyverse.org, https://github.com/tidyverse/modelr", + "BugReports": "https://github.com/tidyverse/modelr/issues", + "Depends": [ + "R (>= 3.2)" + ], + "Imports": [ + "broom", + "magrittr", + "purrr (>= 0.2.2)", + "rlang (>= 1.0.6)", + "tibble", + "tidyr (>= 0.8.0)", + "tidyselect", + "vctrs" + ], + "Suggests": [ + "compiler", + "covr", + "ggplot2", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.2.3", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "multcomp": { + "Package": "multcomp", + "Version": "1.4-30", + "Source": "Repository", + "Title": "Simultaneous Inference in General Parametric Models", + "Date": "2026-03-09", + "Authors@R": "c(person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Peter\", \"Westfall\", role = \"aut\"), person(\"Richard M.\", \"Heiberger\", role = \"ctb\"), person(\"Andre\", \"Schuetzenmeister\", role = \"ctb\"), person(\"Susan\", \"Scheibe\", role = \"ctb\"), person(\"Christian\", \"Ritz\", role = \"ctb\"), person(\"Christian B.\", \"Pipper\", role = \"ctb\"))", + "Description": "Simultaneous tests and confidence intervals for general linear hypotheses in parametric models, including linear, generalized linear, linear mixed effects, and survival models. The package includes demos reproducing analyzes presented in the book \"Multiple Comparisons Using R\" (Bretz, Hothorn, Westfall, 2010, CRC Press).", + "Depends": [ + "stats", + "graphics", + "mvtnorm (>= 1.0-10)", + "survival (>= 2.39-4)", + "TH.data (>= 1.0-2)" + ], + "Imports": [ + "sandwich (>= 2.3-0)", + "codetools" + ], + "Suggests": [ + "lme4 (>= 0.999375-16)", + "nlme", + "robustbase", + "coin", + "MASS", + "foreign", + "xtable", + "lmtest", + "coxme (>= 2.2-1)", + "SimComp", + "ISwR", + "tram (>= 0.2-5)", + "fixest (>= 0.10)", + "glmmTMB", + "DoseFinding", + "HH", + "asd", + "gsDesign", + "lattice", + "bibtex" + ], + "URL": "http://multcomp.R-forge.R-project.org, https://www.routledge.com/Multiple-Comparisons-Using-R/Bretz-Hothorn-Westfall/p/book/9781584885740", + "LazyData": "yes", + "License": "GPL-2", + "NeedsCompilation": "no", + "Author": "Torsten Hothorn [aut, cre] (ORCID: ), Frank Bretz [aut], Peter Westfall [aut], Richard M. Heiberger [ctb], Andre Schuetzenmeister [ctb], Susan Scheibe [ctb], Christian Ritz [ctb], Christian B. Pipper [ctb]", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN" + }, + "mvtnorm": { + "Package": "mvtnorm", + "Version": "1.3-6", + "Source": "Repository", + "Title": "Multivariate Normal and t Distributions", + "Date": "2026-03-13", + "Authors@R": "c(person(\"Alan\", \"Genz\", role = \"aut\"), person(\"Frank\", \"Bretz\", role = \"aut\"), person(\"Tetsuhisa\", \"Miwa\", role = \"aut\"), person(\"Xuefei\", \"Mi\", role = \"aut\"), person(\"Friedrich\", \"Leisch\", role = \"ctb\"), person(\"Fabian\", \"Scheipl\", role = \"ctb\"), person(\"Bjoern\", \"Bornkamp\", role = \"ctb\", comment = c(ORCID = \"0000-0002-6294-8185\")), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Torsten\", \"Hothorn\", role = c(\"aut\", \"cre\"), email = \"Torsten.Hothorn@R-project.org\", comment = c(ORCID = \"0000-0001-8301-0471\")))", + "Description": "Computes multivariate normal and t probabilities, quantiles, random deviates, and densities. Log-likelihoods for multivariate Gaussian models and Gaussian copulae parameterised by Cholesky factors of covariance or precision matrices are implemented for interval-censored and exact data, or a mix thereof. Score functions for these log-likelihoods are available. A class representing multiple lower triangular matrices and corresponding methods are part of this package.", + "Imports": [ + "stats" + ], + "Depends": [ + "R(>= 3.5.0)" + ], + "Suggests": [ + "qrng", + "numDeriv", + "bibtex" + ], + "License": "GPL-2", + "URL": "http://mvtnorm.R-forge.R-project.org", + "NeedsCompilation": "yes", + "Author": "Alan Genz [aut], Frank Bretz [aut], Tetsuhisa Miwa [aut], Xuefei Mi [aut], Friedrich Leisch [ctb], Fabian Scheipl [ctb], Bjoern Bornkamp [ctb] (ORCID: ), Martin Maechler [ctb] (ORCID: ), Torsten Hothorn [aut, cre] (ORCID: )", + "Maintainer": "Torsten Hothorn ", + "Repository": "CRAN" + }, + "nlme": { + "Package": "nlme", + "Version": "3.1-169", + "Source": "Repository", + "Date": "2026-03-27", + "Priority": "recommended", + "Title": "Linear and Nonlinear Mixed Effects Models", + "Authors@R": "c(person(\"José\", \"Pinheiro\", role = \"aut\", comment = \"S version\"), person(\"Douglas\", \"Bates\", role = \"aut\", comment = \"up to 2007\"), person(\"Saikat\", \"DebRoy\", role = \"ctb\", comment = \"up to 2002\"), person(\"Deepayan\", \"Sarkar\", role = \"ctb\", comment = \"up to 2005\"), person(\"EISPACK authors\", role = \"ctb\", comment = \"src/rs.f\"), person(\"Siem\", \"Heisterkamp\", role = \"ctb\", comment = \"Author fixed sigma\"), person(\"Bert\", \"Van Willigen\",role = \"ctb\", comment = \"Programmer fixed sigma\"), person(\"Johannes\", \"Ranke\", role = \"ctb\", comment = \"varConstProp()\"), person(\"R Core Team\", email = \"R-core@R-project.org\", role = c(\"aut\", \"cre\"), comment = c(ROR = \"02zz1nj61\")))", + "Contact": "see 'MailingList'", + "Description": "Fit and compare Gaussian linear and nonlinear mixed-effects models.", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "graphics", + "stats", + "utils", + "lattice" + ], + "Suggests": [ + "MASS", + "SASmixed" + ], + "LazyData": "yes", + "Encoding": "UTF-8", + "License": "GPL (>= 2)", + "BugReports": "https://bugs.r-project.org", + "MailingList": "R-help@r-project.org", + "URL": "https://svn.r-project.org/R-packages/trunk/nlme/", + "NeedsCompilation": "yes", + "Author": "José Pinheiro [aut] (S version), Douglas Bates [aut] (up to 2007), Saikat DebRoy [ctb] (up to 2002), Deepayan Sarkar [ctb] (up to 2005), EISPACK authors [ctb] (src/rs.f), Siem Heisterkamp [ctb] (Author fixed sigma), Bert Van Willigen [ctb] (Programmer fixed sigma), Johannes Ranke [ctb] (varConstProp()), R Core Team [aut, cre] (ROR: )", + "Maintainer": "R Core Team ", + "Repository": "CRAN" + }, + "nloptr": { + "Package": "nloptr", + "Version": "2.2.1", + "Source": "Repository", + "Type": "Package", + "Title": "R Interface to NLopt", + "Authors@R": "c(person(\"Jelmer\", \"Ypma\", role = \"aut\", email = \"uctpjyy@ucl.ac.uk\"), person(c(\"Steven\", \"G.\"), \"Johnson\", role = \"aut\", comment = \"author of the NLopt C library\"), person(\"Aymeric\", \"Stamm\", role = c(\"ctb\", \"cre\"), email = \"aymeric.stamm@cnrs.fr\", comment = c(ORCID = \"0000-0002-8725-3654\")), person(c(\"Hans\", \"W.\"), \"Borchers\", role = \"ctb\", email = \"hwborchers@googlemail.com\"), person(\"Dirk\", \"Eddelbuettel\", role = \"ctb\", email = \"edd@debian.org\"), person(\"Brian\", \"Ripley\", role = \"ctb\", comment = \"build process on multiple OS\"), person(\"Kurt\", \"Hornik\", role = \"ctb\", comment = \"build process on multiple OS\"), person(\"Julien\", \"Chiquet\", role = \"ctb\"), person(\"Avraham\", \"Adler\", role = \"ctb\", email = \"Avraham.Adler@gmail.com\", comment = c(ORCID = \"0000-0002-3039-0703\")), person(\"Xiongtao\", \"Dai\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\", email = \"jeroen@berkeley.edu\"), person(\"Tomas\", \"Kalibera\", role = \"ctb\"), person(\"Mikael\", \"Jagan\", role = \"ctb\"))", + "Description": "Solve optimization problems using an R interface to NLopt. NLopt is a free/open-source library for nonlinear optimization, providing a common interface for a number of different free optimization routines available online as well as original implementations of various other algorithms. See for more information on the available algorithms. Building from included sources requires 'CMake'. On Linux and 'macOS', if a suitable system build of NLopt (2.7.0 or later) is found, it is used; otherwise, it is built from included sources via 'CMake'. On Windows, NLopt is obtained through 'rwinlib' for 'R <= 4.1.x' or grabbed from the appropriate toolchain for 'R >= 4.2.0'.", + "License": "LGPL (>= 3)", + "SystemRequirements": "cmake (>= 3.2.0) which is used only on Linux or macOS systems when no system build of nlopt (>= 2.7.0) can be found.", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Suggests": [ + "knitr", + "rmarkdown", + "covr", + "tinytest" + ], + "VignetteBuilder": "knitr", + "URL": "https://github.com/astamm/nloptr, https://astamm.github.io/nloptr/", + "BugReports": "https://github.com/astamm/nloptr/issues", + "NeedsCompilation": "yes", + "UseLTO": "yes", + "Author": "Jelmer Ypma [aut], Steven G. Johnson [aut] (author of the NLopt C library), Aymeric Stamm [ctb, cre] (), Hans W. Borchers [ctb], Dirk Eddelbuettel [ctb], Brian Ripley [ctb] (build process on multiple OS), Kurt Hornik [ctb] (build process on multiple OS), Julien Chiquet [ctb], Avraham Adler [ctb] (), Xiongtao Dai [ctb], Jeroen Ooms [ctb], Tomas Kalibera [ctb], Mikael Jagan [ctb]", + "Maintainer": "Aymeric Stamm ", + "Repository": "CRAN" + }, + "nnet": { + "Package": "nnet", + "Version": "7.3-20", + "Source": "Repository", + "Priority": "recommended", + "Date": "2025-01-01", + "Depends": [ + "R (>= 3.0.0)", + "stats", + "utils" + ], + "Suggests": [ + "MASS" + ], + "Authors@R": "c(person(\"Brian\", \"Ripley\", role = c(\"aut\", \"cre\", \"cph\"), email = \"Brian.Ripley@R-project.org\"), person(\"William\", \"Venables\", role = \"cph\"))", + "Description": "Software for feed-forward neural networks with a single hidden layer, and for multinomial log-linear models.", + "Title": "Feed-Forward Neural Networks and Multinomial Log-Linear Models", + "ByteCompile": "yes", + "License": "GPL-2 | GPL-3", + "URL": "http://www.stats.ox.ac.uk/pub/MASS4/", + "NeedsCompilation": "yes", + "Author": "Brian Ripley [aut, cre, cph], William Venables [cph]", + "Maintainer": "Brian Ripley ", + "Repository": "CRAN" + }, + "numDeriv": { + "Package": "numDeriv", + "Version": "2016.8-1.1", + "Source": "Repository", + "Title": "Accurate Numerical Derivatives", + "Description": "Methods for calculating (usually) accurate numerical first and second order derivatives. Accurate calculations are done using 'Richardson''s' extrapolation or, when applicable, a complex step derivative is available. A simple difference method is also provided. Simple difference is (usually) less accurate but is much quicker than 'Richardson''s' extrapolation and provides a useful cross-check. Methods are provided for real scalar and vector valued functions.", + "Depends": [ + "R (>= 2.11.1)" + ], + "LazyLoad": "yes", + "ByteCompile": "yes", + "License": "GPL-2", + "Copyright": "2006-2011, Bank of Canada. 2012-2016, Paul Gilbert", + "Author": "Paul Gilbert and Ravi Varadhan", + "Maintainer": "Paul Gilbert ", + "URL": "http://optimizer.r-forge.r-project.org/", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "openssl": { + "Package": "openssl", + "Version": "2.3.5", + "Source": "Repository", + "Type": "Package", + "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", + "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", + "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", + "License": "MIT + file LICENSE", + "URL": "https://jeroen.r-universe.dev/openssl", + "BugReports": "https://github.com/jeroen/openssl/issues", + "SystemRequirements": "OpenSSL >= 1.0.2", + "VignetteBuilder": "knitr", + "Imports": [ + "askpass" + ], + "Suggests": [ + "curl", + "testthat (>= 2.1.0)", + "digest", + "knitr", + "rmarkdown", + "jsonlite", + "jose", + "sodium" + ], + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", + "Maintainer": "Jeroen Ooms ", + "Repository": "CRAN" + }, + "otel": { + "Package": "otel", + "Version": "0.2.0", + "Source": "Repository", + "Title": "OpenTelemetry R API", + "Authors@R": "person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\"))", + "Description": "High-quality, ubiquitous, and portable telemetry to enable effective observability. OpenTelemetry is a collection of tools, APIs, and SDKs used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis in order to understand your software's performance and behavior. This package implements the OpenTelemetry API: . Use this package as a dependency if you want to instrument your R package for OpenTelemetry.", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "Depends": [ + "R (>= 3.6.0)" + ], + "Suggests": [ + "callr", + "cli", + "glue", + "jsonlite", + "otelsdk", + "processx", + "shiny", + "spelling", + "testthat (>= 3.0.0)", + "utils", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "URL": "https://otel.r-lib.org, https://github.com/r-lib/otel", + "Additional_repositories": "https://github.com/r-lib/otelsdk/releases/download/devel", + "BugReports": "https://github.com/r-lib/otel/issues", + "NeedsCompilation": "no", + "Author": "Gábor Csárdi [aut, cre]", + "Maintainer": "Gábor Csárdi ", + "Repository": "CRAN" + }, + "pbkrtest": { + "Package": "pbkrtest", + "Version": "0.5.5", + "Source": "Repository", + "Title": "Parametric Bootstrap, Kenward-Roger and Satterthwaite Based Methods for Test in Mixed Models", + "Authors@R": "c( person(given = \"Ulrich\", family = \"Halekoh\", email = \"uhalekoh@health.sdu.dk\", role = c(\"aut\", \"cph\")), person(given = \"Søren\", family = \"Højsgaard\", email = \"sorenh@math.aau.dk\", role = c(\"aut\", \"cre\", \"cph\")) )", + "Maintainer": "Søren Højsgaard ", + "Description": "Computes p-values based on (a) Satterthwaite or Kenward-Rogers degree of freedom methods and (b) parametric bootstrap for mixed effects models as implemented in the 'lme4' package. Implements parametric bootstrap test for generalized linear mixed models as implemented in 'lme4' and generalized linear models. The package is documented in the paper by Halekoh and Højsgaard, (2012, ). Please see 'citation(\"pbkrtest\")' for citation details.", + "URL": "https://people.math.aau.dk/~sorenh/software/pbkrtest/", + "Depends": [ + "R (>= 4.2.0)", + "lme4 (>= 1.1.31)" + ], + "Imports": [ + "broom", + "dplyr", + "MASS", + "methods", + "numDeriv", + "Matrix (>= 1.2.3)", + "doBy (>= 4.6.22)" + ], + "Suggests": [ + "nlme", + "markdown", + "knitr" + ], + "Encoding": "UTF-8", + "VignetteBuilder": "knitr", + "License": "GPL (>= 2)", + "ByteCompile": "Yes", + "RoxygenNote": "7.3.2", + "LazyData": "true", + "NeedsCompilation": "no", + "Author": "Ulrich Halekoh [aut, cph], Søren Højsgaard [aut, cre, cph]", + "Repository": "CRAN" + }, + "pillar": { + "Package": "pillar", + "Version": "1.11.1", + "Source": "Repository", + "Title": "Coloured Formatting for Columns", + "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", + "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", + "License": "MIT + file LICENSE", + "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", + "BugReports": "https://github.com/r-lib/pillar/issues", + "Imports": [ + "cli (>= 2.3.0)", + "glue", + "lifecycle", + "rlang (>= 1.0.2)", + "utf8 (>= 1.1.0)", + "utils", + "vctrs (>= 0.5.0)" + ], + "Suggests": [ + "bit64", + "DBI", + "debugme", + "DiagrammeR", + "dplyr", + "formattable", + "ggplot2", + "knitr", + "lubridate", + "nanotime", + "nycflights13", + "palmerpenguins", + "rmarkdown", + "scales", + "stringi", + "survival", + "testthat (>= 3.1.1)", + "tibble", + "units (>= 0.7.2)", + "vdiffr", + "withr" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", + "Config/Needs/website": "tidyverse/tidytemplate", + "NeedsCompilation": "no", + "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "pkgconfig": { + "Package": "pkgconfig", + "Version": "2.0.3", + "Source": "Repository", + "Title": "Private Configuration for 'R' Packages", + "Author": "Gábor Csárdi", + "Maintainer": "Gábor Csárdi ", + "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", + "License": "MIT + file LICENSE", + "LazyData": "true", + "Imports": [ + "utils" + ], + "Suggests": [ + "covr", + "testthat", + "disposables (>= 1.0.3)" + ], + "URL": "https://github.com/r-lib/pkgconfig#readme", + "BugReports": "https://github.com/r-lib/pkgconfig/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Repository": "CRAN" + }, + "plotly": { + "Package": "plotly", + "Version": "4.12.0", + "Source": "Repository", + "Title": "Create Interactive Web Graphics via 'plotly.js'", + "Authors@R": "c(person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"cpsievert1@gmail.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Chris\", \"Parmer\", role = \"aut\", email = \"chris@plot.ly\"), person(\"Toby\", \"Hocking\", role = \"aut\", email = \"tdhock5@gmail.com\"), person(\"Scott\", \"Chamberlain\", role = \"aut\", email = \"myrmecocystus@gmail.com\"), person(\"Karthik\", \"Ram\", role = \"aut\", email = \"karthik.ram@gmail.com\"), person(\"Marianne\", \"Corvellec\", role = \"aut\", email = \"marianne.corvellec@igdore.org\", comment = c(ORCID = \"0000-0002-1994-3581\")), person(\"Pedro\", \"Despouy\", role = \"aut\", email = \"pedro@plot.ly\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Plotly Technologies Inc.\", role = \"cph\"))", + "License": "MIT + file LICENSE", + "Description": "Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.", + "URL": "https://plotly-r.com, https://github.com/plotly/plotly.R, https://plotly.com/r/", + "BugReports": "https://github.com/plotly/plotly.R/issues", + "Depends": [ + "R (>= 3.5.0)", + "ggplot2 (>= 3.0.0)" + ], + "Imports": [ + "tools", + "scales", + "httr (>= 1.3.0)", + "jsonlite (>= 1.6)", + "magrittr", + "digest", + "viridisLite", + "base64enc", + "htmltools (>= 0.3.6)", + "htmlwidgets (>= 1.5.2.9001)", + "tidyr (>= 1.0.0)", + "RColorBrewer", + "dplyr", + "vctrs", + "tibble", + "lazyeval (>= 0.2.0)", + "rlang (>= 1.0.0)", + "crosstalk", + "purrr", + "data.table", + "promises" + ], + "Suggests": [ + "MASS", + "maps", + "hexbin", + "ggthemes", + "GGally", + "ggalluvial", + "testthat", + "knitr", + "shiny (>= 1.1.0)", + "shinytest2", + "curl", + "rmarkdown", + "Cairo", + "broom", + "webshot", + "listviewer", + "dendextend", + "sf", + "png", + "IRdisplay", + "processx", + "plotlyGeoAssets", + "forcats", + "withr", + "palmerpenguins", + "rversions", + "reticulate", + "rsvg", + "ggridges" + ], + "LazyData": "true", + "RoxygenNote": "7.3.3", + "Encoding": "UTF-8", + "Config/Needs/check": "tidyverse/ggplot2, ggobi/GGally, rcmdcheck, devtools, reshape2, s2", + "NeedsCompilation": "no", + "Author": "Carson Sievert [aut, cre] (ORCID: ), Chris Parmer [aut], Toby Hocking [aut], Scott Chamberlain [aut], Karthik Ram [aut], Marianne Corvellec [aut] (ORCID: ), Pedro Despouy [aut], Salim Brüggemann [ctb] (ORCID: ), Plotly Technologies Inc. [cph]", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "plotrix": { + "Package": "plotrix", + "Version": "3.8-14", + "Source": "Repository", + "Title": "Various Plotting Functions", + "Authors@R": "c( person(\"Jim\", \"Lemon\", role = \"aut\"), person(\"Ben\", \"Bolker\", role = \"ctb\"), person(\"Sander\", \"Oom\", role = \"ctb\"), person(\"Eduardo\", \"Klein\", role = \"ctb\"), person(\"Barry\", \"Rowlingson\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Anupam\", \"Tyagi\", role = \"ctb\"), person(\"Olivier\", \"Eterradossi\", role = \"ctb\"), person(\"Gabor\", \"Grothendieck\", role = \"ctb\"), person(\"Michael\", \"Toews\", role = \"ctb\"), person(\"John\", \"Kane\", role = \"ctb\"), person(\"Rolf\", \"Turner\", role = \"ctb\"), person(\"Carl\", \"Witthoft\", role = \"ctb\"), person(\"Julian\", \"Stander\", role = \"ctb\"), person(\"Thomas\", \"Petzoldt\", role = \"ctb\"), person(\"Remko\", \"Duursma\", role = \"ctb\"), person(\"Elisa\", \"Biancotto\", role = \"ctb\"), person(\"Ofir\", \"Levy\", role = \"ctb\"), person(\"Christophe\", \"Dutang\", role = \"ctb\"), person(\"Peter\", \"Solymos\", role = \"ctb\"), person(\"Robby\", \"Engelmann\", role = \"ctb\"), person(\"Michael\", \"Hecker\", role = \"ctb\"), person(\"Felix\", \"Steinbeck\", role = \"ctb\"), person(\"Hans\", \"Borchers\", role = \"ctb\"), person(\"Henrik\", \"Singmann\", role = \"ctb\"), person(\"Ted\", \"Toal\", role = \"ctb\"), person(\"Derek\", \"Ogle\", role = \"ctb\"), person(\"Darshan\", \"Baral\", role = \"ctb\"), person(\"Ulrike\", \"Groemping\", role = \"ctb\"), person(\"Bill\", \"Venables\", role = \"ctb\"), person(family = \"The CRAN Team\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", email = \"murdoch.duncan@gmail.com\", role = c(\"ctb\", \"cre\")))", + "Imports": [ + "grDevices", + "graphics", + "stats", + "utils" + ], + "Description": "Lots of plots, various labeling, axis and color scaling functions. The author/maintainer died in September 2023.", + "License": "GPL (>= 2)", + "NeedsCompilation": "no", + "Depends": [ + "R (>= 3.5.0)" + ], + "Repository": "CRAN", + "URL": "https://plotrix.github.io/plotrix/, https://github.com/plotrix/plotrix", + "BugReports": "https://github.com/plotrix/plotrix/issues", + "Author": "Jim Lemon [aut], Ben Bolker [ctb], Sander Oom [ctb], Eduardo Klein [ctb], Barry Rowlingson [ctb], Hadley Wickham [ctb], Anupam Tyagi [ctb], Olivier Eterradossi [ctb], Gabor Grothendieck [ctb], Michael Toews [ctb], John Kane [ctb], Rolf Turner [ctb], Carl Witthoft [ctb], Julian Stander [ctb], Thomas Petzoldt [ctb], Remko Duursma [ctb], Elisa Biancotto [ctb], Ofir Levy [ctb], Christophe Dutang [ctb], Peter Solymos [ctb], Robby Engelmann [ctb], Michael Hecker [ctb], Felix Steinbeck [ctb], Hans Borchers [ctb], Henrik Singmann [ctb], Ted Toal [ctb], Derek Ogle [ctb], Darshan Baral [ctb], Ulrike Groemping [ctb], Bill Venables [ctb], The CRAN Team [ctb], Duncan Murdoch [ctb, cre]", + "Maintainer": "Duncan Murdoch " + }, + "pracma": { + "Package": "pracma", + "Version": "2.4.6", + "Source": "Repository", + "Type": "Package", + "Date": "2025-10-20", + "Title": "Practical Numerical Math Functions", + "Authors@R": "person(\"Hans W.\", \"Borchers\", email=\"hwborchers@googlemail.com\", role=c(\"aut\", \"cre\"))", + "Depends": [ + "R (>= 3.1.0)" + ], + "Imports": [ + "graphics", + "grDevices", + "stats", + "utils" + ], + "Suggests": [ + "NlcOptim", + "quadprog" + ], + "Description": "Provides a large number of functions from numerical analysis and linear algebra, numerical optimization, differential equations, time series, plus some well-known special mathematical functions. Uses 'MATLAB' function names where appropriate to simplify porting.", + "License": "GPL (>= 3)", + "ByteCompile": "true", + "LazyData": "yes", + "NeedsCompilation": "no", + "Author": "Hans W. Borchers [aut, cre]", + "Maintainer": "Hans W. Borchers ", + "Repository": "CRAN" + }, + "promises": { + "Package": "promises", + "Version": "1.5.0", + "Source": "Repository", + "Type": "Package", + "Title": "Abstractions for Promise-Based Asynchronous Programming", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Charlie\", \"Gao\", , \"charlie.gao@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", + "BugReports": "https://github.com/rstudio/promises/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "fastmap (>= 1.1.0)", + "later", + "lifecycle", + "magrittr (>= 1.5)", + "otel (>= 0.2.0)", + "R6", + "rlang" + ], + "Suggests": [ + "future (>= 1.21.0)", + "knitr", + "mirai", + "otelsdk (>= 0.2.0)", + "purrr", + "Rcpp", + "rmarkdown", + "spelling", + "testthat (>= 3.0.0)", + "vembedr" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "rsconnect, tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-27", + "Encoding": "UTF-8", + "Language": "en-US", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Joe Cheng [aut], Barret Schloerke [aut, cre] (ORCID: ), Winston Chang [aut] (ORCID: ), Charlie Gao [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Barret Schloerke ", + "Repository": "CRAN" + }, + "purrr": { + "Package": "purrr", + "Version": "1.2.1", + "Source": "Repository", + "Title": "Functional Programming Tools", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", + "Description": "A complete and consistent functional programming toolkit for R.", + "License": "MIT + file LICENSE", + "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", + "BugReports": "https://github.com/tidyverse/purrr/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli (>= 3.6.1)", + "lifecycle (>= 1.0.3)", + "magrittr (>= 1.5.0)", + "rlang (>= 1.1.1)", + "vctrs (>= 0.6.3)" + ], + "Suggests": [ + "carrier (>= 0.3.0)", + "covr", + "dplyr (>= 0.7.8)", + "httr", + "knitr", + "lubridate", + "mirai (>= 2.5.1)", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble", + "tidyselect" + ], + "LinkingTo": [ + "cli" + ], + "VignetteBuilder": "knitr", + "Biarch": "true", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate, tidyr", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "TRUE", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "quantreg": { + "Package": "quantreg", + "Version": "6.1", + "Source": "Repository", + "Title": "Quantile Regression", + "Description": "Estimation and inference methods for models for conditional quantile functions: Linear and nonlinear parametric and non-parametric (total variation penalized) models for conditional quantiles of a univariate response and several methods for handling censored survival data. Portfolio selection methods based on expected shortfall risk are also now included. See Koenker, R. (2005) Quantile Regression, Cambridge U. Press, and Koenker, R. et al. (2017) Handbook of Quantile Regression, CRC Press, .", + "Authors@R": "c( person(\"Roger\", \"Koenker\", role = c(\"cre\",\"aut\"), email = \"rkoenker@illinois.edu\"), person(\"Stephen\", \"Portnoy\", role = c(\"ctb\"), comment = \"Contributions to Censored QR code\", email = \"sportnoy@illinois.edu\"), person(c(\"Pin\", \"Tian\"), \"Ng\", role = c(\"ctb\"), comment = \"Contributions to Sparse QR code\", email = \"pin.ng@nau.edu\"), person(\"Blaise\", \"Melly\", role = c(\"ctb\"), comment = \"Contributions to preprocessing code\", email = \"mellyblaise@gmail.com\"), person(\"Achim\", \"Zeileis\", role = c(\"ctb\"), comment = \"Contributions to dynrq code essentially identical to his dynlm code\", email = \"Achim.Zeileis@uibk.ac.at\"), person(\"Philip\", \"Grosjean\", role = c(\"ctb\"), comment = \"Contributions to nlrq code\", email = \"phgrosjean@sciviews.org\"), person(\"Cleve\", \"Moler\", role = c(\"ctb\"), comment = \"author of several linpack routines\"), person(\"Yousef\", \"Saad\", role = c(\"ctb\"), comment = \"author of sparskit2\"), person(\"Victor\", \"Chernozhukov\", role = c(\"ctb\"), comment = \"contributions to extreme value inference code\"), person(\"Ivan\", \"Fernandez-Val\", role = c(\"ctb\"), comment = \"contributions to extreme value inference code\"), person(\"Martin\", \"Maechler\", role = \"ctb\", comment = c(\"tweaks (src/chlfct.f, 'tiny','Large')\", ORCID = \"0000-0002-8685-9910\")), person(c(\"Brian\", \"D\"), \"Ripley\", role = c(\"trl\",\"ctb\"), comment = \"Initial (2001) R port from S (to my everlasting shame -- how could I have been so slow to adopt R!) and for numerous other suggestions and useful advice\", email = \"ripley@stats.ox.ac.uk\"))", + "Maintainer": "Roger Koenker ", + "Repository": "CRAN", + "Depends": [ + "R (>= 3.5)", + "stats", + "SparseM" + ], + "Imports": [ + "methods", + "graphics", + "Matrix", + "MatrixModels", + "survival", + "MASS" + ], + "Suggests": [ + "interp", + "rgl", + "logspline", + "nor1mix", + "Formula", + "zoo", + "R.rsp", + "conquer" + ], + "License": "GPL (>= 2)", + "URL": "https://www.r-project.org", + "NeedsCompilation": "yes", + "VignetteBuilder": "R.rsp", + "Author": "Roger Koenker [cre, aut], Stephen Portnoy [ctb] (Contributions to Censored QR code), Pin Tian Ng [ctb] (Contributions to Sparse QR code), Blaise Melly [ctb] (Contributions to preprocessing code), Achim Zeileis [ctb] (Contributions to dynrq code essentially identical to his dynlm code), Philip Grosjean [ctb] (Contributions to nlrq code), Cleve Moler [ctb] (author of several linpack routines), Yousef Saad [ctb] (author of sparskit2), Victor Chernozhukov [ctb] (contributions to extreme value inference code), Ivan Fernandez-Val [ctb] (contributions to extreme value inference code), Martin Maechler [ctb] (tweaks (src/chlfct.f, 'tiny','Large'), ), Brian D Ripley [trl, ctb] (Initial (2001) R port from S (to my everlasting shame -- how could I have been so slow to adopt R!) and for numerous other suggestions and useful advice)" + }, + "rappdirs": { + "Package": "rappdirs", + "Version": "0.3.4", + "Source": "Repository", + "Type": "Package", + "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"trl\", \"cre\", \"cph\")), person(\"Sridhar\", \"Ratnakumar\", role = \"aut\"), person(\"Trent\", \"Mick\", role = \"aut\"), person(\"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(\"Eddy\", \"Petrisor\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = c(\"trl\", \"aut\"), comment = c(ORCID = \"0000-0001-6341-4639\")), person(\"Gabor\", \"Csardi\", role = \"ctb\"), person(\"Gregory\", \"Jefferis\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", + "License": "MIT + file LICENSE", + "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", + "BugReports": "https://github.com/r-lib/rappdirs/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Suggests": [ + "covr", + "roxygen2", + "testthat (>= 3.2.0)", + "withr" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-05-05", + "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, Posit, PBC. See file LICENSE for details.", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [trl, cre, cph], Sridhar Ratnakumar [aut], Trent Mick [aut], ActiveState [cph] (R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs), Eddy Petrisor [ctb], Trevor Davis [trl, aut] (ORCID: ), Gabor Csardi [ctb], Gregory Jefferis [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "rbibutils": { + "Package": "rbibutils", + "Version": "2.4.1", + "Source": "Repository", + "Type": "Package", + "Title": "Read 'Bibtex' Files and Convert Between Bibliography Formats", + "Authors@R": "c( person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"aut\", \"cre\"), \t email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\", \"R port, R code, new C code and modifications to bibutils' C code, conversion to Bibentry (R and C code)\") ), person(given = \"Chris\", family = \"Putman\", role = \"aut\", comment = \"src/*, author of the bibutils libraries, https://sourceforge.net/projects/bibutils/\"), person(given = \"Richard\", family = \"Mathar\", role = \"ctb\", comment = \"src/addsout.c\"), person(given = \"Johannes\", family = \"Wilm\", role = \"ctb\", comment = \"src/biblatexin.c, src/bltypes.c\"), person(\"R Core Team\", role = \"ctb\", comment = \"base R's bibentry and bibstyle implementation\") )", + "Description": "Read and write 'Bibtex' files. Convert between bibliography formats, including 'Bibtex', 'Biblatex', 'PubMed', 'Endnote', and 'Bibentry'. Includes a port of the 'bibutils' utilities by Chris Putnam . Supports all bibliography formats and character encodings implemented in 'bibutils'.", + "License": "GPL-2", + "URL": "https://geobosh.github.io/rbibutils/ (doc), https://CRAN.R-project.org/package=rbibutils", + "BugReports": "https://github.com/GeoBosh/rbibutils/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Imports": [ + "utils", + "tools" + ], + "Suggests": [ + "testthat" + ], + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Config/Needs/memcheck": "devtools, rcmdcheck", + "Author": "Georgi N. Boshnakov [aut, cre] (ORCID: , R port, R code, new C code and modifications to bibutils' C code, conversion to Bibentry (R and C code)), Chris Putman [aut] (src/*, author of the bibutils libraries, https://sourceforge.net/projects/bibutils/), Richard Mathar [ctb] (src/addsout.c), Johannes Wilm [ctb] (src/biblatexin.c, src/bltypes.c), R Core Team [ctb] (base R's bibentry and bibstyle implementation)", + "Maintainer": "Georgi N. Boshnakov ", + "Repository": "CRAN" + }, + "reformulas": { + "Package": "reformulas", + "Version": "0.4.4", + "Source": "Repository", + "Title": "Machinery for Processing Random Effect Formulas", + "Authors@R": "c( person(given = \"Ben\", family = \"Bolker\", role = c(\"aut\", \"cre\"), email = \"bolker@mcmaster.ca\", comment=c(ORCID=\"0000-0002-2127-0443\")), person(\"Anna\", \"Ly\", role = \"ctb\", comment = c(ORCID = \"0000-0002-0210-0342\")) )", + "Description": "Takes formulas including random-effects components (formatted as in 'lme4', 'glmmTMB', etc.) and processes them. Includes various helper functions.", + "URL": "https://github.com/bbolker/reformulas", + "License": "GPL-3", + "Encoding": "UTF-8", + "Imports": [ + "stats", + "methods", + "Matrix", + "Rdpack" + ], + "RdMacros": "Rdpack", + "Suggests": [ + "lme4", + "tinytest", + "glmmTMB", + "Formula" + ], + "RoxygenNote": "7.3.3", + "Config/testthat/edition": "3", + "NeedsCompilation": "no", + "Author": "Ben Bolker [aut, cre] (ORCID: ), Anna Ly [ctb] (ORCID: )", + "Maintainer": "Ben Bolker ", + "Repository": "CRAN" + }, + "renv": { "Package": "renv", "Version": "1.2.0", "Source": "Repository", @@ -263,14 +3407,524 @@ ], "Encoding": "UTF-8", "NeedsCompilation": "yes", - "RoxygenNote": "7.3.3", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", + "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", + "Maintainer": "Kevin Ushey ", + "Repository": "CRAN" + }, + "rlang": { + "Package": "rlang", + "Version": "1.1.7", + "Source": "Repository", + "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", + "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", + "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", + "License": "MIT + file LICENSE", + "ByteCompile": "true", + "Biarch": "true", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "utils" + ], + "Suggests": [ + "cli (>= 3.1.0)", + "covr", + "crayon", + "desc", + "fs", + "glue", + "knitr", + "magrittr", + "methods", + "pillar", + "pkgload", + "rmarkdown", + "stats", + "testthat (>= 3.2.0)", + "tibble", + "usethis", + "vctrs (>= 0.2.3)", + "withr" + ], + "Enhances": [ + "winch" + ], + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", + "BugReports": "https://github.com/r-lib/rlang/issues", + "Config/build/compilation-database": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "dplyr, tidyverse/tidytemplate", + "NeedsCompilation": "yes", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "rmarkdown": { + "Package": "rmarkdown", + "Version": "2.31", + "Source": "Repository", + "Type": "Package", + "Title": "Dynamic Documents for R", + "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", + "Description": "Convert R Markdown documents into a variety of formats.", + "License": "GPL-3", + "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", + "BugReports": "https://github.com/rstudio/rmarkdown/issues", + "Depends": [ + "R (>= 3.0)" + ], + "Imports": [ + "bslib (>= 0.2.5.1)", + "evaluate (>= 0.13)", + "fontawesome (>= 0.5.0)", + "htmltools (>= 0.5.1)", + "jquerylib", + "jsonlite", + "knitr (>= 1.43)", + "methods", + "tinytex (>= 0.31)", + "tools", + "utils", + "xfun (>= 0.36)", + "yaml (>= 2.1.19)" + ], + "Suggests": [ + "digest", + "dygraphs", + "fs", + "rsconnect", + "downlit (>= 0.4.0)", + "katex (>= 1.4.0)", + "sass (>= 0.4.0)", + "shiny (>= 1.6.0)", + "testthat (>= 3.0.3)", + "tibble", + "vctrs", + "cleanrmd", + "withr (>= 2.4.2)", + "xml2" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "rstudio/quillt, pkgdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", + "NeedsCompilation": "no", + "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (ORCID: ), Christophe Dervieux [aut] (ORCID: ), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (ORCID: ), Andrew Dunning [ctb] (ORCID: ), Atsushi Yasumoto [ctb, cph] (ORCID: , cph: Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Frederik Aust [ctb] (ORCID: ), Jeff Allen [ctb], JooYoung Seo [ctb] (ORCID: ), Malcolm Barrett [ctb], Rob Hyndman [ctb], Romain Lesur [ctb], Roy Storey [ctb], Ruben Arslan [ctb], Sergio Oller [ctb], Posit Software, PBC [cph, fnd], jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Alexander Farkas [ctb, cph] (html5shiv library), Scott Jehl [ctb, cph] (Respond.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), Greg Franko [ctb, cph] (tocify library), John MacFarlane [ctb, cph] (Pandoc templates), Google, Inc. [ctb, cph] (ioslides library), Dave Raggett [ctb] (slidy library), W3C [cph] (slidy library), Dave Gandy [ctb, cph] (Font-Awesome), Ben Sperry [ctb] (Ionicons), Drifty [cph] (Ionicons), Aidan Lister [ctb, cph] (jQuery StickyTabs), Benct Philip Jonsson [ctb, cph] (pagebreak Lua filter), Albert Krewinkel [ctb, cph] (pagebreak Lua filter)", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.18.0", + "Source": "Repository", + "Title": "Safely Access the RStudio API", + "Description": "Access the RStudio API (if available) and provide informative error messages when it's not.", + "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\"), person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@posit.co\"), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@posit.co\"), person(\"Gary\", \"Ritchie\", role = c(\"aut\"), email = \"gary@posit.co\"), person(family = \"RStudio\", role = \"cph\") )", + "Maintainer": "Kevin Ushey ", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/rstudioapi/, https://github.com/rstudio/rstudioapi", + "BugReports": "https://github.com/rstudio/rstudioapi/issues", + "RoxygenNote": "7.3.3", + "Suggests": [ + "testthat", + "knitr", + "rmarkdown", + "clipr", + "covr", + "curl", + "jsonlite", + "withr" + ], + "VignetteBuilder": "knitr", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Kevin Ushey [aut, cre], JJ Allaire [aut], Hadley Wickham [aut], Gary Ritchie [aut], RStudio [cph]", + "Repository": "CRAN" + }, + "sandwich": { + "Package": "sandwich", + "Version": "3.1-1", + "Source": "Repository", + "Date": "2024-09-16", + "Title": "Robust Covariance Matrix Estimators", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Thomas\", family = \"Lumley\", role = \"aut\", email = \"t.lumley@auckland.ac.nz\", comment = c(ORCID = \"0000-0003-4255-5437\")), person(given = \"Nathaniel\", family = \"Graham\", role = \"ctb\", email = \"npgraham1@gmail.com\", comment = c(ORCID = \"0009-0002-1215-5256\")), person(given = \"Susanne\", family = \"Koell\", role = \"ctb\"))", + "Description": "Object-oriented software for model-robust covariance matrix estimators. Starting out from the basic robust Eicker-Huber-White sandwich covariance methods include: heteroscedasticity-consistent (HC) covariances for cross-section data; heteroscedasticity- and autocorrelation-consistent (HAC) covariances for time series data (such as Andrews' kernel HAC, Newey-West, and WEAVE estimators); clustered covariances (one-way and multi-way); panel and panel-corrected covariances; outer-product-of-gradients covariances; and (clustered) bootstrap covariances. All methods are applicable to (generalized) linear model objects fitted by lm() and glm() but can also be adapted to other classes through S3 methods. Details can be found in Zeileis et al. (2020) , Zeileis (2004) and Zeileis (2006) .", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "stats", + "utils", + "zoo" + ], + "Suggests": [ + "AER", + "car", + "geepack", + "lattice", + "lme4", + "lmtest", + "MASS", + "multiwayvcov", + "parallel", + "pcse", + "plm", + "pscl", + "scatterplot3d", + "stats4", + "strucchange", + "survival" + ], + "License": "GPL-2 | GPL-3", + "URL": "https://sandwich.R-Forge.R-project.org/", + "BugReports": "https://sandwich.R-Forge.R-project.org/contact.html", + "NeedsCompilation": "no", + "Author": "Achim Zeileis [aut, cre] (), Thomas Lumley [aut] (), Nathaniel Graham [ctb] (), Susanne Koell [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" + }, + "sass": { + "Package": "sass", + "Version": "0.4.10", + "Source": "Repository", + "Type": "Package", + "Title": "Syntactically Awesome Style Sheets ('Sass')", + "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", + "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", + "License": "MIT + file LICENSE", + "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", + "BugReports": "https://github.com/rstudio/sass/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "SystemRequirements": "GNU make", + "Imports": [ + "fs (>= 1.2.4)", + "rlang (>= 0.4.10)", + "htmltools (>= 0.5.1)", + "R6", + "rappdirs" + ], + "Suggests": [ + "testthat", + "knitr", + "rmarkdown", + "withr", + "shiny", + "curl" + ], + "VignetteBuilder": "knitr", + "Config/testthat/edition": "3", + "NeedsCompilation": "yes", + "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "scales": { + "Package": "scales", + "Version": "1.4.0", + "Source": "Repository", + "Title": "Scale Functions for Visualization", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", + "License": "MIT + file LICENSE", + "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", + "BugReports": "https://github.com/r-lib/scales/issues", + "Depends": [ + "R (>= 4.1)" + ], + "Imports": [ + "cli", + "farver (>= 2.0.3)", + "glue", + "labeling", + "lifecycle", + "R6", + "RColorBrewer", + "rlang (>= 1.1.0)", + "viridisLite" + ], + "Suggests": [ + "bit64", + "covr", + "dichromat", + "ggplot2", + "hms (>= 0.5.0)", + "stringi", + "testthat (>= 3.0.0)" + ], + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/usethis/last-upkeep": "2025-04-23", + "Encoding": "UTF-8", + "LazyLoad": "yes", + "RoxygenNote": "7.3.2", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", + "Maintainer": "Thomas Lin Pedersen ", + "Repository": "CRAN" + }, + "shiny": { + "Package": "shiny", + "Version": "1.13.0", + "Source": "Repository", + "Type": "Package", + "Title": "Web Application Framework for R", + "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Garrick\", \"Aden-Buie\", , \"garrick@adenbuie.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt\"), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(, \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(, \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", + "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", + "License": "MIT + file LICENSE", + "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", + "BugReports": "https://github.com/rstudio/shiny/issues", + "Depends": [ + "methods", + "R (>= 3.1.2)" + ], + "Imports": [ + "bslib (>= 0.6.0)", + "cachem (>= 1.1.0)", + "cli", + "commonmark (>= 2.0.0)", + "fastmap (>= 1.1.1)", + "fontawesome (>= 0.4.0)", + "glue (>= 1.3.2)", + "grDevices", + "htmltools (>= 0.5.4)", + "httpuv (>= 1.5.2)", + "jsonlite (>= 0.9.16)", + "later (>= 1.0.0)", + "lifecycle (>= 0.2.0)", + "mime (>= 0.3)", + "otel", + "promises (>= 1.5.0)", + "R6 (>= 2.0)", + "rlang (>= 0.4.10)", + "sourcetools", + "tools", + "utils", + "withr", + "xtable" + ], + "Suggests": [ + "Cairo (>= 1.5-5)", + "coro (>= 1.1.0)", + "datasets", + "DT", + "dygraphs", + "future", + "ggplot2", + "knitr (>= 1.6)", + "magrittr", + "markdown", + "mirai", + "otelsdk (>= 0.2.0)", + "ragg", + "reactlog (>= 1.0.0)", + "rmarkdown", + "sass", + "showtext", + "testthat (>= 3.2.1)", + "watcher", + "yaml" + ], + "Config/Needs/check": "shinytest2", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'otel-attr-srcref.R' 'otel-collect.R' 'otel-enable.R' 'otel-error.R' 'otel-label.R' 'otel-reactive-update.R' 'otel-session.R' 'otel-shiny.R' 'otel-with.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'utils-tags.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut] (ORCID: ), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut, cre] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Garrick Aden-Buie [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd] (ROR: ), jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", + "Maintainer": "Carson Sievert ", + "Repository": "CRAN" + }, + "shinycssloaders": { + "Package": "shinycssloaders", + "Version": "1.1.0", + "Source": "Repository", + "Title": "Add Loading Animations to a 'shiny' Output While It's Recalculating", + "Authors@R": "c( person(\"Dean\",\"Attali\",email=\"daattali@gmail.com\",role=c(\"aut\",\"cre\"), comment = c(\"Maintainer/developer of shinycssloaders since 2019\", ORCID=\"0000-0002-5645-3493\")), person(\"Andras\",\"Sali\",email=\"andras.sali@alphacruncher.hu\",role=c(\"aut\"),comment=\"Original creator of shinycssloaders package\"), person(\"Luke\",\"Hass\",role=c(\"ctb\",\"cph\"),comment=\"Author of included CSS loader code\") )", + "Description": "When a 'Shiny' output (such as a plot, table, map, etc.) is recalculating, it remains visible but gets greyed out. Using 'shinycssloaders', you can add a loading animation (\"spinner\") to outputs instead. By wrapping a 'Shiny' output in 'withSpinner()', a spinner will automatically appear while the output is recalculating. You can also manually show and hide the spinner, or add a full-page spinner to cover the entire page. See the demo online at .", + "License": "MIT + file LICENSE", + "URL": "https://github.com/daattali/shinycssloaders, https://daattali.com/shiny/shinycssloaders-demo/", + "BugReports": "https://github.com/daattali/shinycssloaders/issues", + "Depends": [ + "R (>= 3.1)" + ], + "Imports": [ + "digest", + "glue", + "grDevices", + "htmltools (>= 0.3.5)", + "shiny" + ], + "Suggests": [ + "knitr", + "shinydisconnect", + "shinyjs" + ], + "RoxygenNote": "7.2.3", + "Encoding": "UTF-8", + "NeedsCompilation": "no", + "Author": "Dean Attali [aut, cre] (Maintainer/developer of shinycssloaders since 2019, ), Andras Sali [aut] (Original creator of shinycssloaders package), Luke Hass [ctb, cph] (Author of included CSS loader code)", + "Maintainer": "Dean Attali ", + "Repository": "CRAN" + }, + "shinythemes": { + "Package": "shinythemes", + "Version": "1.2.0", + "Source": "Repository", + "Title": "Themes for Shiny", + "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch themes\"), person(\"Lukasz\", \"Dziedzic\", role = c(\"ctb\", \"cph\"), comment = \"Lato font\"), person(\"Nathan\", \"Willis\", role = c(\"ctb\", \"cph\"), comment = \"News Cycle font\"), person(family = \"Google Corporation\", role = c(\"ctb\", \"cph\"), comment = \"Open Sans and Roboto fonts\"), person(\"Matt\", \"McInerney\", role = c(\"ctb\", \"cph\"), comment = \"Raleway font\"), person(family = \"Adobe Systems Incorporated\", role = c(\"ctb\", \"cph\"), comment = \"Source Sans Pro font\"), person(family = \"Canonical Ltd\", role = c(\"ctb\", \"cph\"), comment = \"Ubuntu font\") )", + "Description": "Themes for use with Shiny. Includes several Bootstrap themes from , which are packaged for use with Shiny applications.", + "Depends": [ + "R (>= 3.0.0)" + ], + "Imports": [ + "shiny (>= 0.11)" + ], + "URL": "https://rstudio.github.io/shinythemes/", + "License": "GPL-3 | file LICENSE", + "RoxygenNote": "7.1.1", + "NeedsCompilation": "no", + "Author": "Winston Chang [aut, cre], RStudio [cph], Thomas Park [ctb, cph] (Bootswatch themes), Lukasz Dziedzic [ctb, cph] (Lato font), Nathan Willis [ctb, cph] (News Cycle font), Google Corporation [ctb, cph] (Open Sans and Roboto fonts), Matt McInerney [ctb, cph] (Raleway font), Adobe Systems Incorporated [ctb, cph] (Source Sans Pro font), Canonical Ltd [ctb, cph] (Ubuntu font)", + "Maintainer": "Winston Chang ", + "Repository": "CRAN" + }, + "sourcetools": { + "Package": "sourcetools", + "Version": "0.1.7-2", + "Source": "Repository", + "Type": "Package", + "Title": "Tools for Reading, Tokenizing and Parsing R Code", + "Authors@R": "person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevinushey@gmail.com\")", + "Maintainer": "Kevin Ushey ", + "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", + "License": "MIT + file LICENSE", + "Depends": [ + "R (>= 3.0.2)" + ], + "Suggests": [ + "testthat" + ], + "RoxygenNote": "5.0.1", + "BugReports": "https://github.com/kevinushey/sourcetools/issues", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Kevin Ushey [aut, cre]", + "Repository": "CRAN" + }, + "stringi": { + "Package": "stringi", + "Version": "1.8.7", + "Source": "Repository", + "Date": "2025-03-27", + "Title": "Fast and Portable Character String Processing Facilities", + "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", + "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", + "BugReports": "https://github.com/gagolews/stringi/issues", + "SystemRequirements": "ICU4C (>= 61, optional)", + "Type": "Package", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "tools", + "utils", + "stats" + ], + "Biarch": "TRUE", + "License": "file LICENSE", + "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", + "RoxygenNote": "7.3.2", + "Encoding": "UTF-8", + "NeedsCompilation": "yes", + "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", + "Maintainer": "Marek Gagolewski ", + "License_is_FOSS": "yes", + "Repository": "CRAN" + }, + "stringr": { + "Package": "stringr", + "Version": "1.6.0", + "Source": "Repository", + "Title": "Simple, Consistent Wrappers for Common String Operations", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", + "License": "MIT + file LICENSE", + "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", + "BugReports": "https://github.com/tidyverse/stringr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli", + "glue (>= 1.6.1)", + "lifecycle (>= 1.0.3)", + "magrittr", + "rlang (>= 1.0.0)", + "stringi (>= 1.5.3)", + "vctrs (>= 0.4.0)" + ], + "Suggests": [ + "covr", + "dplyr", + "gt", + "htmltools", + "htmlwidgets", + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble" + ], "VignetteBuilder": "knitr", "Config/Needs/website": "tidyverse/tidytemplate", + "Config/potools/style": "explicit", "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "Author": "Kevin Ushey [aut, cre] (ORCID: ), Hadley Wickham [aut] (ORCID: ), Posit Software, PBC [cph, fnd]", - "Maintainer": "Kevin Ushey ", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "survival": { + "Package": "survival", + "Version": "3.8-6", + "Source": "Repository", + "Title": "Survival Analysis", + "Priority": "recommended", + "Date": "2026-01-09", + "Depends": [ + "R (>= 3.5.0)" + ], + "Imports": [ + "graphics", + "Matrix", + "methods", + "splines", + "stats", + "utils" + ], + "LazyData": "Yes", + "LazyDataCompression": "xz", + "ByteCompile": "Yes", + "Authors@R": "c(person(c(\"Terry\", \"M\"), \"Therneau\", email=\"therneau.terry@mayo.edu\", role=c(\"aut\", \"cre\")), person(\"Thomas\", \"Lumley\", role=c(\"ctb\", \"trl\"), comment=\"original S->R port and R maintainer until 2009\"), person(\"Atkinson\", \"Elizabeth\", role=\"ctb\"), person(\"Crowson\", \"Cynthia\", role=\"ctb\"))", + "Description": "Contains the core survival analysis routines, including definition of Surv objects, Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models, and parametric accelerated failure time models.", + "License": "LGPL (>= 2)", + "URL": "https://github.com/therneau/survival", + "NeedsCompilation": "yes", + "Author": "Terry M Therneau [aut, cre], Thomas Lumley [ctb, trl] (original S->R port and R maintainer until 2009), Atkinson Elizabeth [ctb], Crowson Cynthia [ctb]", + "Maintainer": "Terry M Therneau ", "Repository": "CRAN" }, "sys": { @@ -296,6 +3950,534 @@ "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", "Maintainer": "Jeroen Ooms ", "Repository": "CRAN" + }, + "tibble": { + "Package": "tibble", + "Version": "3.3.1", + "Source": "Repository", + "Title": "Simple Data Frames", + "Authors@R": "c( person(\"Kirill\", \"Müller\", , \"kirill@cynkra.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Romain\", \"Francois\", , \"romain@r-enthusiasts.com\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", + "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", + "License": "MIT + file LICENSE", + "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", + "BugReports": "https://github.com/tidyverse/tibble/issues", + "Depends": [ + "R (>= 3.4.0)" + ], + "Imports": [ + "cli", + "lifecycle (>= 1.0.0)", + "magrittr", + "methods", + "pillar (>= 1.8.1)", + "pkgconfig", + "rlang (>= 1.0.2)", + "utils", + "vctrs (>= 0.5.0)" + ], + "Suggests": [ + "bench", + "bit64", + "blob", + "brio", + "callr", + "DiagrammeR", + "dplyr", + "evaluate", + "formattable", + "ggplot2", + "here", + "hms", + "htmltools", + "knitr", + "lubridate", + "nycflights13", + "pkgload", + "purrr", + "rmarkdown", + "stringi", + "testthat (>= 3.0.2)", + "tidyr", + "withr" + ], + "VignetteBuilder": "knitr", + "Config/autostyle/rmd": "false", + "Config/autostyle/scope": "line_breaks", + "Config/autostyle/strict": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", + "Config/usethis/last-upkeep": "2025-06-07", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3.9000", + "NeedsCompilation": "yes", + "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], Posit Software, PBC [cph, fnd] (ROR: )", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "tidyr": { + "Package": "tidyr", + "Version": "1.3.2", + "Source": "Repository", + "Title": "Tidy Messy Data", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Tools to help to create tidy data, where each column is a variable, each row is an observation, and each cell contains a single value. 'tidyr' contains tools for changing the shape (pivoting) and hierarchy (nesting and 'unnesting') of a dataset, turning deeply nested lists into rectangular data frames ('rectangling'), and extracting values out of string columns. It also includes tools for working with missing values (both implicit and explicit).", + "License": "MIT + file LICENSE", + "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", + "BugReports": "https://github.com/tidyverse/tidyr/issues", + "Depends": [ + "R (>= 4.1.0)" + ], + "Imports": [ + "cli (>= 3.4.1)", + "dplyr (>= 1.1.0)", + "glue", + "lifecycle (>= 1.0.3)", + "magrittr", + "purrr (>= 1.0.1)", + "rlang (>= 1.1.1)", + "stringr (>= 1.5.0)", + "tibble (>= 2.1.1)", + "tidyselect (>= 1.2.1)", + "utils", + "vctrs (>= 0.5.2)" + ], + "Suggests": [ + "covr", + "data.table", + "knitr", + "readr", + "repurrrsive (>= 1.1.0)", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "LinkingTo": [ + "cpp11 (>= 0.4.0)" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "LazyData": "true", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "tidyselect": { + "Package": "tidyselect", + "Version": "1.2.1", + "Source": "Repository", + "Title": "Select from a Set of Strings", + "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", + "License": "MIT + file LICENSE", + "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", + "BugReports": "https://github.com/r-lib/tidyselect/issues", + "Depends": [ + "R (>= 3.4)" + ], + "Imports": [ + "cli (>= 3.3.0)", + "glue (>= 1.3.0)", + "lifecycle (>= 1.0.3)", + "rlang (>= 1.0.4)", + "vctrs (>= 0.5.2)", + "withr" + ], + "Suggests": [ + "covr", + "crayon", + "dplyr", + "knitr", + "magrittr", + "rmarkdown", + "stringr", + "testthat (>= 3.1.1)", + "tibble (>= 2.1.3)" + ], + "VignetteBuilder": "knitr", + "ByteCompile": "true", + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.0.9000", + "NeedsCompilation": "yes", + "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "timeDate": { + "Package": "timeDate", + "Version": "4052.112", + "Source": "Repository", + "Title": "Rmetrics - Chronological and Calendar Objects", + "Authors@R": "c(person(\"Diethelm\", \"Wuertz\", role=\"aut\", comment = \"original code\") , person(\"Tobias\", \"Setz\", role = c(\"aut\"), email = \"tobias.setz@live.com\") , person(\"Yohan\", \"Chalabi\", role = \"aut\") , person(\"Martin\",\"Maechler\", role = \"ctb\", email = \"maechler@stat.math.ethz.ch\", comment = c(ORCID = \"0000-0002-8685-9910\")) , person(given = c(\"Joe\", \"W.\"), family = \"Byers\", role = \"ctb\") , person(given = c(\"Georgi\", \"N.\"), family = \"Boshnakov\", role = c(\"cre\", \"aut\"), email = \"georgi.boshnakov@manchester.ac.uk\", comment = c(ORCID = \"0000-0003-2839-346X\")) )", + "Description": "The 'timeDate' class fulfils the conventions of the ISO 8601 standard as well as of the ANSI C and POSIX standards. Beyond these standards it provides the \"Financial Center\" concept which allows to handle data records collected in different time zones and mix them up to have always the proper time stamps with respect to your personal financial center, or alternatively to the GMT reference time. It can thus also handle time stamps from historical data records from the same time zone, even if the financial centers changed day light saving times at different calendar dates.", + "Depends": [ + "R (>= 3.6.0)", + "methods" + ], + "Imports": [ + "graphics", + "utils", + "stats" + ], + "Suggests": [ + "RUnit" + ], + "License": "GPL (>= 2)", + "Encoding": "UTF-8", + "URL": "https://geobosh.github.io/timeDateDoc/ (doc), https://CRAN.R-project.org/package=timeDate, https://www.rmetrics.org", + "BugReports": "https://r-forge.r-project.org/tracker/?atid=633&group_id=156&func=browse", + "NeedsCompilation": "no", + "Author": "Diethelm Wuertz [aut] (original code), Tobias Setz [aut], Yohan Chalabi [aut], Martin Maechler [ctb] (ORCID: ), Joe W. Byers [ctb], Georgi N. Boshnakov [cre, aut] (ORCID: )", + "Maintainer": "Georgi N. Boshnakov ", + "Repository": "CRAN" + }, + "tinytex": { + "Package": "tinytex", + "Version": "0.59", + "Source": "Repository", + "Type": "Package", + "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", + "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", + "Imports": [ + "xfun (>= 0.48)" + ], + "Suggests": [ + "testit", + "rstudioapi" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/rstudio/tinytex", + "BugReports": "https://github.com/rstudio/tinytex/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Yihui Xie [aut, cre, cph] (ORCID: ), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (ORCID: ), Devon Ryan [ctb] (ORCID: ), Ethan Heinzen [ctb], Fernando Cagua [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "urca": { + "Package": "urca", + "Version": "1.3-4", + "Source": "Repository", + "Date": "2024-05-25", + "Title": "Unit Root and Cointegration Tests for Time Series Data", + "Authors@R": "c(person(\"Bernhard\", \"Pfaff\", email = \"bernhard@pfaffikus.de\", role = c(\"aut\", \"cre\")), person(\"Eric\", \"Zivot\",email = \"ezivot@u.washington.edu\", role = \"ctb\"), person(\"Matthieu\", \"Stigler\", role = \"ctb\"))", + "Depends": [ + "R (>= 2.0.0)", + "methods" + ], + "Imports": [ + "nlme", + "graphics", + "stats" + ], + "LazyLoad": "yes", + "Description": "Unit root and cointegration tests encountered in applied econometric analysis are implemented.", + "License": "GPL (>= 2)", + "NeedsCompilation": "yes", + "Author": "Bernhard Pfaff [aut, cre], Eric Zivot [ctb], Matthieu Stigler [ctb]", + "Maintainer": "Bernhard Pfaff ", + "Repository": "CRAN" + }, + "utf8": { + "Package": "utf8", + "Version": "1.2.6", + "Source": "Repository", + "Title": "Unicode Text Processing", + "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", + "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", + "License": "Apache License (== 2.0) | file LICENSE", + "URL": "https://krlmlr.github.io/utf8/, https://github.com/krlmlr/utf8", + "BugReports": "https://github.com/krlmlr/utf8/issues", + "Depends": [ + "R (>= 2.10)" + ], + "Suggests": [ + "cli", + "covr", + "knitr", + "rlang", + "rmarkdown", + "testthat (>= 3.0.0)", + "withr" + ], + "VignetteBuilder": "knitr, rmarkdown", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2.9000", + "NeedsCompilation": "yes", + "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre] (ORCID: ), Unicode, Inc. [cph, dtc] (Unicode Character Database)", + "Maintainer": "Kirill Müller ", + "Repository": "CRAN" + }, + "vctrs": { + "Package": "vctrs", + "Version": "0.7.2", + "Source": "Repository", + "Title": "Vector Helpers", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", + "License": "MIT + file LICENSE", + "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", + "BugReports": "https://github.com/r-lib/vctrs/issues", + "Depends": [ + "R (>= 4.0.0)" + ], + "Imports": [ + "cli (>= 3.4.0)", + "glue", + "lifecycle (>= 1.0.3)", + "rlang (>= 1.1.7)" + ], + "Suggests": [ + "bit64", + "covr", + "crayon", + "dplyr (>= 0.8.5)", + "generics", + "knitr", + "pillar (>= 1.4.4)", + "pkgdown (>= 2.0.1)", + "rmarkdown", + "testthat (>= 3.0.0)", + "tibble (>= 3.1.3)", + "waldo (>= 0.2.0)", + "withr", + "xml2", + "zeallot" + ], + "VignetteBuilder": "knitr", + "Config/build/compilation-database": "true", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Config/testthat/parallel": "true", + "Encoding": "UTF-8", + "Language": "en-GB", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", + "Maintainer": "Davis Vaughan ", + "Repository": "CRAN" + }, + "viridisLite": { + "Package": "viridisLite", + "Version": "0.4.3", + "Source": "Repository", + "Type": "Package", + "Title": "Colorblind-Friendly Color Maps (Lite Version)", + "Date": "2026-02-03", + "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", + "Maintainer": "Simon Garnier ", + "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", + "License": "MIT + file LICENSE", + "Encoding": "UTF-8", + "Depends": [ + "R (>= 2.10)" + ], + "Suggests": [ + "hexbin (>= 1.27.0)", + "ggplot2 (>= 1.0.1)", + "testthat", + "covr" + ], + "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", + "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", + "RoxygenNote": "7.3.3", + "NeedsCompilation": "no", + "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", + "Repository": "CRAN" + }, + "withr": { + "Package": "withr", + "Version": "3.0.2", + "Source": "Repository", + "Title": "Run Code 'With' Temporarily Modified Global State", + "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", + "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", + "License": "MIT + file LICENSE", + "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", + "BugReports": "https://github.com/r-lib/withr/issues", + "Depends": [ + "R (>= 3.6.0)" + ], + "Imports": [ + "graphics", + "grDevices" + ], + "Suggests": [ + "callr", + "DBI", + "knitr", + "methods", + "rlang", + "rmarkdown (>= 2.12)", + "RSQLite", + "testthat (>= 3.0.0)" + ], + "VignetteBuilder": "knitr", + "Config/Needs/website": "tidyverse/tidytemplate", + "Config/testthat/edition": "3", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.2", + "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", + "NeedsCompilation": "no", + "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", + "Maintainer": "Lionel Henry ", + "Repository": "CRAN" + }, + "xfun": { + "Package": "xfun", + "Version": "0.57", + "Source": "Repository", + "Type": "Package", + "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", + "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", + "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", + "Depends": [ + "R (>= 3.2.0)" + ], + "Imports": [ + "grDevices", + "stats", + "tools" + ], + "Suggests": [ + "testit", + "parallel", + "codetools", + "methods", + "rstudioapi", + "tinytex (>= 0.30)", + "mime", + "litedown (>= 0.6)", + "commonmark", + "knitr (>= 1.50)", + "remotes", + "pak", + "curl", + "xml2", + "jsonlite", + "magick", + "yaml", + "data.table", + "qs2" + ], + "License": "MIT + file LICENSE", + "URL": "https://github.com/yihui/xfun", + "BugReports": "https://github.com/yihui/xfun/issues", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "litedown", + "NeedsCompilation": "yes", + "Author": "Yihui Xie [aut, cre, cph] (ORCID: , URL: https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (ORCID: ), Christophe Dervieux [ctb]", + "Maintainer": "Yihui Xie ", + "Repository": "CRAN" + }, + "xtable": { + "Package": "xtable", + "Version": "1.8-8", + "Source": "Repository", + "Date": "2026-02-20", + "Title": "Export Tables to LaTeX or HTML", + "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", + "Maintainer": "David Scott ", + "Imports": [ + "stats", + "utils", + "methods" + ], + "Suggests": [ + "knitr", + "zoo", + "survival", + "glue", + "tinytex" + ], + "VignetteBuilder": "knitr", + "Description": "Coerce data to LaTeX and HTML tables.", + "URL": "http://xtable.r-forge.r-project.org/", + "Depends": [ + "R (>= 2.10.0)" + ], + "License": "GPL (>= 2)", + "Repository": "CRAN", + "NeedsCompilation": "no", + "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" + }, + "yaml": { + "Package": "yaml", + "Version": "2.3.12", + "Source": "Repository", + "Type": "Package", + "Title": "Methods to Convert R Data to YAML and Back", + "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"cre\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Shawn\", \"Garbett\", , \"shawn.garbett@vumc.org\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4079-5621\")), person(\"Jeremy\", \"Stephens\", role = c(\"aut\", \"ctb\")), person(\"Kirill\", \"Simonov\", role = \"aut\"), person(\"Yihui\", \"Xie\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Zhuoer\", \"Dong\", role = \"ctb\"), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"reikoch\", role = \"ctb\"), person(\"Will\", \"Beasley\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5613-5006\")), person(\"Brendan\", \"O'Connor\", role = \"ctb\"), person(\"Michael\", \"Quinn\", role = \"ctb\"), person(\"Charlie\", \"Gao\", role = \"ctb\"), person(c(\"Gregory\", \"R.\"), \"Warnes\", role = \"ctb\"), person(c(\"Zhian\", \"N.\"), \"Kamvar\", role = \"ctb\") )", + "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", + "License": "BSD_3_clause + file LICENSE", + "URL": "https://yaml.r-lib.org, https://github.com/r-lib/yaml/", + "BugReports": "https://github.com/r-lib/yaml/issues", + "Suggests": [ + "knitr", + "rmarkdown", + "testthat (>= 3.0.0)" + ], + "Config/testthat/edition": "3", + "Config/Needs/website": "tidyverse/tidytemplate", + "Encoding": "UTF-8", + "RoxygenNote": "7.3.3", + "VignetteBuilder": "knitr", + "NeedsCompilation": "yes", + "Author": "Hadley Wickham [cre] (ORCID: ), Shawn Garbett [ctb] (ORCID: ), Jeremy Stephens [aut, ctb], Kirill Simonov [aut], Yihui Xie [ctb] (ORCID: ), Zhuoer Dong [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb] (ORCID: ), Brendan O'Connor [ctb], Michael Quinn [ctb], Charlie Gao [ctb], Gregory R. Warnes [ctb], Zhian N. Kamvar [ctb]", + "Maintainer": "Hadley Wickham ", + "Repository": "CRAN" + }, + "zoo": { + "Package": "zoo", + "Version": "1.8-15", + "Source": "Repository", + "Date": "2025-12-15", + "Title": "S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations)", + "Authors@R": "c(person(given = \"Achim\", family = \"Zeileis\", role = c(\"aut\", \"cre\"), email = \"Achim.Zeileis@R-project.org\", comment = c(ORCID = \"0000-0003-0918-3766\")), person(given = \"Gabor\", family = \"Grothendieck\", role = \"aut\", email = \"ggrothendieck@gmail.com\"), person(given = c(\"Jeffrey\", \"A.\"), family = \"Ryan\", role = \"aut\", email = \"jeff.a.ryan@gmail.com\"), person(given = c(\"Joshua\", \"M.\"), family = \"Ulrich\", role = \"ctb\", email = \"josh.m.ulrich@gmail.com\"), person(given = \"Felix\", family = \"Andrews\", role = \"ctb\", email = \"felix@nfrac.org\"))", + "Description": "An S3 class with methods for totally ordered indexed observations. It is particularly aimed at irregular time series of numeric vectors/matrices and factors. zoo's key design goals are independence of a particular index/date/time class and consistency with ts and base R by providing methods to extend standard generics.", + "Depends": [ + "R (>= 3.1.0)", + "stats" + ], + "Suggests": [ + "AER", + "coda", + "chron", + "ggplot2 (>= 3.5.0)", + "mondate", + "scales", + "stinepack", + "strucchange", + "timeDate", + "timeSeries", + "tinyplot", + "tis", + "tseries", + "xts" + ], + "Imports": [ + "utils", + "graphics", + "grDevices", + "lattice (>= 0.20-27)" + ], + "License": "GPL-2 | GPL-3", + "URL": "https://zoo.R-Forge.R-project.org/", + "NeedsCompilation": "yes", + "Author": "Achim Zeileis [aut, cre] (ORCID: ), Gabor Grothendieck [aut], Jeffrey A. Ryan [aut], Joshua M. Ulrich [ctb], Felix Andrews [ctb]", + "Maintainer": "Achim Zeileis ", + "Repository": "CRAN" } } } From 98bd58472e5c1d6e847315ae596d7c89c647d6f1 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 10:42:17 -0400 Subject: [PATCH 17/36] Simplify get_dataframe.R authentication switching with USE_OAUTH2 flag Replaced comment/uncomment blocks with a single flag (matching app.R pattern): - USE_OAUTH2 <- FALSE (default, JWT authentication) - USE_OAUTH2 <- TRUE (OAuth2 with app credentials) Benefits: - Much simpler switching - just change line 12 - Same UX for both methods (paste full analysis key) - Clear configuration section at top - OAuth2 credentials only loaded when needed - if/else logic instead of commented code blocks Now both get_dataframe.R and app.R use the same simple flag-based switching. --- get_dataframe.R | 193 +++++++++++++++++++++--------------------------- 1 file changed, 84 insertions(+), 109 deletions(-) diff --git a/get_dataframe.R b/get_dataframe.R index 50fd2a4..0d1c9dd 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -7,31 +7,25 @@ library(jsonlite) library(base64enc) ################################################################################ -# AUTHENTICATION: Choose Your Approach +# AUTHENTICATION CONFIGURATION - Set your method here ################################################################################ -# -# This script supports two authentication methods: -# -# 1. ANALYSIS KEY (JWT) - Default, recommended for learning -# ✓ Simple - just one credential -# ✓ User-attributable (actions tied to who generated the key) -# ✗ Expires after 10 minutes -# ✗ Specific to one analysis -# -# 2. BENCHLING APP (OAuth2) - For production/long-running workflows -# ✓ Permanent credentials (no expiration) -# ✓ Works across multiple analyses -# ✗ Requires creating a Benchling App -# ✗ App-attributable (not tied to specific user) -# -# To switch to App credentials: Comment out the JWT section below and -# uncomment the OAuth2 section that follows it. +USE_OAUTH2 <- FALSE # Set to FALSE for JWT (default), TRUE for OAuth2 + +# OAuth2 credentials (only used if USE_OAUTH2 = TRUE) +if (USE_OAUTH2) { + client_id <- Sys.getenv("BENCHLING_CLIENT_ID") + client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") + subdomain_fixed <- Sys.getenv("BENCHLING_TENANT_SUBDOMAIN") + + if (client_id == "" || client_secret == "" || subdomain_fixed == "") { + stop("OAuth2 enabled but credentials missing! Set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_TENANT_SUBDOMAIN in .Renviron") + } +} ################################################################################ ################################################################################ -# Option 1: Analysis Key Authentication (JWT) - CURRENT DEFAULT +# Get Analysis Key ################################################################################ -### START: JWT AUTHENTICATION (Comment out this entire section if using OAuth2) ### # Check if analysis key is in environment (optional) analysis_key <- Sys.getenv("BENCHLING_ANALYSIS_KEY") @@ -43,7 +37,11 @@ if (analysis_key == "") { cat("========================================\n") cat("The analysis key format is: ana_XXXXX:eyJhbGc...\n") cat("You can find this in your Benchling analysis.\n") - cat("Note: JWT tokens expire after 10 minutes.\n\n") + if (USE_OAUTH2) { + cat("Note: Using OAuth2 - only analysis ID portion will be used.\n\n") + } else { + cat("Note: JWT tokens expire after 10 minutes.\n\n") + } # Prompt for analysis key analysis_key <- readline(prompt = "Analysis Key: ") @@ -58,6 +56,10 @@ if (analysis_key == "") { cat("\n✓ Analysis key provided\n\n") } +################################################################################ +# Parse Analysis Key and Authenticate +################################################################################ + cat("Parsing analysis key...\n") tryCatch({ @@ -69,31 +71,65 @@ tryCatch({ } analysis_id <- key_parts[1] - jwt_token <- key_parts[2] - - # Decode JWT to extract subdomain - jwt_parts <- strsplit(jwt_token, ".", fixed = TRUE)[[1]] - payload_json <- rawToChar(base64decode(jwt_parts[2])) - payload <- jsonlite::fromJSON(payload_json) - # Extract subdomain from aud or iss field - subdomain_raw <- payload$aud - if (is.null(subdomain_raw) || subdomain_raw == "") { - subdomain_raw <- payload$iss + if (USE_OAUTH2) { + # OAuth2: Extract subdomain from credentials, generate new token + subdomain <- subdomain_fixed + + cat("✓ Analysis key parsed successfully\n") + cat(" Analysis ID:", analysis_id, "\n") + cat(" Subdomain:", subdomain, "(from credentials)\n\n") + + # Generate OAuth2 bearer token + cat("Authenticating with Benchling App credentials...\n") + token_url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") + token_request <- httr::POST( + url = token_url, + body = paste0("client_id=", client_id, + "&client_secret=", client_secret, + "&grant_type=client_credentials"), + httr::accept('application/json'), + httr::content_type('application/x-www-form-urlencoded') + ) + + if (token_request$status_code != 200) { + stop("OAuth2 authentication failed! Check your client_id and client_secret.") + } + + request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) + access_token <- request_body$access_token + + cat("✓ OAuth2 authentication successful (app-attributable)\n") + cat(" Token expires in:", request_body$expires_in, "seconds\n\n") + + } else { + # JWT: Extract subdomain from JWT, use JWT as bearer token + jwt_token <- key_parts[2] + + # Decode JWT to extract subdomain + jwt_parts <- strsplit(jwt_token, ".", fixed = TRUE)[[1]] + payload_json <- rawToChar(base64decode(jwt_parts[2])) + payload <- jsonlite::fromJSON(payload_json) + + # Extract subdomain from aud or iss field + subdomain_raw <- payload$aud + if (is.null(subdomain_raw) || subdomain_raw == "") { + subdomain_raw <- payload$iss + } + + # Remove .benchling.com suffix if present + subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) + + # The JWT token IS our bearer token + access_token <- jwt_token + + cat("✓ Analysis key parsed successfully\n") + cat(" Subdomain:", subdomain, "\n") + cat(" Analysis ID:", analysis_id, "\n") + cat(" Authentication: Using JWT from analysis key (user-attributable)\n") + cat(" Token expires: ~10 minutes from generation\n\n") } - # Remove .benchling.com suffix if present - subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) - - # The JWT token IS our bearer token - no need for OAuth2! - access_token <- jwt_token - - cat("✓ Analysis key parsed successfully\n") - cat(" Subdomain:", subdomain, "\n") - cat(" Analysis ID:", analysis_id, "\n") - cat(" Authentication: Using JWT from analysis key (user-attributable)\n") - cat(" Token expires: ~10 minutes from generation\n\n") - }, error = function(e) { stop(paste( "Failed to parse analysis key!", @@ -103,71 +139,6 @@ tryCatch({ )) }) -### END: JWT AUTHENTICATION ### - -################################################################################ -# Option 2: Benchling App Authentication (OAuth2) - COMMENTED OUT BY DEFAULT -################################################################################ -### START: OAUTH2 AUTHENTICATION (Uncomment this entire section if using OAuth2) ### -# -# Use this approach for: -# - Long-running workflows (>10 minutes) -# - Production systems -# - Workflows that process multiple analyses -# -# Prerequisites: -# 1. Create a Benchling App: https://docs.benchling.com/docs/getting-started-benchling-apps -# 2. Grant permissions: analyses:read/write, data-frames:read/write, files:read/write -# 3. Create .Renviron file with: -# BENCHLING_CLIENT_ID=your_client_id -# BENCHLING_CLIENT_SECRET=your_client_secret -# BENCHLING_TENANT_SUBDOMAIN=your_subdomain -# -# To use: Comment out the JWT section above, uncomment the code below. -# -# # Load App credentials -# client_id <- Sys.getenv("BENCHLING_CLIENT_ID") -# client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") -# subdomain <- Sys.getenv("BENCHLING_TENANT_SUBDOMAIN") -# -# if (client_id == "" || client_secret == "" || subdomain == "") { -# stop("Missing Benchling App credentials! Please set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_TENANT_SUBDOMAIN in .Renviron") -# } -# -# # Prompt for analysis ID only (not full key) -# if (analysis_key == "") { -# cat("\nEnter Analysis ID (e.g., ana_XXXXX): ") -# analysis_id <- readline() -# } else { -# # Extract ID from analysis key if provided -# analysis_id <- gsub(":.*$", "", analysis_key) -# } -# -# # Generate OAuth2 bearer token -# cat("Authenticating with Benchling App credentials...\n") -# token_url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") -# token_request <- httr::POST( -# url = token_url, -# body = paste0("client_id=", client_id, -# "&client_secret=", client_secret, -# "&grant_type=client_credentials"), -# httr::accept('application/json'), -# httr::content_type('application/x-www-form-urlencoded') -# ) -# -# if (token_request$status_code != 200) { -# stop("OAuth2 authentication failed! Check your client_id and client_secret.") -# } -# -# request_body <- jsonlite::fromJSON(rawToChar(token_request$content)) -# access_token <- request_body$access_token -# -# cat("✓ OAuth2 authentication successful (app-attributable)\n") -# cat(" Token expires in:", request_body$expires_in, "seconds\n\n") -# -### END: OAUTH2 AUTHENTICATION ### -################################################################################ - ############################################################### # Use the Get analysis endpoint and retrieve the dataframe id ############################################################### @@ -269,6 +240,10 @@ cat("Available variables:\n") cat(" df - Dataset as R dataframe\n") cat(" subdomain - Benchling tenant subdomain\n") cat(" analysis_id - Analysis ID\n") -cat(" access_token - JWT bearer token\n") +if (USE_OAUTH2) { + cat(" access_token - OAuth2 bearer token (15 min expiration)\n") +} else { + cat(" access_token - JWT bearer token (10 min expiration)\n") +} cat(" folder_id - Folder ID for uploads\n") cat("\nNext step: Run results_analysis.R\n") From 62e251ead59730131b2cf055fd33cd1c612f9b81 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 10:43:19 -0400 Subject: [PATCH 18/36] Update README to reflect USE_OAUTH2 flag switching Changed documentation from 'commented code blocks' to 'USE_OAUTH2 flag' to match the new simplified authentication switching mechanism in both get_dataframe.R and app.R. --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f2536ae..3ffe873 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Provided for educational purposes only; not for production use. 2. **Install dependencies:** `Rscript -e "renv::restore()"` 3. **Create Analysis:** [Create an analysis](https://help.benchling.com/hc/en-us/articles/15298157390861) in Benchling 4. **Upload Sample Data:** Attach `examples/sample_ic50_data.csv` as an input dataset to your analysis - - **Note:** In production usage, this would be an existing dataset or results table from your experiments + - **Note:** In production usage, this would be an existing dataset or results table from your experiments 5. **Get Analysis Key:** In your analysis, click **"Connect with external tool"** → **"Copy Analysis Key"** 6. **Run the workflow:** The script will prompt for your analysis key - that's it! @@ -40,7 +40,7 @@ The JWT token (part after the colon) contains the authentication credentials and - ⚠️ **More setup:** Requires creating a Benchling App - ⚠️ **App-attributable:** Actions are tied to the app, not a specific user -**Want to use App credentials?** See commented code blocks in `get_dataframe.R` and `app.R` with step-by-step instructions. Also see [Benchling Apps Guide](https://docs.benchling.com/docs/getting-started-benchling-apps). +**Want to use App credentials?** Set `USE_OAUTH2 <- TRUE` at the top of `get_dataframe.R` (line 12) and/or `app.R` (line 17). See [Benchling Apps Guide](https://docs.benchling.com/docs/getting-started-benchling-apps) for setup. 📖 **Detailed Setup Instructions** (click to expand) @@ -68,7 +68,6 @@ Analyses are where you'll attach input datasets and receive output results. - `Cell.Mortality.Concentration` - Drug concentration values - `Cell.Mortality.Mortality.24h` - Mortality percentage at 24 hours - `Cell.Line.Name` - Cell line identifier - **Example data format:** 4. **Get the Analysis Key:** - In your analysis, click **"Connect with external tool"** @@ -106,7 +105,7 @@ head(df) # Check data loaded correctly source('results_analysis.R') ``` -**Option B: Interactive R** +**Option B: Script Based Execution in Interactive R Session** ```r source('get_dataframe.R') @@ -121,7 +120,7 @@ export BENCHLING_ANALYSIS_KEY="ana_XXXXX:eyJhbGc..." Rscript -e "source('get_dataframe.R'); source('results_analysis.R')" ``` -**Option D: Shiny Web App (Easiest)** +**Option D: Shiny Web App (Easiest) from Interactive R Session** ```r shiny::runApp("app.R") From b8e7e61ccd19100c39f4630212956d4ef36e9ecc Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 10:44:35 -0400 Subject: [PATCH 19/36] switch to default auth --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index 8489ad9..53b9cab 100644 --- a/app.R +++ b/app.R @@ -15,7 +15,7 @@ source("utils.R") ################################################################################ # AUTHENTICATION CONFIGURATION - Set your method here ################################################################################ -USE_OAUTH2 <- TRUE # Set to FALSE for JWT (default), TRUE for OAuth2 +USE_OAUTH2 <- FALSE # Set to FALSE for JWT (default), TRUE for OAuth2 # OAuth2 credentials (only used if USE_OAUTH2 = TRUE) if (USE_OAUTH2) { From 99e6754648b0811aa44cefe89738e87172236932 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 11:11:09 -0400 Subject: [PATCH 20/36] Fix variable name in results_analysis.R success summary Changed IC50_result (undefined) to result (correct variable from line 54). Also changed result$value to result$ic50 to match the actual return value from calculate_ic50() utility function. --- results_analysis.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/results_analysis.R b/results_analysis.R index 17bdb7d..572e48e 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -337,8 +337,8 @@ cat("==========================================\n") cat("SUCCESS! Analysis complete\n") cat("==========================================\n") cat("Results:\n") -cat(" IC50 Value:", IC50_result$value, "\n") -cat(" Slope:", IC50_result$slope, "\n") +cat(" IC50 Value:", result$ic50, "\n") +cat(" Slope:", result$slope, "\n") cat(" p-Value:", p_Value, "\n\n") cat("Uploaded to Benchling:\n") cat(" ✓ Results CSV (", result_dataframe_id, ")\n", sep = "") From a9444fad637cdc43ef0056323d4372cb5504c7de Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 11:16:33 -0400 Subject: [PATCH 21/36] Standardize column names in sample data to match main workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated sample_ic50_data.csv to use standard column names: - Concentration → Cell.Mortality.Concentration - Mortality 24h → Cell.Mortality.Mortality.24h - Mortality 48h → Cell.Mortality.Mortality.48h Benefits: - Sample data now matches format expected by main workflow - No column renaming needed in local_test.R - More uniform and realistic (matches actual Benchling data format) - Simpler for users to understand Updated files: - examples/sample_ic50_data.csv: New standardized column names - examples/local_test.R: Removed column renaming, updated references - utils.R: Updated example code to match new column names --- examples/local_test.R | 14 +++++--------- examples/sample_ic50_data.csv | 2 +- utils.R | 7 +++---- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/examples/local_test.R b/examples/local_test.R index 9a27997..eef4b17 100644 --- a/examples/local_test.R +++ b/examples/local_test.R @@ -43,13 +43,9 @@ if (file.exists("sample_ic50_data.csv")) { stop("Cannot find 'sample_ic50_data.csv' - please run from project root or examples/ directory") } -# The CSV has simple column names, so we'll rename them to a standard format -# This is a common data preparation step -names(df) <- c("Concentration", "Mortality_24h", "Mortality_48h") - cat("✓ Data loaded successfully\n") cat(" Observations:", nrow(df), "\n") -cat(" Concentration range:", min(df$Concentration), "-", max(df$Concentration), "µg/ml\n") +cat(" Concentration range:", min(df$Cell.Mortality.Concentration), "-", max(df$Cell.Mortality.Concentration), "µg/ml\n") cat(" Columns:", paste(names(df), collapse = ", "), "\n\n") # Display first few rows to understand the data structure @@ -74,8 +70,8 @@ cat(" Estimating: IC50 and Slope\n\n") result <- calculate_ic50( df, - concentration_col = "Concentration", - mortality_col = "Mortality_24h" + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h" ) cat("✓ IC50 calculation complete!\n\n") @@ -112,8 +108,8 @@ cat("STEP 3: Creating interactive plot...\n") plot <- create_ic50_plot( df, - concentration_col = "Concentration", - mortality_col = "Mortality_24h", + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h", ic50_value = result$ic50, slope = result$slope, title = "IC50 Dose-Response Curve (Local Test)" diff --git a/examples/sample_ic50_data.csv b/examples/sample_ic50_data.csv index 2257250..4891163 100644 --- a/examples/sample_ic50_data.csv +++ b/examples/sample_ic50_data.csv @@ -1,4 +1,4 @@ -Concentration,Mortality 24h,Mortality 48h +Cell.Mortality.Concentration,Cell.Mortality.Mortality.24h,Cell.Mortality.Mortality.48h 0.3,3.979,2.192 1,17.07,16.345 3,18.356,42.458 diff --git a/utils.R b/utils.R index 8cd8a5e..3bfab50 100644 --- a/utils.R +++ b/utils.R @@ -44,8 +44,7 @@ library(pracma) # # Example: # df <- read.csv("examples/sample_ic50_data.csv") -# names(df) <- c("Concentration", "Mortality_24h", "Mortality_48h") -# result <- calculate_ic50(df, "Concentration", "Mortality_24h") +# result <- calculate_ic50(df, "Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h") # print(paste("IC50:", result$ic50)) # print(paste("p-value:", result$p_value)) ################################################################################ @@ -146,8 +145,8 @@ calculate_ic50 <- function(df, concentration_col, mortality_col) { # D = lower limit (0) # # Example: -# result <- calculate_ic50(df, "Concentration", "Mortality_24h") -# plot <- create_ic50_plot(df, "Concentration", "Mortality_24h", +# result <- calculate_ic50(df, "Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h") +# plot <- create_ic50_plot(df, "Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h", # result$ic50, result$slope) # htmlwidgets::saveWidget(plot, "ic50_plot.html", selfcontained = TRUE) ################################################################################ From ffc06aa4ae87ecccd1987d3db3fb399078d0e811 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 11:24:02 -0400 Subject: [PATCH 22/36] Add 48-hour IC50 analysis to all scripts Extended results_analysis.R and local_test.R to calculate and visualize IC50 for both 24h and 48h timepoints, matching the functionality in app.R. Changes: - results_analysis.R: Calculate IC50 for both 24h and 48h, create two plots, upload both to Benchling, include both in results CSV - local_test.R: Calculate IC50 for both timepoints, generate two interactive HTML plots for local testing This provides a complete dose-response analysis across timepoints for better understanding of compound potency over time. --- examples/local_test.R | 119 +++++++++++++++------- results_analysis.R | 227 +++++++++++++++++++++++++++++++----------- 2 files changed, 249 insertions(+), 97 deletions(-) diff --git a/examples/local_test.R b/examples/local_test.R index eef4b17..c355663 100644 --- a/examples/local_test.R +++ b/examples/local_test.R @@ -68,37 +68,60 @@ cat(" Estimating: IC50 and Slope\n\n") # - Calculates slope (steepness of the curve) # - Provides statistical measures (p-value, std error, etc.) -result <- calculate_ic50( +cat("Calculating 24h IC50...\n") +result_24h <- calculate_ic50( df, concentration_col = "Cell.Mortality.Concentration", mortality_col = "Cell.Mortality.Mortality.24h" ) -cat("✓ IC50 calculation complete!\n\n") +cat("✓ 24h IC50 calculation complete!\n\n") + +cat("Calculating 48h IC50...\n") +result_48h <- calculate_ic50( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.48h" +) + +cat("✓ 48h IC50 calculation complete!\n\n") cat("RESULTS:\n") -cat(" IC50 Value:", result$ic50, "µg/ml\n") -cat(" Slope:", result$slope, "\n") -cat(" Standard Error:", result$std_error, "\n") -cat(" t-value:", result$t_value, "\n") -cat(" p-value:", result$p_value, "\n\n") +cat("24h Results:\n") +cat(" IC50 Value:", result_24h$ic50, "µg/ml\n") +cat(" Slope:", result_24h$slope, "\n") +cat(" Standard Error:", result_24h$std_error, "\n") +cat(" t-value:", result_24h$t_value, "\n") +cat(" p-value:", result_24h$p_value, "\n") +if (result_24h$p_value < 0.05) { + cat(" ✓ Statistically significant (p < 0.05)\n\n") +} else { + cat(" ⚠ May not be statistically significant (p >= 0.05)\n\n") +} + +cat("48h Results:\n") +cat(" IC50 Value:", result_48h$ic50, "µg/ml\n") +cat(" Slope:", result_48h$slope, "\n") +cat(" Standard Error:", result_48h$std_error, "\n") +cat(" t-value:", result_48h$t_value, "\n") +cat(" p-value:", result_48h$p_value, "\n") +if (result_48h$p_value < 0.05) { + cat(" ✓ Statistically significant (p < 0.05)\n\n") +} else { + cat(" ⚠ May not be statistically significant (p >= 0.05)\n\n") +} # Understanding the results: # - IC50: The concentration that kills 50% of cells # - Slope: How steep the dose-response curve is (more negative = steeper) # - p-value: Statistical significance (< 0.05 means significant) - -if (result$p_value < 0.05) { - cat("✓ Result is statistically significant (p < 0.05)\n\n") -} else { - cat("⚠ Result may not be statistically significant (p >= 0.05)\n\n") -} +# - Note: 48h IC50 is typically lower (more potent) as cells have more time to respond ################################################################################ -# STEP 3: Create Interactive Visualization +# STEP 3: Create Interactive Visualizations ################################################################################ -cat("STEP 3: Creating interactive plot...\n") +cat("STEP 3: Creating interactive plots...\n") # The create_ic50_plot() function generates a publication-quality plot: # - Scatter points show your actual data @@ -106,25 +129,40 @@ cat("STEP 3: Creating interactive plot...\n") # - Log scale on x-axis (standard for pharmacology) # - Interactive hover tooltips for data exploration -plot <- create_ic50_plot( - df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h", - ic50_value = result$ic50, - slope = result$slope, - title = "IC50 Dose-Response Curve (Local Test)" -) - -# Save the plot as an HTML file in the examples directory # Determine if we're in examples/ or project root if (basename(getwd()) == "examples") { - output_file <- "local_test_output.html" + output_file_24h <- "local_test_output_24h.html" + output_file_48h <- "local_test_output_48h.html" } else { - output_file <- file.path("examples", "local_test_output.html") + output_file_24h <- file.path("examples", "local_test_output_24h.html") + output_file_48h <- file.path("examples", "local_test_output_48h.html") } -saveWidget(plot, output_file, selfcontained = TRUE) -cat("✓ Plot saved to:", output_file, "\n\n") +# Create and save 24h plot +cat(" Creating 24h plot...\n") +plot_24h <- create_ic50_plot( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.24h", + ic50_value = result_24h$ic50, + slope = result_24h$slope, + title = "IC50 Dose-Response Curve - 24h (Local Test)" +) +saveWidget(plot_24h, output_file_24h, selfcontained = TRUE) +cat(" ✓ 24h plot saved to:", output_file_24h, "\n") + +# Create and save 48h plot +cat(" Creating 48h plot...\n") +plot_48h <- create_ic50_plot( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.48h", + ic50_value = result_48h$ic50, + slope = result_48h$slope, + title = "IC50 Dose-Response Curve - 48h (Local Test)" +) +saveWidget(plot_48h, output_file_48h, selfcontained = TRUE) +cat(" ✓ 48h plot saved to:", output_file_48h, "\n\n") ################################################################################ # STEP 4: Create Results Summary @@ -132,12 +170,14 @@ cat("✓ Plot saved to:", output_file, "\n\n") cat("STEP 4: Creating results summary...\n") -# Create a dataframe with the key results +# Create a dataframe with the key results from both timepoints # This format is useful for reporting or further analysis summary_df <- data.frame( - Parameter = c("IC50", "Slope", "Std Error", "t-value", "p-value"), - Value = c(result$ic50, result$slope, result$std_error, result$t_value, result$p_value), - Unit = c("µg/ml", "(unitless)", "µg/ml", "(unitless)", "(unitless)") + Timepoint = c("24h", "24h", "24h", "24h", "24h", "48h", "48h", "48h", "48h", "48h"), + Parameter = rep(c("IC50", "Slope", "Std Error", "t-value", "p-value"), 2), + Value = c(result_24h$ic50, result_24h$slope, result_24h$std_error, result_24h$t_value, result_24h$p_value, + result_48h$ic50, result_48h$slope, result_48h$std_error, result_48h$t_value, result_48h$p_value), + Unit = rep(c("µg/ml", "(unitless)", "µg/ml", "(unitless)", "(unitless)"), 2) ) print(summary_df) @@ -159,15 +199,18 @@ cat("\n") cat("=====================================\n") cat("SUCCESS!\n") cat("=====================================\n") -cat("You've successfully calculated IC50 from dose-response data.\n\n") +cat("You've successfully calculated IC50 from dose-response data for both timepoints.\n\n") cat("What you learned:\n") cat(" ✓ How to load and prepare concentration-response data\n") cat(" ✓ How to calculate IC50 using the LL.4 model\n") cat(" ✓ How to interpret IC50 statistics\n") -cat(" ✓ How to create interactive visualizations\n\n") +cat(" ✓ How to create interactive visualizations\n") +cat(" ✓ How to compare IC50 values across different timepoints\n\n") cat("Files created:\n") -cat(" - ", output_file, " (open in browser to view)\n", sep = "") -cat(" - ", summary_file, " (results table)\n\n", sep = "") +cat(" - ", output_file_24h, " (24h plot - open in browser)\n", sep = "") +cat(" - ", output_file_48h, " (48h plot - open in browser)\n", sep = "") +cat(" - ", summary_file, " (results table for both timepoints)\n\n", sep = "") cat("NEXT STEPS:\n") -cat(" → Open ", output_file, " in your web browser to see the interactive plot\n", sep = "") +cat(" → Open the HTML files in your web browser to see the interactive plots\n") +cat(" → Compare the 24h vs 48h IC50 values - typically 48h shows lower IC50 (more potent)\n") cat(" → For full Benchling integration, see the main scripts in the parent directory\n\n") diff --git a/results_analysis.R b/results_analysis.R index 572e48e..2b1de14 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -34,7 +34,7 @@ cat("✓ All required variables present\n") cat(" Dataset:", nrow(df), "rows x", ncol(df), "columns\n\n") # Verify required columns exist -required_cols <- c("Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h") +required_cols <- c("Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h", "Cell.Mortality.Mortality.48h") missing_cols <- required_cols[!required_cols %in% names(df)] if (length(missing_cols) > 0) { @@ -49,17 +49,29 @@ if (length(missing_cols) > 0) { # Calculate IC50 using utility function ################################################################################ -cat("Calculating IC50...\n") +cat("Calculating IC50 for 24h data...\n") -result <- calculate_ic50( +result_24h <- calculate_ic50( df, concentration_col = "Cell.Mortality.Concentration", mortality_col = "Cell.Mortality.Mortality.24h" ) -cat("✓ IC50 calculation complete\n") -cat(" IC50 Value:", result$ic50, "\n") -cat(" Slope:", result$slope, "\n\n") +cat("✓ 24h IC50 calculation complete\n") +cat(" IC50 Value:", result_24h$ic50, "\n") +cat(" Slope:", result_24h$slope, "\n\n") + +cat("Calculating IC50 for 48h data...\n") + +result_48h <- calculate_ic50( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.48h" +) + +cat("✓ 48h IC50 calculation complete\n") +cat(" IC50 Value:", result_48h$ic50, "\n") +cat(" Slope:", result_48h$slope, "\n\n") ################################################################################ # Create Results Dataframe @@ -68,24 +80,24 @@ cat(" Slope:", result$slope, "\n\n") cat("Preparing results dataframe...\n") # Extract cell line name (use first value, or default if not present) -cell <- if ("Cell.Line.Name" %in% names(df)) { - c(df$Cell.Line.Name[1]) +cell_line <- if ("Cell.Line.Name" %in% names(df)) { + df$Cell.Line.Name[1] } else { "Unknown" } -hours <- c(24) -fit_function <- c('LL.4') -IC50 <- c(result$ic50) -std <- c(result$std_error) -t_Value <- c(result$t_value) -p_Value <- result$p_value - -# create CSV dataframe -csv_df <- - data.frame(cell, hours, fit_function, IC50, std, t_Value, p_Value) +# Create dataframe with both 24h and 48h results +csv_df <- data.frame( + cell = c(cell_line, cell_line), + hours = c(24, 48), + fit_function = c('LL.4', 'LL.4'), + IC50 = c(result_24h$ic50, result_48h$ic50), + std = c(result_24h$std_error, result_48h$std_error), + t_Value = c(result_24h$t_value, result_48h$t_value), + p_Value = c(result_24h$p_value, result_48h$p_value) +) -cat("✓ Results dataframe created\n\n") +cat("✓ Results dataframe created (24h and 48h)\n\n") ########################################################################################## # Calculate result dataframe and send to Benchling S3 Bucket @@ -180,42 +192,67 @@ dataframe_request <- cat("✓ Results dataframe uploaded (ID:", result_dataframe_id, ")\n\n") ################################################################################ -# Create interactive plot using utility function +# Create interactive plots using utility function ################################################################################ -cat("Creating interactive plot...\n") +cat("Creating interactive plots...\n") -# Set Image Name and Path -image_name <- "mortality_24h.html" -path <- dirname(rstudioapi::getSourceEditorContext()$path) -image_file <- paste(path, '/', image_name, sep = "") +# Set Image Names and Paths +image_name_24h <- "mortality_24h.html" +image_name_48h <- "mortality_48h.html" +path <- dirname(rstudioapi::getSourceEditorContext()$path) +image_file_24h <- paste(path, '/', image_name_24h, sep = "") +image_file_48h <- paste(path, '/', image_name_48h, sep = "") -# Create plot using utility function -plot <- create_ic50_plot( +# Create 24h plot +plot_24h <- create_ic50_plot( df, concentration_col = "Cell.Mortality.Concentration", mortality_col = "Cell.Mortality.Mortality.24h", - ic50_value = result$ic50, - slope = result$slope + ic50_value = result_24h$ic50, + slope = result_24h$slope, + title = "IC50 Dose-Response Curve - 24h" +) + +# Save 24h plot +saveWidget( + widget = plot_24h, + file = image_file_24h, + selfcontained = TRUE ) -# Save html file +cat("✓ 24h plot created and saved locally\n") + +# Create 48h plot +plot_48h <- create_ic50_plot( + df, + concentration_col = "Cell.Mortality.Concentration", + mortality_col = "Cell.Mortality.Mortality.48h", + ic50_value = result_48h$ic50, + slope = result_48h$slope, + title = "IC50 Dose-Response Curve - 48h" +) + +# Save 48h plot saveWidget( - widget = plot, - file = image_file, + widget = plot_48h, + file = image_file_48h, selfcontained = TRUE ) -cat("✓ Plot created and saved locally\n\n") +cat("✓ 48h plot created and saved locally\n\n") ################################################################################ -# Upload Plot to Benchling +# Upload Plots to Benchling ################################################################################ -cat("Uploading plot to Benchling...\n") +cat("Uploading plots to Benchling...\n") + +# Upload 24h plot +cat(" Uploading 24h plot...\n") ### Create a binary file -my_data <- readBin(image_file, "raw", 10e6) +my_data_24h <- readBin(image_file_24h, "raw", 10e6) ############### Use the POST File endpoint to create a new File ############### @@ -224,71 +261,143 @@ api_path <- "/api/v2-beta/files" url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") # Provide name of file as a payload in a list -file_payload <- list(name = image_name, filename = image_name, folderId = folder_id) +file_payload_24h <- list(name = image_name_24h, filename = image_name_24h, folderId = folder_id) # Convert payload to Json format and use POST endpoint to create File -file_request <- +file_request_24h <- httr::POST( url = url, - body = toJSON(file_payload, pretty = TRUE, auto_unbox = TRUE), + body = toJSON(file_payload_24h, pretty = TRUE, auto_unbox = TRUE), httr::accept('application/json'), httr::content_type('application/json'), httr::add_headers('Authorization' = paste("Bearer", access_token)) ) # Check for errors -if (file_request$status_code != 200) { +if (file_request_24h$status_code != 200) { stop(paste( - "Failed to create file! Status code:", file_request$status_code, + "Failed to create 24h file! Status code:", file_request_24h$status_code, sep = "" )) } # Use the jsonLite library to read the Json body -file_body <- jsonlite::fromJSON(rawToChar(file_request$content)) +file_body_24h <- jsonlite::fromJSON(rawToChar(file_request_24h$content)) # Retrieve the file id -file_id <- file_body$id +file_id_24h <- file_body_24h$id # Retrieve S3 PUT url from previous call -s3_put_url <- file_request$headers$`content-location` +s3_put_url_24h <- file_request_24h$headers$`content-location` ####### Use the PUT file endpoint to upload file in a Benchling S3 Bucket ###### # Put file in S3 bucket and add [;x-amz-server-side-encryption': 'AES256'] to the request headers -s3_file_request <- +s3_file_request_24h <- httr::PUT( - url = s3_put_url, - body = my_data, + url = s3_put_url_24h, + body = my_data_24h, httr::add_headers('x-amz-server-side-encryption' = 'AES256') ) # Check if upload succeeded -if (s3_file_request$status_code != 200) { +if (s3_file_request_24h$status_code != 200) { stop(paste( - "Failed to upload plot to S3! Status code:", s3_file_request$status_code, + "Failed to upload 24h plot to S3! Status code:", s3_file_request_24h$status_code, sep = "" )) } # Change file status to SUCCEEDED after uploading to S3 api_path <- "/api/v2-beta/files/" -url <- paste("https://", subdomain, ".benchling.com", api_path, file_id, sep = "") +url_24h <- paste("https://", subdomain, ".benchling.com", api_path, file_id_24h, sep = "") # Set Payload list as SUCCEEDED -file_payload <- list(uploadStatus = 'SUCCEEDED') +file_payload_24h <- list(uploadStatus = 'SUCCEEDED') # Convert payload to Json format and use Patch endpoint to mark file upload as completed -file_request <- +file_request_24h <- httr::PATCH( + url = url_24h, + body = toJSON(file_payload_24h, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +cat(" ✓ 24h plot uploaded (ID:", file_id_24h, ")\n") + +# Upload 48h plot +cat(" Uploading 48h plot...\n") + +### Create a binary file +my_data_48h <- readBin(image_file_48h, "raw", 10e6) + +# Provide name of file as a payload in a list +file_payload_48h <- list(name = image_name_48h, filename = image_name_48h, folderId = folder_id) + +# Convert payload to Json format and use POST endpoint to create File +file_request_48h <- + httr::POST( url = url, - body = toJSON(file_payload, pretty = TRUE, auto_unbox = TRUE), + body = toJSON(file_payload_48h, pretty = TRUE, auto_unbox = TRUE), + httr::accept('application/json'), + httr::content_type('application/json'), + httr::add_headers('Authorization' = paste("Bearer", access_token)) + ) + +# Check for errors +if (file_request_48h$status_code != 200) { + stop(paste( + "Failed to create 48h file! Status code:", file_request_48h$status_code, + sep = "" + )) +} + +# Use the jsonLite library to read the Json body +file_body_48h <- jsonlite::fromJSON(rawToChar(file_request_48h$content)) + +# Retrieve the file id +file_id_48h <- file_body_48h$id + +# Retrieve S3 PUT url from previous call +s3_put_url_48h <- file_request_48h$headers$`content-location` + +####### Use the PUT file endpoint to upload file in a Benchling S3 Bucket ###### + +# Put file in S3 bucket +s3_file_request_48h <- + httr::PUT( + url = s3_put_url_48h, + body = my_data_48h, + httr::add_headers('x-amz-server-side-encryption' = 'AES256') + ) + +# Check if upload succeeded +if (s3_file_request_48h$status_code != 200) { + stop(paste( + "Failed to upload 48h plot to S3! Status code:", s3_file_request_48h$status_code, + sep = "" + )) +} + +# Change file status to SUCCEEDED after uploading to S3 +url_48h <- paste("https://", subdomain, ".benchling.com", api_path, file_id_48h, sep = "") + +# Set Payload list as SUCCEEDED +file_payload_48h <- list(uploadStatus = 'SUCCEEDED') + +# Convert payload to Json format and use Patch endpoint to mark file upload as completed +file_request_48h <- + httr::PATCH( + url = url_48h, + body = toJSON(file_payload_48h, pretty = TRUE, auto_unbox = TRUE), httr::accept('application/json'), httr::content_type('application/json'), httr::add_headers('Authorization' = paste("Bearer", access_token)) ) -cat("✓ Plot uploaded (ID:", file_id, ")\n\n") +cat(" ✓ 48h plot uploaded (ID:", file_id_48h, ")\n\n") ################################################################################ # Use the PATCH analyses endpoint to attach outputs to analysis @@ -302,7 +411,7 @@ url <- paste("https://", subdomain, ".benchling.com", api_path, analysis_id # Create nested list containing output files and output dataframes analysis_body <- - list(fileIds = list(file_id), + list(fileIds = list(file_id_24h, file_id_48h), dataFrameIds = list(result_dataframe_id)) # Convert payload to Json format and use Patch endpoint to update Analysis @@ -337,11 +446,11 @@ cat("==========================================\n") cat("SUCCESS! Analysis complete\n") cat("==========================================\n") cat("Results:\n") -cat(" IC50 Value:", result$ic50, "\n") -cat(" Slope:", result$slope, "\n") -cat(" p-Value:", p_Value, "\n\n") +cat(" 24h IC50:", result_24h$ic50, " Slope:", result_24h$slope, " p-value:", result_24h$p_value, "\n") +cat(" 48h IC50:", result_48h$ic50, " Slope:", result_48h$slope, " p-value:", result_48h$p_value, "\n\n") cat("Uploaded to Benchling:\n") cat(" ✓ Results CSV (", result_dataframe_id, ")\n", sep = "") -cat(" ✓ Interactive plot (", file_id, ")\n", sep = "") +cat(" ✓ 24h plot (", file_id_24h, ")\n", sep = "") +cat(" ✓ 48h plot (", file_id_48h, ")\n", sep = "") cat("\nView your analysis at:\n") cat(" https://", subdomain, ".benchling.com/analyses/", analysis_id, "\n", sep = "") From 5389ab5a0679bdd729acd6e7fd5168b320f7687c Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 11:41:03 -0400 Subject: [PATCH 23/36] Use tmp/ directory for temporary files in results_analysis.R Changed results_analysis.R to create temporary files (CSV and HTML plots) in a tmp/ directory instead of the project root. Files are automatically cleaned up after successful upload to Benchling. Changes: - Create tmp/ directory at start of script - Save all temporary files (mortality.csv, plots) to tmp/ - Clean up files after successful upload - Remove tmp/ directory if empty after cleanup - Updated .gitignore to ignore tmp/ directory This keeps the project root clean and makes it clear which files are temporary versus permanent. --- .gitignore | 6 +----- results_analysis.R | 36 +++++++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 9b57682..4b6d2f3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,11 +11,6 @@ CLAUDE.md *.rda *.rds -# Output files from scripts (root level) -mortality.csv -mortality_24h.html -mortality_48h.html - # Output files from examples examples/local_test_output.html examples/local_test_summary.csv @@ -41,6 +36,7 @@ rsconnect/ .idea/ # Temporary files +tmp/ *.tmp *.bak *~ diff --git a/results_analysis.R b/results_analysis.R index 2b1de14..30ec3e2 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -33,6 +33,12 @@ if (length(missing_vars) > 0) { cat("✓ All required variables present\n") cat(" Dataset:", nrow(df), "rows x", ncol(df), "columns\n\n") +# Create tmp directory for temporary files +tmp_dir <- "tmp" +if (!dir.exists(tmp_dir)) { + dir.create(tmp_dir) +} + # Verify required columns exist required_cols <- c("Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h", "Cell.Mortality.Mortality.48h") missing_cols <- required_cols[!required_cols %in% names(df)] @@ -105,10 +111,9 @@ cat("✓ Results dataframe created (24h and 48h)\n\n") cat("Uploading results dataframe to Benchling...\n") -# Save CSV on local path +# Save CSV to tmp directory csv_name <- "mortality.csv" -path <- dirname(rstudioapi::getSourceEditorContext()$path) -csv_file <- paste(path, '/', csv_name, sep = "") +csv_file <- file.path(tmp_dir, csv_name) write.csv(csv_df, csv_file, row.names = FALSE) ############ Use the POST dataframe endpoint to create a new dataframe ############ @@ -197,12 +202,11 @@ cat("✓ Results dataframe uploaded (ID:", result_dataframe_id, ")\n\n") cat("Creating interactive plots...\n") -# Set Image Names and Paths +# Set Image Names and Paths (save to tmp directory) image_name_24h <- "mortality_24h.html" image_name_48h <- "mortality_48h.html" -path <- dirname(rstudioapi::getSourceEditorContext()$path) -image_file_24h <- paste(path, '/', image_name_24h, sep = "") -image_file_48h <- paste(path, '/', image_name_48h, sep = "") +image_file_24h <- file.path(tmp_dir, image_name_24h) +image_file_48h <- file.path(tmp_dir, image_name_48h) # Create 24h plot plot_24h <- create_ic50_plot( @@ -438,6 +442,24 @@ analysis_body <- jsonlite::fromJSON(rawToChar(analysis_request$content)) cat("✓ Outputs attached to analysis\n") cat(" Analysis status:", analysis_body$status, "\n\n") +################################################################################ +# Clean up temporary files +################################################################################ + +cat("Cleaning up temporary files...\n") + +# Delete temporary files +if (file.exists(csv_file)) file.remove(csv_file) +if (file.exists(image_file_24h)) file.remove(image_file_24h) +if (file.exists(image_file_48h)) file.remove(image_file_48h) + +# Remove tmp directory if empty +if (length(list.files(tmp_dir)) == 0) { + unlink(tmp_dir, recursive = TRUE) +} + +cat("✓ Temporary files cleaned up\n\n") + ################################################################################ # Success Summary ################################################################################ From eb9fb8bc9e7d23ca89fd70ca2251473490c53b6b Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 11:43:11 -0400 Subject: [PATCH 24/36] Simplify tmp cleanup to delete entire directory --- results_analysis.R | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/results_analysis.R b/results_analysis.R index 30ec3e2..8e3bb97 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -448,13 +448,8 @@ cat(" Analysis status:", analysis_body$status, "\n\n") cat("Cleaning up temporary files...\n") -# Delete temporary files -if (file.exists(csv_file)) file.remove(csv_file) -if (file.exists(image_file_24h)) file.remove(image_file_24h) -if (file.exists(image_file_48h)) file.remove(image_file_48h) - -# Remove tmp directory if empty -if (length(list.files(tmp_dir)) == 0) { +# Delete tmp directory and all contents +if (dir.exists(tmp_dir)) { unlink(tmp_dir, recursive = TRUE) } From d88c8b31630f8e5464d0789a97f2dffb7e6b3228 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 11:58:39 -0400 Subject: [PATCH 25/36] Ensure fitted curve shows only line without markers Changed add_lines() to add_trace() with explicit mode='lines' to ensure the fitted curve displays as a line only, while observed data points retain their markers. --- utils.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utils.R b/utils.R index 3bfab50..4874074 100644 --- a/utils.R +++ b/utils.R @@ -211,11 +211,13 @@ create_ic50_plot <- function(df, concentration_col, mortality_col, # Parameters: A=100 (upper), B=slope, C=IC50, D=0 (lower) ys <- logistic4(xs, 100, slope, ic50_value, 0) - # Add fitted curve to plot - plot <- add_lines( + # Add fitted curve to plot (line only, no markers) + plot <- add_trace( plot, x = xs, y = ys, + type = "scatter", + mode = "lines", name = "Fitted Curve", line = list( color = 'rgba(200, 50, 50, 0.8)', From 97fb81eeec80fedff0662521849c2bc59678992d Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 12:02:27 -0400 Subject: [PATCH 26/36] Add inherit=FALSE to fitted curve trace to prevent marker inheritance --- utils.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utils.R b/utils.R index 4874074..aa2a437 100644 --- a/utils.R +++ b/utils.R @@ -222,7 +222,9 @@ create_ic50_plot <- function(df, concentration_col, mortality_col, line = list( color = 'rgba(200, 50, 50, 0.8)', width = 2 - ) + ), + marker = list(size = 0), # Explicitly disable markers + inherit = FALSE # Don't inherit data from previous trace ) return(plot) From 6413a56755f77210ec103640f3ee447c062eaf9c Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 12:09:34 -0400 Subject: [PATCH 27/36] Use add_lines() with pipe operator for fitted curve Switched to add_lines() which is specifically designed for line-only traces in plotly, avoiding any marker display issues. --- utils.R | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/utils.R b/utils.R index aa2a437..677417a 100644 --- a/utils.R +++ b/utils.R @@ -212,20 +212,17 @@ create_ic50_plot <- function(df, concentration_col, mortality_col, ys <- logistic4(xs, 100, slope, ic50_value, 0) # Add fitted curve to plot (line only, no markers) - plot <- add_trace( - plot, - x = xs, - y = ys, - type = "scatter", - mode = "lines", - name = "Fitted Curve", - line = list( - color = 'rgba(200, 50, 50, 0.8)', - width = 2 - ), - marker = list(size = 0), # Explicitly disable markers - inherit = FALSE # Don't inherit data from previous trace - ) + plot <- plot %>% + add_lines( + x = xs, + y = ys, + name = "Fitted Curve", + line = list( + color = 'rgba(200, 50, 50, 0.8)', + width = 2 + ), + showlegend = TRUE + ) return(plot) } From 063de285eae858079d103c9f4ad7c1876f451277 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 12:30:47 -0400 Subject: [PATCH 28/36] Revert to add_trace with explicit line mode for fitted curve Using add_trace() with mode='lines', marker size=0, and inherit=FALSE to ensure the fitted curve displays as a line only without markers. --- utils.R | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/utils.R b/utils.R index 677417a..aa2a437 100644 --- a/utils.R +++ b/utils.R @@ -212,17 +212,20 @@ create_ic50_plot <- function(df, concentration_col, mortality_col, ys <- logistic4(xs, 100, slope, ic50_value, 0) # Add fitted curve to plot (line only, no markers) - plot <- plot %>% - add_lines( - x = xs, - y = ys, - name = "Fitted Curve", - line = list( - color = 'rgba(200, 50, 50, 0.8)', - width = 2 - ), - showlegend = TRUE - ) + plot <- add_trace( + plot, + x = xs, + y = ys, + type = "scatter", + mode = "lines", + name = "Fitted Curve", + line = list( + color = 'rgba(200, 50, 50, 0.8)', + width = 2 + ), + marker = list(size = 0), # Explicitly disable markers + inherit = FALSE # Don't inherit data from previous trace + ) return(plot) } From 70e966751a4883e332f8538b5c5a9cfbee9a52c5 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 20:50:23 -0400 Subject: [PATCH 29/36] Support multiple Benchling domain suffixes (benchling.com, bnchdev.org, etc.) Fixed domain parsing to handle both production and development Benchling environments. The code now correctly handles: - Full domains: tenant.benchling.com, tenant.bnchdev.org - Subdomains only: tenant (automatically appends .benchling.com) Changes: - get_dataframe.R: Extract and use full domain from JWT/OAuth2 credentials - results_analysis.R: Use base_domain instead of constructing URLs - app.R: Create base_domain reactive, update all URL constructions This fixes the issue where dev environments (*.bnchdev.org) were being incorrectly converted to *.bnchdev.org.benchling.com. --- app.R | 53 +++++++++++++++++++++++++++++++--------------- get_dataframe.R | 52 +++++++++++++++++++++++++++++++-------------- results_analysis.R | 16 +++++++------- 3 files changed, 80 insertions(+), 41 deletions(-) diff --git a/app.R b/app.R index 53b9cab..9b1c592 100644 --- a/app.R +++ b/app.R @@ -64,20 +64,33 @@ ui <- fluidPage(theme = shinytheme("cerulean"), # Define server function server <- function(input, output) { - # Extract subdomain - subdomain <- reactive({ + # Extract base domain (full domain including suffix) + base_domain <- reactive({ if (USE_OAUTH2) { - # OAuth2: use fixed subdomain from credentials - subdomain_fixed + # OAuth2: use domain from credentials + domain_fixed <- subdomain_fixed } else { # JWT: extract from analysis key split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) - subdomain_raw <- payload$aud - gsub("\\.benchling\\.com$", "", subdomain_raw) + domain_fixed <- payload$aud + } + + # Determine if this is a full domain or just a subdomain + if (grepl("\\.", domain_fixed)) { + # Contains a dot - it's a full domain, use as-is + domain_fixed + } else { + # No dot - it's just a subdomain, append .benchling.com + paste0(domain_fixed, ".benchling.com") } }) + # Extract subdomain (first part only, for display) + subdomain <- reactive({ + sub("\\..*", "", base_domain()) + }) + # Get dataset from Benchling datasetInput <- reactive({ @@ -88,7 +101,13 @@ server <- function(input, output) { # Get access token based on auth method if (USE_OAUTH2) { # OAuth2: Generate token from app credentials - token_url <- paste0("https://", subdomain_fixed, ".benchling.com/api/v2/token") + # Determine full domain for token URL + oauth_domain <- if (grepl("\\.", subdomain_fixed)) { + subdomain_fixed # Already a full domain + } else { + paste0(subdomain_fixed, ".benchling.com") # Just subdomain, add suffix + } + token_url <- paste0("https://", oauth_domain, "/api/v2/token") token_request <- httr::POST( url = token_url, body = paste0("client_id=", client_id, @@ -111,7 +130,7 @@ server <- function(input, output) { # Get analysis endpoint <- "/api/v2-beta/analyses/" - URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, analysis_id, sep = "") + URL <- paste("https://", isolate(base_domain()), endpoint, analysis_id, sep = "") analysis_req <- GET(URL, add_headers( Accept = 'application/json', @@ -129,7 +148,7 @@ server <- function(input, output) { # Get dataset endpoint <- "/api/v2-beta/data-frames/" - URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, datasetId, sep = "") + URL <- paste("https://", isolate(base_domain()), endpoint, datasetId, sep = "") Dataset_req <- GET(URL, add_headers( Accept = 'application/json', @@ -184,9 +203,9 @@ server <- function(input, output) { saveWidget(widget = plot_48, file = File_48, selfcontained = TRUE) # Upload files to Benchling - upload_file <- function(filepath, filename, folder_id, access_token, subdomain) { + upload_file <- function(filepath, filename, folder_id, access_token, base_domain) { endpoint <- "/api/v2-beta/files" - URL <- paste("https://", subdomain, ".benchling.com", endpoint, sep = "") + URL <- paste("https://", base_domain, endpoint, sep = "") my_data <- readBin(filepath, "raw", 10e6) @@ -211,7 +230,7 @@ server <- function(input, output) { if (s3FileUpload$status_code == 200) { endpoint <- "/api/v2-beta/files/" - URL <- paste("https://", subdomain, ".benchling.com", endpoint, fileID, sep = "") + URL <- paste("https://", base_domain, endpoint, fileID, sep = "") s3FileUploadStatus <- list(uploadStatus = 'SUCCEEDED') @@ -227,8 +246,8 @@ server <- function(input, output) { fileID } - fileID_24 <- upload_file(File_24, imageName_24, folder_id, access_token, isolate(subdomain())) - fileID_48 <- upload_file(File_48, imageName_48, folder_id, access_token, isolate(subdomain())) + fileID_24 <- upload_file(File_24, imageName_24, folder_id, access_token, isolate(base_domain())) + fileID_48 <- upload_file(File_48, imageName_48, folder_id, access_token, isolate(base_domain())) # Create and upload CSV results Cell <- rep("Cell Line", 2) @@ -243,7 +262,7 @@ server <- function(input, output) { # Upload CSV as dataframe endpoint <- "/api/v2-beta/data-frames" - URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, sep = "") + URL <- paste("https://", isolate(base_domain()), endpoint, sep = "") my_data <- readBin(Csv_file, "raw", 10e6) @@ -269,7 +288,7 @@ server <- function(input, output) { if (s3FileUpload$status_code == 200) { endpoint <- "/api/v2-beta/data-frames/" - URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, DatasetID_Result, sep = "") + URL <- paste("https://", isolate(base_domain()), endpoint, DatasetID_Result, sep = "") DatasetStatusBody <- list(uploadStatus = "IN_PROGRESS") @@ -284,7 +303,7 @@ server <- function(input, output) { # Patch analysis with outputs endpoint <- "/api/v2-beta/analyses/" - URL <- paste("https://", isolate(subdomain()), ".benchling.com", endpoint, analysis_id, sep = "") + URL <- paste("https://", isolate(base_domain()), endpoint, analysis_id, sep = "") Analysisfiles <- list(fileIds = list(fileID_24, fileID_48), dataFrameIds = list(DatasetID_Result)) diff --git a/get_dataframe.R b/get_dataframe.R index 0d1c9dd..e0a3154 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -73,16 +73,25 @@ tryCatch({ analysis_id <- key_parts[1] if (USE_OAUTH2) { - # OAuth2: Extract subdomain from credentials, generate new token - subdomain <- subdomain_fixed + # OAuth2: Extract domain from credentials, generate new token + # Determine if this is a full domain or just a subdomain + if (grepl("\\.", subdomain_fixed)) { + # Contains a dot - it's a full domain, use as-is + base_domain <- subdomain_fixed + subdomain <- sub("\\..*", "", subdomain_fixed) # Extract first part for display + } else { + # No dot - it's just a subdomain, append .benchling.com + subdomain <- subdomain_fixed + base_domain <- paste0(subdomain_fixed, ".benchling.com") + } cat("✓ Analysis key parsed successfully\n") cat(" Analysis ID:", analysis_id, "\n") - cat(" Subdomain:", subdomain, "(from credentials)\n\n") + cat(" Domain:", base_domain, "(from credentials)\n\n") # Generate OAuth2 bearer token cat("Authenticating with Benchling App credentials...\n") - token_url <- paste0("https://", subdomain, ".benchling.com/api/v2/token") + token_url <- paste0("https://", base_domain, "/api/v2/token") token_request <- httr::POST( url = token_url, body = paste0("client_id=", client_id, @@ -111,20 +120,30 @@ tryCatch({ payload_json <- rawToChar(base64decode(jwt_parts[2])) payload <- jsonlite::fromJSON(payload_json) - # Extract subdomain from aud or iss field - subdomain_raw <- payload$aud - if (is.null(subdomain_raw) || subdomain_raw == "") { - subdomain_raw <- payload$iss + # Extract domain from aud or iss field + domain_raw <- payload$aud + if (is.null(domain_raw) || domain_raw == "") { + domain_raw <- payload$iss } - # Remove .benchling.com suffix if present - subdomain <- gsub("\\.benchling\\.com$", "", subdomain_raw) + # Determine if this is a full domain or just a subdomain + # Full domain examples: "tenant.benchling.com", "tenant.bnchdev.org" + # Subdomain example: "tenant" + if (grepl("\\.", domain_raw)) { + # Contains a dot - it's a full domain, use as-is + base_domain <- domain_raw + subdomain <- sub("\\..*", "", domain_raw) # Extract first part for display + } else { + # No dot - it's just a subdomain, append .benchling.com + subdomain <- domain_raw + base_domain <- paste0(domain_raw, ".benchling.com") + } # The JWT token IS our bearer token access_token <- jwt_token cat("✓ Analysis key parsed successfully\n") - cat(" Subdomain:", subdomain, "\n") + cat(" Domain:", base_domain, "\n") cat(" Analysis ID:", analysis_id, "\n") cat(" Authentication: Using JWT from analysis key (user-attributable)\n") cat(" Token expires: ~10 minutes from generation\n\n") @@ -146,10 +165,10 @@ tryCatch({ cat("Fetching analysis metadata...\n") # Construct url -# The resulting URL should look like: https://.benchling.com/api/v2-beta/analyses/ana_ABCD1234 +# The resulting URL should look like: https:///api/v2-beta/analyses/ana_ABCD1234 api_path <- "/api/v2-beta/analyses/" url <- - paste("https://", subdomain, ".benchling.com", api_path, analysis_id, sep = "") + paste("https://", base_domain, api_path, analysis_id, sep = "") # Perform a get request using JWT as bearer token analysis_response <- @@ -198,9 +217,9 @@ cat(" Folder ID:", folder_id, "\n\n") cat("Downloading dataset...\n") # Construct url -# The resulting URL should look like: https://.benchling.com/api/v2-beta/data-frames/dset_bHbGo1FP79Kl) +# The resulting URL should look like: https:///api/v2-beta/data-frames/dset_bHbGo1FP79Kl) api_path <- "/api/v2-beta/data-frames/" -url <- paste("https://", subdomain, ".benchling.com", api_path, dataframe_id, sep = "") +url <- paste("https://", base_domain, api_path, dataframe_id, sep = "") # Perform a get request dataframe_response <- @@ -238,7 +257,8 @@ cat("SUCCESS! Dataset ready for analysis\n") cat("==========================================\n") cat("Available variables:\n") cat(" df - Dataset as R dataframe\n") -cat(" subdomain - Benchling tenant subdomain\n") +cat(" base_domain - Benchling domain (e.g., tenant.benchling.com or tenant.bnchdev.org)\n") +cat(" subdomain - Tenant subdomain (first part of domain)\n") cat(" analysis_id - Analysis ID\n") if (USE_OAUTH2) { cat(" access_token - OAuth2 bearer token (15 min expiration)\n") diff --git a/results_analysis.R b/results_analysis.R index 8e3bb97..2666b5e 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -19,7 +19,7 @@ source("utils.R") # Verify Prerequisites ################################################################################ -required_vars <- c("df", "subdomain", "analysis_id", "access_token", "folder_id") +required_vars <- c("df", "base_domain", "analysis_id", "access_token", "folder_id") missing_vars <- required_vars[!sapply(required_vars, exists)] if (length(missing_vars) > 0) { @@ -120,7 +120,7 @@ write.csv(csv_df, csv_file, row.names = FALSE) # Construct url api_path <- "/api/v2-beta/data-frames" -url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") +url <- paste("https://", base_domain, api_path, sep = "") # Create a binary file my_data <- readBin(csv_file, "raw", 10e6) @@ -179,7 +179,7 @@ if (s3_file_request$status_code != 200) { # Change dataframe status to IN_PROGRESS after uploading to S3 api_path <- "/api/v2-beta/data-frames/" url <- - paste("https://", subdomain, ".benchling.com", api_path, result_dataframe_id, sep = "") + paste("https://", base_domain, api_path, result_dataframe_id, sep = "") # Set Payload list as IN_PROGRESS dataframe_payload <- list(uploadStatus = "IN_PROGRESS") @@ -262,7 +262,7 @@ my_data_24h <- readBin(image_file_24h, "raw", 10e6) # Construct url api_path <- "/api/v2-beta/files" -url <- paste("https://", subdomain, ".benchling.com", api_path, sep = "") +url <- paste("https://", base_domain, api_path, sep = "") # Provide name of file as a payload in a list file_payload_24h <- list(name = image_name_24h, filename = image_name_24h, folderId = folder_id) @@ -314,7 +314,7 @@ if (s3_file_request_24h$status_code != 200) { # Change file status to SUCCEEDED after uploading to S3 api_path <- "/api/v2-beta/files/" -url_24h <- paste("https://", subdomain, ".benchling.com", api_path, file_id_24h, sep = "") +url_24h <- paste("https://", base_domain, api_path, file_id_24h, sep = "") # Set Payload list as SUCCEEDED file_payload_24h <- list(uploadStatus = 'SUCCEEDED') @@ -386,7 +386,7 @@ if (s3_file_request_48h$status_code != 200) { } # Change file status to SUCCEEDED after uploading to S3 -url_48h <- paste("https://", subdomain, ".benchling.com", api_path, file_id_48h, sep = "") +url_48h <- paste("https://", base_domain, api_path, file_id_48h, sep = "") # Set Payload list as SUCCEEDED file_payload_48h <- list(uploadStatus = 'SUCCEEDED') @@ -411,7 +411,7 @@ cat("Attaching outputs to analysis...\n") # Construct url api_path <- "/api/v2-beta/analyses/" -url <- paste("https://", subdomain, ".benchling.com", api_path, analysis_id, sep = "") +url <- paste("https://", base_domain, api_path, analysis_id, sep = "") # Create nested list containing output files and output dataframes analysis_body <- @@ -470,4 +470,4 @@ cat(" ✓ Results CSV (", result_dataframe_id, ")\n", sep = "") cat(" ✓ 24h plot (", file_id_24h, ")\n", sep = "") cat(" ✓ 48h plot (", file_id_48h, ")\n", sep = "") cat("\nView your analysis at:\n") -cat(" https://", subdomain, ".benchling.com/analyses/", analysis_id, "\n", sep = "") +cat(" https://", base_domain, "/analyses/", analysis_id, "\n", sep = "") From e16d98728063ffcdba78d780680fca27f817bb82 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 20:53:58 -0400 Subject: [PATCH 30/36] Require full domain in .Renviron for OAuth2 to avoid confusion Updated documentation to always require full domain (tenant.benchling.com or tenant.bnchdev.org) for BENCHLING_TENANT_SUBDOMAIN. This is clearer than allowing just 'tenant' since users may not be aware of all possible domain suffixes. Examples now show only full domain format. --- .Renviron.example | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.Renviron.example b/.Renviron.example index fc5870c..8a8463e 100644 --- a/.Renviron.example +++ b/.Renviron.example @@ -23,9 +23,18 @@ # Prerequisites: # 1. Create Benchling App: https://docs.benchling.com/docs/getting-started-benchling-apps # 2. Grant permissions: analyses, data-frames, files (read/write) -# 3. Uncomment OAuth2 code blocks in get_dataframe.R and app.R +# 3. Set USE_OAUTH2 <- TRUE in get_dataframe.R (line 12) and app.R (line 17) # # Then set these values: # BENCHLING_CLIENT_ID=your_client_id_here # BENCHLING_CLIENT_SECRET=your_client_secret_here -# BENCHLING_TENANT_SUBDOMAIN=your_subdomain +# +# IMPORTANT: BENCHLING_TENANT_SUBDOMAIN must be the FULL domain: +# - Production: tenant.benchling.com +# - Development: tenant.bnchdev.org +# +# Examples: +# BENCHLING_TENANT_SUBDOMAIN=acme.benchling.com # Production +# BENCHLING_TENANT_SUBDOMAIN=acme.bnchdev.org # Development +# +# BENCHLING_TENANT_SUBDOMAIN=your_tenant.benchling.com From 5c1133e1113648640a2272fd9232aaadcf333701 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 20:57:08 -0400 Subject: [PATCH 31/36] Simplify OAuth2 config to use BENCHLING_DOMAIN instead of BENCHLING_TENANT_SUBDOMAIN Renamed environment variable from BENCHLING_TENANT_SUBDOMAIN to BENCHLING_DOMAIN for clarity. Now OAuth2 setup simply requires: BENCHLING_DOMAIN=your_tenant.benchling.com Changes: - .Renviron.example: Updated to use BENCHLING_DOMAIN, removed dev examples - get_dataframe.R: Read from BENCHLING_DOMAIN, simplified domain logic - app.R: Read from BENCHLING_DOMAIN, simplified token URL generation Users with dev domains will know to substitute their domain (e.g., tenant.bnchdev.org). --- .Renviron.example | 11 +---------- app.R | 34 ++++++++++++++-------------------- get_dataframe.R | 20 ++++++-------------- 3 files changed, 21 insertions(+), 44 deletions(-) diff --git a/.Renviron.example b/.Renviron.example index 8a8463e..1502854 100644 --- a/.Renviron.example +++ b/.Renviron.example @@ -28,13 +28,4 @@ # Then set these values: # BENCHLING_CLIENT_ID=your_client_id_here # BENCHLING_CLIENT_SECRET=your_client_secret_here -# -# IMPORTANT: BENCHLING_TENANT_SUBDOMAIN must be the FULL domain: -# - Production: tenant.benchling.com -# - Development: tenant.bnchdev.org -# -# Examples: -# BENCHLING_TENANT_SUBDOMAIN=acme.benchling.com # Production -# BENCHLING_TENANT_SUBDOMAIN=acme.bnchdev.org # Development -# -# BENCHLING_TENANT_SUBDOMAIN=your_tenant.benchling.com +# BENCHLING_DOMAIN=your_tenant.benchling.com diff --git a/app.R b/app.R index 9b1c592..bd3c5d1 100644 --- a/app.R +++ b/app.R @@ -21,10 +21,10 @@ USE_OAUTH2 <- FALSE # Set to FALSE for JWT (default), TRUE for OAuth2 if (USE_OAUTH2) { client_id <- Sys.getenv("BENCHLING_CLIENT_ID") client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") - subdomain_fixed <- Sys.getenv("BENCHLING_TENANT_SUBDOMAIN") + domain_fixed <- Sys.getenv("BENCHLING_DOMAIN") - if (client_id == "" || client_secret == "" || subdomain_fixed == "") { - stop("OAuth2 enabled but credentials missing! Set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_TENANT_SUBDOMAIN in .Renviron") + if (client_id == "" || client_secret == "" || domain_fixed == "") { + stop("OAuth2 enabled but credentials missing! Set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_DOMAIN in .Renviron") } } ################################################################################ @@ -68,21 +68,21 @@ server <- function(input, output) { base_domain <- reactive({ if (USE_OAUTH2) { # OAuth2: use domain from credentials - domain_fixed <- subdomain_fixed + domain_fixed } else { # JWT: extract from analysis key split_key <- strsplit(input$DatasetKey, ".", fixed = TRUE) payload <- jsonlite::fromJSON(rawToChar(base64decode(split_key[[1]][2]))) - domain_fixed <- payload$aud - } + domain_raw <- payload$aud - # Determine if this is a full domain or just a subdomain - if (grepl("\\.", domain_fixed)) { - # Contains a dot - it's a full domain, use as-is - domain_fixed - } else { - # No dot - it's just a subdomain, append .benchling.com - paste0(domain_fixed, ".benchling.com") + # Determine if this is a full domain or just a subdomain + if (grepl("\\.", domain_raw)) { + # Contains a dot - it's a full domain, use as-is + domain_raw + } else { + # No dot - it's just a subdomain, append .benchling.com + paste0(domain_raw, ".benchling.com") + } } }) @@ -101,13 +101,7 @@ server <- function(input, output) { # Get access token based on auth method if (USE_OAUTH2) { # OAuth2: Generate token from app credentials - # Determine full domain for token URL - oauth_domain <- if (grepl("\\.", subdomain_fixed)) { - subdomain_fixed # Already a full domain - } else { - paste0(subdomain_fixed, ".benchling.com") # Just subdomain, add suffix - } - token_url <- paste0("https://", oauth_domain, "/api/v2/token") + token_url <- paste0("https://", domain_fixed, "/api/v2/token") token_request <- httr::POST( url = token_url, body = paste0("client_id=", client_id, diff --git a/get_dataframe.R b/get_dataframe.R index e0a3154..7771be7 100644 --- a/get_dataframe.R +++ b/get_dataframe.R @@ -15,10 +15,10 @@ USE_OAUTH2 <- FALSE # Set to FALSE for JWT (default), TRUE for OAuth2 if (USE_OAUTH2) { client_id <- Sys.getenv("BENCHLING_CLIENT_ID") client_secret <- Sys.getenv("BENCHLING_CLIENT_SECRET") - subdomain_fixed <- Sys.getenv("BENCHLING_TENANT_SUBDOMAIN") + domain_fixed <- Sys.getenv("BENCHLING_DOMAIN") - if (client_id == "" || client_secret == "" || subdomain_fixed == "") { - stop("OAuth2 enabled but credentials missing! Set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_TENANT_SUBDOMAIN in .Renviron") + if (client_id == "" || client_secret == "" || domain_fixed == "") { + stop("OAuth2 enabled but credentials missing! Set BENCHLING_CLIENT_ID, BENCHLING_CLIENT_SECRET, and BENCHLING_DOMAIN in .Renviron") } } ################################################################################ @@ -73,17 +73,9 @@ tryCatch({ analysis_id <- key_parts[1] if (USE_OAUTH2) { - # OAuth2: Extract domain from credentials, generate new token - # Determine if this is a full domain or just a subdomain - if (grepl("\\.", subdomain_fixed)) { - # Contains a dot - it's a full domain, use as-is - base_domain <- subdomain_fixed - subdomain <- sub("\\..*", "", subdomain_fixed) # Extract first part for display - } else { - # No dot - it's just a subdomain, append .benchling.com - subdomain <- subdomain_fixed - base_domain <- paste0(subdomain_fixed, ".benchling.com") - } + # OAuth2: Use domain from credentials, generate new token + base_domain <- domain_fixed + subdomain <- sub("\\..*", "", domain_fixed) # Extract first part for display cat("✓ Analysis key parsed successfully\n") cat(" Analysis ID:", analysis_id, "\n") From 5e33acca9e6994725bc9a62951104b50ab62b43d Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 21:24:29 -0400 Subject: [PATCH 32/36] Simplify column names and use actual cell names from data Updated sample data and all scripts to use simpler column names: - Cell (was: Cell.Line.Name) - Concentration (was: Cell.Mortality.Concentration) - Mortality 24h (was: Cell.Mortality.Mortality.24h) - Mortality 48h (was: Cell.Mortality.Mortality.48h) Changes: - examples/sample_ic50_data.csv: Added Cell column (CHO-B-002), simplified column names - examples/local_test.R: Updated to use new column names, extract cell name from data - results_analysis.R: Updated to use new column names, extract cell name from Cell column - app.R: Updated column patterns to match new names, extract cell name from data Results dataframes now use actual cell names from the Cell column instead of hardcoded "Cell Line" or "Unknown" values. --- app.R | 9 +++---- examples/local_test.R | 25 +++++++++++--------- examples/sample_ic50_data.csv | 44 +++++++++++++++++------------------ results_analysis.R | 30 +++++++++++------------- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/app.R b/app.R index bd3c5d1..2271fb3 100644 --- a/app.R +++ b/app.R @@ -165,10 +165,10 @@ server <- function(input, output) { conc_col <- grep("^Concentration$|Cell\\.Mortality\\.Concentration", names(df), ignore.case = TRUE, value = TRUE)[1] - # Find mortality columns - mort_24h_col <- grep("Mortality\\.24h|Mortality.24h", + # Find mortality columns (matches "Mortality 24h", "Mortality.24h", or "Cell.Mortality.Mortality.24h") + mort_24h_col <- grep("Mortality[\\. ]24h", names(df), ignore.case = TRUE, value = TRUE)[1] - mort_48h_col <- grep("Mortality\\.48h|Mortality.48h", + mort_48h_col <- grep("Mortality[\\. ]48h", names(df), ignore.case = TRUE, value = TRUE)[1] # Calculate IC50 for 24h using utility function @@ -244,7 +244,8 @@ server <- function(input, output) { fileID_48 <- upload_file(File_48, imageName_48, folder_id, access_token, isolate(base_domain())) # Create and upload CSV results - Cell <- rep("Cell Line", 2) + cell_name <- unique(df$Cell)[1] + Cell <- rep(cell_name, 2) Hours <- c(24, 48) Function <- c('LL.4', 'LL.4') IC50 <- c(IC50_24, IC50_48) diff --git a/examples/local_test.R b/examples/local_test.R index c355663..cc12d49 100644 --- a/examples/local_test.R +++ b/examples/local_test.R @@ -44,8 +44,9 @@ if (file.exists("sample_ic50_data.csv")) { } cat("✓ Data loaded successfully\n") +cat(" Cell line:", unique(df$Cell)[1], "\n") cat(" Observations:", nrow(df), "\n") -cat(" Concentration range:", min(df$Cell.Mortality.Concentration), "-", max(df$Cell.Mortality.Concentration), "µg/ml\n") +cat(" Concentration range:", min(df$Concentration), "-", max(df$Concentration), "µg/ml\n") cat(" Columns:", paste(names(df), collapse = ", "), "\n\n") # Display first few rows to understand the data structure @@ -71,8 +72,8 @@ cat(" Estimating: IC50 and Slope\n\n") cat("Calculating 24h IC50...\n") result_24h <- calculate_ic50( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h" + concentration_col = "Concentration", + mortality_col = "Mortality 24h" ) cat("✓ 24h IC50 calculation complete!\n\n") @@ -80,8 +81,8 @@ cat("✓ 24h IC50 calculation complete!\n\n") cat("Calculating 48h IC50...\n") result_48h <- calculate_ic50( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.48h" + concentration_col = "Concentration", + mortality_col = "Mortality 48h" ) cat("✓ 48h IC50 calculation complete!\n\n") @@ -142,11 +143,11 @@ if (basename(getwd()) == "examples") { cat(" Creating 24h plot...\n") plot_24h <- create_ic50_plot( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h", + concentration_col = "Concentration", + mortality_col = "Mortality 24h", ic50_value = result_24h$ic50, slope = result_24h$slope, - title = "IC50 Dose-Response Curve - 24h (Local Test)" + title = paste0("IC50 Dose-Response Curve - 24h (", unique(df$Cell)[1], ")") ) saveWidget(plot_24h, output_file_24h, selfcontained = TRUE) cat(" ✓ 24h plot saved to:", output_file_24h, "\n") @@ -155,11 +156,11 @@ cat(" ✓ 24h plot saved to:", output_file_24h, "\n") cat(" Creating 48h plot...\n") plot_48h <- create_ic50_plot( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.48h", + concentration_col = "Concentration", + mortality_col = "Mortality 48h", ic50_value = result_48h$ic50, slope = result_48h$slope, - title = "IC50 Dose-Response Curve - 48h (Local Test)" + title = paste0("IC50 Dose-Response Curve - 48h (", unique(df$Cell)[1], ")") ) saveWidget(plot_48h, output_file_48h, selfcontained = TRUE) cat(" ✓ 48h plot saved to:", output_file_48h, "\n\n") @@ -172,7 +173,9 @@ cat("STEP 4: Creating results summary...\n") # Create a dataframe with the key results from both timepoints # This format is useful for reporting or further analysis +cell_name <- unique(df$Cell)[1] summary_df <- data.frame( + Cell = rep(cell_name, 10), Timepoint = c("24h", "24h", "24h", "24h", "24h", "48h", "48h", "48h", "48h", "48h"), Parameter = rep(c("IC50", "Slope", "Std Error", "t-value", "p-value"), 2), Value = c(result_24h$ic50, result_24h$slope, result_24h$std_error, result_24h$t_value, result_24h$p_value, diff --git a/examples/sample_ic50_data.csv b/examples/sample_ic50_data.csv index 4891163..5af1c3a 100644 --- a/examples/sample_ic50_data.csv +++ b/examples/sample_ic50_data.csv @@ -1,22 +1,22 @@ -Cell.Mortality.Concentration,Cell.Mortality.Mortality.24h,Cell.Mortality.Mortality.48h -0.3,3.979,2.192 -1,17.07,16.345 -3,18.356,42.458 -10,25.288,57.408 -30,54.813,70.365 -100,76.379,81.727 -300,81.514,85.11 -0.3,4.4929,5.382 -1,9.114,16.141 -3,10.141,41.06 -10,24.261,57.408 -30,51.732,67.774 -100,67.651,83.3189 -300,82.028,84.31 -0.3,8.383,2.280 -1,16.338,14.755 -3,15.5688,38.698 -10,25.577,54.996 -30,57.399,68.879 -100,77.67,80.952 -300,82.0359,83.367 \ No newline at end of file +Cell,Concentration,Mortality 24h,Mortality 48h +CHO-B-002,0.3,3.979,2.192 +CHO-B-002,1,17.07,16.345 +CHO-B-002,3,18.356,42.458 +CHO-B-002,10,25.288,57.408 +CHO-B-002,30,54.813,70.365 +CHO-B-002,100,76.379,81.727 +CHO-B-002,300,81.514,85.11 +CHO-B-002,0.3,4.4929,5.382 +CHO-B-002,1,9.114,16.141 +CHO-B-002,3,10.141,41.06 +CHO-B-002,10,24.261,57.408 +CHO-B-002,30,51.732,67.774 +CHO-B-002,100,67.651,83.3189 +CHO-B-002,300,82.028,84.31 +CHO-B-002,0.3,8.383,2.280 +CHO-B-002,1,16.338,14.755 +CHO-B-002,3,15.5688,38.698 +CHO-B-002,10,25.577,54.996 +CHO-B-002,30,57.399,68.879 +CHO-B-002,100,77.67,80.952 +CHO-B-002,300,82.0359,83.367 \ No newline at end of file diff --git a/results_analysis.R b/results_analysis.R index 2666b5e..4602b4e 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -40,7 +40,7 @@ if (!dir.exists(tmp_dir)) { } # Verify required columns exist -required_cols <- c("Cell.Mortality.Concentration", "Cell.Mortality.Mortality.24h", "Cell.Mortality.Mortality.48h") +required_cols <- c("Cell", "Concentration", "Mortality 24h", "Mortality 48h") missing_cols <- required_cols[!required_cols %in% names(df)] if (length(missing_cols) > 0) { @@ -59,8 +59,8 @@ cat("Calculating IC50 for 24h data...\n") result_24h <- calculate_ic50( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h" + concentration_col = "Concentration", + mortality_col = "Mortality 24h" ) cat("✓ 24h IC50 calculation complete\n") @@ -71,8 +71,8 @@ cat("Calculating IC50 for 48h data...\n") result_48h <- calculate_ic50( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.48h" + concentration_col = "Concentration", + mortality_col = "Mortality 48h" ) cat("✓ 48h IC50 calculation complete\n") @@ -85,12 +85,8 @@ cat(" Slope:", result_48h$slope, "\n\n") cat("Preparing results dataframe...\n") -# Extract cell line name (use first value, or default if not present) -cell_line <- if ("Cell.Line.Name" %in% names(df)) { - df$Cell.Line.Name[1] -} else { - "Unknown" -} +# Extract cell line name from Cell column +cell_line <- unique(df$Cell)[1] # Create dataframe with both 24h and 48h results csv_df <- data.frame( @@ -211,11 +207,11 @@ image_file_48h <- file.path(tmp_dir, image_name_48h) # Create 24h plot plot_24h <- create_ic50_plot( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.24h", + concentration_col = "Concentration", + mortality_col = "Mortality 24h", ic50_value = result_24h$ic50, slope = result_24h$slope, - title = "IC50 Dose-Response Curve - 24h" + title = paste0("IC50 Dose-Response Curve - 24h (", cell_line, ")") ) # Save 24h plot @@ -230,11 +226,11 @@ cat("✓ 24h plot created and saved locally\n") # Create 48h plot plot_48h <- create_ic50_plot( df, - concentration_col = "Cell.Mortality.Concentration", - mortality_col = "Cell.Mortality.Mortality.48h", + concentration_col = "Concentration", + mortality_col = "Mortality 48h", ic50_value = result_48h$ic50, slope = result_48h$slope, - title = "IC50 Dose-Response Curve - 48h" + title = paste0("IC50 Dose-Response Curve - 48h (", cell_line, ")") ) # Save 48h plot From 0e0aa1e71331a2c0afe7a7edc4af850b11b0c8c4 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 21:31:01 -0400 Subject: [PATCH 33/36] Fix column names to use dots instead of spaces R's read.csv() automatically converts spaces to dots in column names. Changed all scripts to use 'Mortality.24h' and 'Mortality.48h' instead of 'Mortality 24h' and 'Mortality 48h'. Changes: - examples/local_test.R: Use Mortality.24h and Mortality.48h - results_analysis.R: Use Mortality.24h and Mortality.48h - app.R: Simplified regex to match Mortality.24h format CSV file still uses spaces ('Mortality 24h') which is more readable, but R converts them to dots when reading. --- app.R | 6 +++--- examples/local_test.R | 8 ++++---- results_analysis.R | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app.R b/app.R index 2271fb3..c11f81c 100644 --- a/app.R +++ b/app.R @@ -165,10 +165,10 @@ server <- function(input, output) { conc_col <- grep("^Concentration$|Cell\\.Mortality\\.Concentration", names(df), ignore.case = TRUE, value = TRUE)[1] - # Find mortality columns (matches "Mortality 24h", "Mortality.24h", or "Cell.Mortality.Mortality.24h") - mort_24h_col <- grep("Mortality[\\. ]24h", + # Find mortality columns (matches "Mortality.24h" or "Cell.Mortality.Mortality.24h") + mort_24h_col <- grep("Mortality\\.24h", names(df), ignore.case = TRUE, value = TRUE)[1] - mort_48h_col <- grep("Mortality[\\. ]48h", + mort_48h_col <- grep("Mortality\\.48h", names(df), ignore.case = TRUE, value = TRUE)[1] # Calculate IC50 for 24h using utility function diff --git a/examples/local_test.R b/examples/local_test.R index cc12d49..b792b26 100644 --- a/examples/local_test.R +++ b/examples/local_test.R @@ -73,7 +73,7 @@ cat("Calculating 24h IC50...\n") result_24h <- calculate_ic50( df, concentration_col = "Concentration", - mortality_col = "Mortality 24h" + mortality_col = "Mortality.24h" ) cat("✓ 24h IC50 calculation complete!\n\n") @@ -82,7 +82,7 @@ cat("Calculating 48h IC50...\n") result_48h <- calculate_ic50( df, concentration_col = "Concentration", - mortality_col = "Mortality 48h" + mortality_col = "Mortality.48h" ) cat("✓ 48h IC50 calculation complete!\n\n") @@ -144,7 +144,7 @@ cat(" Creating 24h plot...\n") plot_24h <- create_ic50_plot( df, concentration_col = "Concentration", - mortality_col = "Mortality 24h", + mortality_col = "Mortality.24h", ic50_value = result_24h$ic50, slope = result_24h$slope, title = paste0("IC50 Dose-Response Curve - 24h (", unique(df$Cell)[1], ")") @@ -157,7 +157,7 @@ cat(" Creating 48h plot...\n") plot_48h <- create_ic50_plot( df, concentration_col = "Concentration", - mortality_col = "Mortality 48h", + mortality_col = "Mortality.48h", ic50_value = result_48h$ic50, slope = result_48h$slope, title = paste0("IC50 Dose-Response Curve - 48h (", unique(df$Cell)[1], ")") diff --git a/results_analysis.R b/results_analysis.R index 4602b4e..05893dc 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -40,7 +40,7 @@ if (!dir.exists(tmp_dir)) { } # Verify required columns exist -required_cols <- c("Cell", "Concentration", "Mortality 24h", "Mortality 48h") +required_cols <- c("Cell", "Concentration", "Mortality.24h", "Mortality.48h") missing_cols <- required_cols[!required_cols %in% names(df)] if (length(missing_cols) > 0) { @@ -60,7 +60,7 @@ cat("Calculating IC50 for 24h data...\n") result_24h <- calculate_ic50( df, concentration_col = "Concentration", - mortality_col = "Mortality 24h" + mortality_col = "Mortality.24h" ) cat("✓ 24h IC50 calculation complete\n") @@ -72,7 +72,7 @@ cat("Calculating IC50 for 48h data...\n") result_48h <- calculate_ic50( df, concentration_col = "Concentration", - mortality_col = "Mortality 48h" + mortality_col = "Mortality.48h" ) cat("✓ 48h IC50 calculation complete\n") @@ -208,7 +208,7 @@ image_file_48h <- file.path(tmp_dir, image_name_48h) plot_24h <- create_ic50_plot( df, concentration_col = "Concentration", - mortality_col = "Mortality 24h", + mortality_col = "Mortality.24h", ic50_value = result_24h$ic50, slope = result_24h$slope, title = paste0("IC50 Dose-Response Curve - 24h (", cell_line, ")") @@ -227,7 +227,7 @@ cat("✓ 24h plot created and saved locally\n") plot_48h <- create_ic50_plot( df, concentration_col = "Concentration", - mortality_col = "Mortality 48h", + mortality_col = "Mortality.48h", ic50_value = result_48h$ic50, slope = result_48h$slope, title = paste0("IC50 Dose-Response Curve - 48h (", cell_line, ")") From c7e6b41777f969042cfb137685d796a2f5f7ff3f Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Thu, 2 Apr 2026 21:39:16 -0400 Subject: [PATCH 34/36] Rename Cell column to Cell Name in CSV and code Changed column header from 'Cell' to 'Cell Name' for better clarity. Changes: - examples/sample_ic50_data.csv: Renamed 'Cell' to 'Cell Name' - examples/local_test.R: Updated references from df$Cell to df$Cell.Name - results_analysis.R: Updated required_cols and cell line extraction to use Cell.Name - app.R: Updated cell name extraction to use df$Cell.Name Note: R converts 'Cell Name' (space) to 'Cell.Name' (dot) when reading CSV. --- app.R | 2 +- examples/local_test.R | 10 +++++----- examples/sample_ic50_data.csv | 2 +- results_analysis.R | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app.R b/app.R index c11f81c..76979a7 100644 --- a/app.R +++ b/app.R @@ -244,7 +244,7 @@ server <- function(input, output) { fileID_48 <- upload_file(File_48, imageName_48, folder_id, access_token, isolate(base_domain())) # Create and upload CSV results - cell_name <- unique(df$Cell)[1] + cell_name <- unique(df$Cell.Name)[1] Cell <- rep(cell_name, 2) Hours <- c(24, 48) Function <- c('LL.4', 'LL.4') diff --git a/examples/local_test.R b/examples/local_test.R index b792b26..2650452 100644 --- a/examples/local_test.R +++ b/examples/local_test.R @@ -44,7 +44,7 @@ if (file.exists("sample_ic50_data.csv")) { } cat("✓ Data loaded successfully\n") -cat(" Cell line:", unique(df$Cell)[1], "\n") +cat(" Cell line:", unique(df$Cell.Name)[1], "\n") cat(" Observations:", nrow(df), "\n") cat(" Concentration range:", min(df$Concentration), "-", max(df$Concentration), "µg/ml\n") cat(" Columns:", paste(names(df), collapse = ", "), "\n\n") @@ -147,7 +147,7 @@ plot_24h <- create_ic50_plot( mortality_col = "Mortality.24h", ic50_value = result_24h$ic50, slope = result_24h$slope, - title = paste0("IC50 Dose-Response Curve - 24h (", unique(df$Cell)[1], ")") + title = paste0("IC50 Dose-Response Curve - 24h (", unique(df$Cell.Name)[1], ")") ) saveWidget(plot_24h, output_file_24h, selfcontained = TRUE) cat(" ✓ 24h plot saved to:", output_file_24h, "\n") @@ -160,7 +160,7 @@ plot_48h <- create_ic50_plot( mortality_col = "Mortality.48h", ic50_value = result_48h$ic50, slope = result_48h$slope, - title = paste0("IC50 Dose-Response Curve - 48h (", unique(df$Cell)[1], ")") + title = paste0("IC50 Dose-Response Curve - 48h (", unique(df$Cell.Name)[1], ")") ) saveWidget(plot_48h, output_file_48h, selfcontained = TRUE) cat(" ✓ 48h plot saved to:", output_file_48h, "\n\n") @@ -173,9 +173,9 @@ cat("STEP 4: Creating results summary...\n") # Create a dataframe with the key results from both timepoints # This format is useful for reporting or further analysis -cell_name <- unique(df$Cell)[1] +cell_name <- unique(df$Cell.Name)[1] summary_df <- data.frame( - Cell = rep(cell_name, 10), + Cell.Name = rep(cell_name, 10), Timepoint = c("24h", "24h", "24h", "24h", "24h", "48h", "48h", "48h", "48h", "48h"), Parameter = rep(c("IC50", "Slope", "Std Error", "t-value", "p-value"), 2), Value = c(result_24h$ic50, result_24h$slope, result_24h$std_error, result_24h$t_value, result_24h$p_value, diff --git a/examples/sample_ic50_data.csv b/examples/sample_ic50_data.csv index 5af1c3a..bdaf5a4 100644 --- a/examples/sample_ic50_data.csv +++ b/examples/sample_ic50_data.csv @@ -1,4 +1,4 @@ -Cell,Concentration,Mortality 24h,Mortality 48h +Cell Name,Concentration,Mortality 24h,Mortality 48h CHO-B-002,0.3,3.979,2.192 CHO-B-002,1,17.07,16.345 CHO-B-002,3,18.356,42.458 diff --git a/results_analysis.R b/results_analysis.R index 05893dc..bb8abe9 100644 --- a/results_analysis.R +++ b/results_analysis.R @@ -40,7 +40,7 @@ if (!dir.exists(tmp_dir)) { } # Verify required columns exist -required_cols <- c("Cell", "Concentration", "Mortality.24h", "Mortality.48h") +required_cols <- c("Cell.Name", "Concentration", "Mortality.24h", "Mortality.48h") missing_cols <- required_cols[!required_cols %in% names(df)] if (length(missing_cols) > 0) { @@ -85,8 +85,8 @@ cat(" Slope:", result_48h$slope, "\n\n") cat("Preparing results dataframe...\n") -# Extract cell line name from Cell column -cell_line <- unique(df$Cell)[1] +# Extract cell line name from Cell.Name column +cell_line <- unique(df$Cell.Name)[1] # Create dataframe with both 24h and 48h results csv_df <- data.frame( From c9f7e1dcd03899eb8aa7e28359a1b86d3b740abb Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Fri, 3 Apr 2026 15:43:04 -0400 Subject: [PATCH 35/36] Fix plotly fitted curve to show lines only without markers Removed the problematic 'marker = list(size = 0)' configuration from the fitted curve trace. This was causing plotly to add markers even with size=0. The plot now correctly shows: - Observed data points: Blue dots (markers only) - Fitted curve: Red line (no markers) This eliminates the warning 'A marker object has been specified, but markers is not in the mode' and removes the unwanted orange markers on the fitted line. --- utils.R | 1 - 1 file changed, 1 deletion(-) diff --git a/utils.R b/utils.R index aa2a437..9852edc 100644 --- a/utils.R +++ b/utils.R @@ -223,7 +223,6 @@ create_ic50_plot <- function(df, concentration_col, mortality_col, color = 'rgba(200, 50, 50, 0.8)', width = 2 ), - marker = list(size = 0), # Explicitly disable markers inherit = FALSE # Don't inherit data from previous trace ) From b67d7e0c9fa447da0ba788d617bb96b1309cf141 Mon Sep 17 00:00:00 2001 From: Phil Michaels Date: Fri, 3 Apr 2026 15:58:27 -0400 Subject: [PATCH 36/36] Add R Shiny to the app title so this is more obvious in a demonstration. --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index 76979a7..ddc3c7a 100644 --- a/app.R +++ b/app.R @@ -33,7 +33,7 @@ if (USE_OAUTH2) { ui <- fluidPage(theme = shinytheme("cerulean"), navbarPage( - "IC50 Calculation", + "R Shiny - IC50 Calc", tabPanel("Import Dataset",