├── .Rbuildignore ├── .Rprofile ├── .github ├── .gitignore ├── CONTRIBUTING.md ├── dependabot.yml └── workflows │ ├── R-CMD-check.yaml │ └── render-dashboard.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── DESCRIPTION ├── LICENSE ├── LICENSE.md ├── NAMESPACE ├── R ├── download_history.R └── take-snapshot.R ├── README.md ├── _pkgdown.yml ├── appveyor.yml ├── cransays.Rproj ├── man ├── download_history.Rd └── take_snapshot.Rd ├── renv.lock ├── renv ├── .gitignore ├── activate.R ├── settings.dcf └── settings.json └── vignettes ├── .gitignore ├── cran-diagram.png └── dashboard.Rmd /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^renv$ 2 | ^renv\.lock$ 3 | ^\.github$ 4 | ^CODE_OF_CONDUCT\.md$ 5 | ^tic\.R$ 6 | ^appveyor\.yml$ 7 | ^\.travis\.yml$ 8 | ^docs$ 9 | ^_pkgdown\.yml$ 10 | ^LICENSE\.md$ 11 | ^.*\.Rproj$ 12 | ^\.Rproj\.user$ 13 | -------------------------------------------------------------------------------- /.Rprofile: -------------------------------------------------------------------------------- 1 | source("renv/activate.R") 2 | -------------------------------------------------------------------------------- /.github/.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing guide 2 | 3 | ### Code of Conduct 4 | Anyone getting involved in this package agrees to our [Code of Conduct](../CODE_OF_CONDUCT.md). If someone is breaking the [Will Wheaton rule aka *Don't be a dick*](https://dontbeadickday.com/), or breaking the Code of Conduct, please let me know at steph@itsalocke.com or [keybase.io/stephlocke](https://keybase.io/stephlocke). 5 | 6 | ### Bug reports 7 | When you file a bug report, please spend some time making it easy for us to follow and reproduce. The more time you spend on making the bug report coherent, the more time we can dedicate to investigate the bug as opposed to the bug report. We recommend using [`reprex`](https://reprex.tidyverse.org/) when providing minimal examples. 8 | 9 | If you need a secure way to communicate with the maintainer of this package, message her via [her Keybase account](https://keybase.io/stephlocke). 10 | 11 | ### Ideas 12 | Got an idea for how we can improve the package? Awesome stuff! 13 | 14 | Please [raise it in the issue tracker](issues) with some succinct information on expected behaviour of the enhancement and why you think it'll improve the package. 15 | 16 | ### Package development 17 | We really want people to contribute to the package. A great way to start doing this is to look at the help wanted issues and/or contribute an example. 18 | 19 | 20 | ### Conventions 21 | We're relatively loose on coding conventions. 22 | 23 | - Datasets are lower-case with underscores between words 24 | - R code should be formatted with the "Reformat code" option in RStudio 25 | - There are no standards for base R plots 26 | - My preferred ggplot2 themes are `theme_minimal` where axes labels matter and `theme_void` when they do not but I'm OK with the default ggplot2 theming if you want to avoid writing longer ggplot2 code. 27 | 28 | New features should be accompanied by new unit tests. We're glad to help with that if you're new to testing! 29 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/R-CMD-check.yaml: -------------------------------------------------------------------------------- 1 | # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples 2 | # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help 3 | on: 4 | push: 5 | branches: [main, master] 6 | pull_request: 7 | 8 | name: R-CMD-check.yaml 9 | 10 | permissions: read-all 11 | 12 | jobs: 13 | R-CMD-check: 14 | runs-on: ubuntu-latest 15 | env: 16 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 17 | R_KEEP_PKG_SOURCE: yes 18 | steps: 19 | - uses: actions/checkout@v4 20 | 21 | - uses: r-lib/actions/setup-r@v2 22 | with: 23 | use-public-rspm: true 24 | 25 | - uses: r-lib/actions/setup-r-dependencies@v2 26 | with: 27 | extra-packages: any::rcmdcheck 28 | needs: check 29 | 30 | - uses: r-lib/actions/check-r-package@v2 31 | with: 32 | upload-snapshots: true 33 | build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")' 34 | -------------------------------------------------------------------------------- /.github/workflows/render-dashboard.yml: -------------------------------------------------------------------------------- 1 | on: 2 | push: 3 | branches: 4 | - master 5 | - main 6 | pull_request: 7 | branches: 8 | - master 9 | - main 10 | schedule: 11 | - cron: '0 * * * *' 12 | workflow_dispatch: 13 | 14 | name: Render-dashboard 15 | 16 | jobs: 17 | dashboarddown: 18 | name: Render-dashboard 19 | runs-on: ubuntu-latest 20 | env: 21 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 22 | steps: 23 | - uses: actions/checkout@v4 24 | 25 | - uses: r-lib/actions/setup-pandoc@v2 26 | 27 | - uses: r-lib/actions/setup-r@v2 28 | with: 29 | install-r: true 30 | use-public-rspm: true 31 | 32 | - uses: r-lib/actions/setup-renv@v2 33 | 34 | - name: Build site 35 | run: pkgdown::build_site_github_pages(new_process = FALSE, install = TRUE) 36 | shell: Rscript {0} 37 | 38 | - name: Upload artifact 39 | uses: actions/upload-pages-artifact@v3 40 | with: 41 | path: ./docs 42 | 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: latest-waitinglist-data 46 | retention-days: 5 47 | path: vignettes/cran-incoming-*.csv 48 | 49 | # Deployment job 50 | deploy: 51 | if: github.event_name != 'pull_request' 52 | environment: 53 | name: github-pages 54 | url: ${{ steps.deployment.outputs.page_url }} 55 | runs-on: ubuntu-latest 56 | needs: dashboarddown 57 | # Grant GITHUB_TOKEN the permissions required to make a Pages deployment 58 | permissions: 59 | pages: write # to deploy to Pages 60 | id-token: write # to verify the deployment originates from an appropriate source 61 | steps: 62 | - name: Deploy to GitHub Pages 63 | id: deployment 64 | uses: actions/deploy-pages@v4 65 | 66 | save-history: 67 | if: github.event_name != 'pull_request' 68 | needs: dashboarddown 69 | runs-on: ubuntu-latest 70 | steps: 71 | - uses: actions/checkout@v4 72 | with: 73 | ref: history 74 | 75 | - uses: actions/download-artifact@v4 76 | with: 77 | name: latest-waitinglist-data 78 | 79 | - name: Commit historical data 80 | run: | 81 | git config user.email "actions@github.com" 82 | git config user.name "GitHub Actions" 83 | git add cran-incoming-*.csv 84 | git commit -m 'new data' 85 | git pull --rebase 86 | git push 87 | echo "pushed to github" 88 | 89 | open-issue: 90 | needs: [dashboarddown, save-history] 91 | if: failure() && github.event_name == 'schedule' 92 | runs-on: ubuntu-latest 93 | env: 94 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 95 | steps: 96 | - uses: actions/checkout@v4 97 | 98 | - run: gh issue reopen 53 99 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | inst/doc 2 | .Rproj.user 3 | .Rhistory 4 | .RData 5 | .Ruserdata 6 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | As contributors and maintainers of this project, we pledge to respect all people who 4 | contribute through reporting issues, posting feature requests, updating documentation, 5 | submitting pull requests or patches, and other activities. 6 | 7 | We are committed to making participation in this project a harassment-free experience for 8 | everyone, regardless of level of experience, gender, gender identity and expression, 9 | sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion. 10 | 11 | Examples of unacceptable behavior by participants include the use of sexual language or 12 | imagery, derogatory comments or personal attacks, trolling, public or private harassment, 13 | insults, or other unprofessional conduct. 14 | 15 | Project maintainers have the right and responsibility to remove, edit, or reject comments, 16 | commits, code, wiki edits, issues, and other contributions that are not aligned to this 17 | Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed 18 | from the project team. 19 | 20 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by 21 | opening an issue or contacting one or more of the project maintainers. 22 | 23 | This Code of Conduct is adapted from the Contributor Covenant 24 | (https://www.contributor-covenant.org), version 1.0.0, available at 25 | https://contributor-covenant.org/version/1/0/0/. 26 | -------------------------------------------------------------------------------- /DESCRIPTION: -------------------------------------------------------------------------------- 1 | Package: cransays 2 | Title: Creates an Overview of CRAN Incoming Submissions 3 | Version: 0.0.0.9000 4 | Authors@R: c( 5 | person("Hugo", "Gruson", , "hugo.gruson+R@normalesup.org", role = c("cre", "aut"), 6 | comment = c(ORCID = "0000-0002-4094-1476")), 7 | person("Maëlle", "Salmon", role = c("aut", "ccp"), 8 | comment = c(ORCID = "0000-0002-2815-0399")), 9 | person("Locke Data", role = "fnd", 10 | comment = "https://itsalocke.com"), 11 | person("Stephanie", "Locke", , "steph@itsalocke.com", role = "aut", 12 | comment = c(ORCID = "0000-0002-2387-3723")), 13 | person("Mitchell", "O'Hara-Wild", role = "aut", 14 | comment = c(ORCID = "0000-0001-6729-7695")), 15 | person("Lluís", "Revilla Sancho", role = "aut", 16 | comment = c(ORCID = "0000-0001-9747-2570")), 17 | person("Jim", "Hester", role = "ctb", 18 | comment = c(ORCID = "0000-0002-2739-7082")), 19 | person("Hadley", "Wickham", role = "ctb", 20 | comment = c(ORCID = "0000-0003-4757-117X")) 21 | ) 22 | Description: It scrapes the CRAN incoming FTP folder to find where each 23 | submission is. 24 | License: MIT + file LICENSE 25 | URL: https://github.com/r-hub/cransays, https://r-hub.github.io/cransays/ 26 | BugReports: https://github.com/r-hub/cransays/issues 27 | Depends: 28 | R (>= 4.1.0) 29 | Imports: 30 | curl, 31 | dplyr, 32 | glue, 33 | lubridate, 34 | prettyunits, 35 | ps, 36 | purrr, 37 | reactable, 38 | tibble, 39 | tidyr, 40 | utils 41 | Suggests: 42 | knitr, 43 | pkgdown, 44 | rmarkdown 45 | VignetteBuilder: 46 | knitr 47 | Encoding: UTF-8 48 | LazyData: true 49 | RoxygenNote: 7.3.2 50 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2018 2 | COPYRIGHT HOLDER: Locke Data 3 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2018 Locke Data 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /NAMESPACE: -------------------------------------------------------------------------------- 1 | # Generated by roxygen2: do not edit by hand 2 | 3 | export(download_history) 4 | export(take_snapshot) 5 | importFrom(utils,download.file) 6 | importFrom(utils,read.csv) 7 | importFrom(utils,unzip) 8 | -------------------------------------------------------------------------------- /R/download_history.R: -------------------------------------------------------------------------------- 1 | 2 | #' Downloads history 3 | #' 4 | #' Downloads history of packages on the submission queue as recorded on github branch. 5 | #' 6 | #' For some periods github actions recording the data didn't run, 7 | #' so there are some periods with missing data. 8 | #' @return A `data.frame` with columns: 9 | #' - `package`: the package name 10 | #' - `version`: the package submitted version 11 | #' - `snapshot_time`: time of the \pkg{cransays} snapshot, in `"Europe/Vienna"` 12 | #' timezone, same, as the CRAN servers. 13 | #' - `folder`: folder where the submitted package is stored at the time of the 14 | #' snapshot 15 | #' - `subfolder`: subfolder where the submitted package is stored at the time of 16 | #' the snapshot 17 | #' - `submission_time`: time when the package was submitted to CRAN, in 18 | #' `"Europe/Vienna"` timezone, same as the CRAN servers 19 | #' 20 | #' @export 21 | #' @importFrom utils download.file read.csv unzip 22 | download_history <- function() { 23 | tmp_f <- tempfile(pattern = "cransays-history", fileext = ".zip") 24 | tmp_dir <- tempdir() 25 | download.file("https://github.com/r-hub/cransays/archive/history.zip", 26 | destfile = tmp_f) 27 | # We unzip the files 28 | dat <- unzip(tmp_f, exdir = tmp_dir, setTimes = TRUE) 29 | dat <- dat[endsWith(dat, ".csv")] 30 | 31 | # First two heading systems: 32 | # Header used 2020-09-12 till 2020-09-12 (15 hours) 33 | # Changed in 977a76f3eaa069270ae0f923e6357b3da691c218. 34 | incoming_1 <- dat[startsWith(basename(dat), "cran-incoming_-")] 35 | headers_1 <- lapply(incoming_1, read.csv, nrow = 1, header = FALSE) 36 | headers_1_length <- lengths(headers_1) 37 | header_1 <- lapply(incoming_1[headers_1_length == 11], read.csv) 38 | h1 <- do.call(rbind, header_1) 39 | # Header used 2020-09-12 till 2020-09-14 40 | # Changed in 55aa8ee7311143289e03d3f9bdc8cea8016bf208. 41 | # Removes the `submitted` column, which contains human readable time since 42 | # submission. 43 | header_2 <- lapply(incoming_1[headers_1_length == 10], read.csv) 44 | h2 <- do.call(rbind, header_2) 45 | h1[, setdiff(colnames(h2), colnames(h1))] <- NA 46 | h12 <- rbind(h1[, colnames(h2)], h2) 47 | 48 | # Stable heading system 1 49 | incoming_2 <- dat[grepl("^cran\\-incoming\\-[^v]", basename(dat))] 50 | headers_2 <- lapply(incoming_2, read.csv, nrow = 1, header = FALSE) 51 | headers_2_length <- lengths(headers_2) 52 | 53 | # De difference between headers are the length if they are reordered/rename 54 | # It might fail. 55 | # Header 3 from 2020-09-14 to 2022-02-14 56 | header_3 <- lapply(incoming_2[headers_2_length == 5], read.csv) 57 | h3 <- do.call(rbind, header_3) 58 | # Header 4 from 2022-02-14 onward. 59 | # Changed in 799f779d4b0004039b9f14a6fcdbe7a154c78a67. 60 | # Restores the `submission_time` column. 61 | header_4 <- lapply(incoming_2[headers_2_length == 6], read.csv) 62 | h4 <- do.call(rbind, header_4) 63 | h3[, setdiff(colnames(h4), colnames(h3))] <- NA 64 | h34 <- rbind(h3[, colnames(h4)], h4) 65 | 66 | 67 | h1234 <- rbind(h12[, colnames(h34)], h34) 68 | h1234$submission_time <- as.POSIXct(h1234$submission_time, tz = "UTC") 69 | attr(h1234$submission_time, "tzone") <- "Europe/Vienna" 70 | 71 | # Explicit versioning system. 72 | # Introduced in e2250076a123136e7d03dc840636e605d57bd468. 73 | v5 <- dat[grepl("^cran\\-incoming\\-v5-", basename(dat))] 74 | h5 <- do.call(rbind, lapply(v5, read.csv)) 75 | 76 | h_all <- rbind(h1234, h5) 77 | h_all$snapshot_time <- as.POSIXct(h_all$snapshot_time, tz = "Europe/Vienna") 78 | 79 | return(h_all) 80 | } -------------------------------------------------------------------------------- /R/take-snapshot.R: -------------------------------------------------------------------------------- 1 | base_ftp_url <- function(){ 2 | "ftp://cran.r-project.org/incoming/" 3 | } 4 | 5 | #' Take Snapshot of CRAN incoming folder 6 | #' 7 | #' @return A data.frame, one line per submission. 8 | #' @export 9 | #' 10 | take_snapshot <- function(){ 11 | # Map sub-folders within the 'incoming' folder ---------------------- 12 | incoming <- get_ftp_contents(base_ftp_url()) 13 | folders <- incoming[["V9"]] 14 | 15 | # Iterate through the mapped folders to extract contents ------------ 16 | cran_incoming <- 17 | paste0(base_ftp_url(), folders, "/") |> 18 | purrr::map_df(purrr::possibly(get_ftp_contents, NULL)) |> 19 | dplyr::bind_rows( 20 | incoming 21 | ) 22 | 23 | # one level more for humans 24 | # since they use subfolders 25 | cran_human <- setdiff( 26 | folders, 27 | c("archive", "inspect", "newbies", "pending", "pretest", "publish", "recheck", "waiting") 28 | ) 29 | human_folders <- cran_incoming |> 30 | dplyr::filter( 31 | subfolder %in% cran_human, 32 | startsWith(V1, "d") # only directories 33 | ) |> 34 | with(paste0(base_ftp_url(), subfolder, "/", V9, "/")) 35 | 36 | cran_incoming <- human_folders |> 37 | purrr::map_df(purrr::possibly(get_ftp_contents, NULL)) |> 38 | dplyr::bind_rows( 39 | cran_incoming 40 | ) |> 41 | dplyr::mutate( 42 | snapshot_time = as.POSIXct(format(Sys.time(), tz="Europe/Vienna")) 43 | ) 44 | 45 | # Tidy results ------------------------------------------------------ 46 | cran_incoming <- cran_incoming |> 47 | dplyr::filter(endsWith(V9, ".tar.gz")) |> # Remove non-package files 48 | dplyr::mutate( 49 | year = ifelse(grepl(":", V8, fixed = TRUE), format(snapshot_time, "%Y"), V8), 50 | time = ifelse(grepl(":", V8, fixed = TRUE), V8, "00:00"), 51 | package = sub("\\.tar\\.gz", "", V9), # Remove package extension 52 | submission_time = lubridate::parse_date_time(paste(year, V6, V7, time), 53 | "%Y %b %d %R", 54 | tz="Europe/Vienna"), 55 | submission_time = dplyr::if_else(as.numeric(snapshot_time - submission_time, units = "days") < 0, 56 | lubridate::parse_date_time(paste(as.numeric(as.character(year)) - 1, V6, V7, time), 57 | "%Y %b %d %R", 58 | tz="Europe/Vienna"), 59 | submission_time), 60 | howlongago = round(as.numeric(snapshot_time - submission_time, units = "days"), digits = 1) 61 | ) |> 62 | tidyr::separate(package, c("package", "version"), "_") |> 63 | tibble::as_tibble() 64 | 65 | cran_incoming <- dplyr::select(cran_incoming, 66 | - dplyr::starts_with("V", 67 | ignore.case = FALSE)) 68 | 69 | cran_incoming 70 | } 71 | 72 | # helper 73 | get_ftp_contents <- function(url){ 74 | # Read ftp table results 75 | res <- utils::read.table(curl::curl(url), 76 | stringsAsFactors = FALSE) 77 | 78 | # Add ftp subfolder info from url 79 | subfolder <- sub(base_ftp_url(), "", url, fixed = TRUE) 80 | res[["subfolder"]] <- substr(subfolder, 1, nchar(subfolder) - 1) 81 | res$V8 <- as.character(res$V8) 82 | res 83 | } 84 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # cransays 2 | 3 | 4 | [![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) 5 | ![Dashboard status](https://github.com/r-hub/cransays/workflows/Render-dashboard/badge.svg) 6 | [![R-CMD-check](https://github.com/r-hub/cransays/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/r-hub/cransays/actions/workflows/R-CMD-check.yaml) 7 | 8 | 9 | The goal of cransays is to scrape the [CRAN incoming ftp folder](ftp://cran.r-project.org/incoming/) to find where each of the submission is, and to 10 | make a [dashboard](https://r-hub.github.io/cransays/articles/dashboard.html). 11 | 12 | ## Installation 13 | 14 | ``` r 15 | remotes::install_github("r-hub/cransays") 16 | ``` 17 | 18 | ## Example 19 | 20 | This is a basic example : 21 | 22 | ``` r 23 | cran_incoming <- cransays::take_snapshot() 24 | ``` 25 | 26 | The vignette produces a [handy dashboard](https://r-hub.github.io/cransays/articles/dashboard.html) that we update every hour via [GitHub Actions](https://github.com/r-hub/cransays/actions). 27 | 28 | ## Historical data 29 | 30 | Hourly snapshots of the ftp server are saved in the [`history` branch](https://github.com/r-hub/cransays/tree/history), as part of our [rendering workflow](https://github.com/r-hub/cransays/blob/c54ec4bf7c05e9c91510176dd933d103b59a6779/.github/workflows/render-dashboard.yml#L48-L67). 31 | A short script to load this historical data as a `data.frame` is also provided in the package: 32 | 33 | ``` r 34 | historical_data <- cransays::download_history() 35 | ``` 36 | 37 | ## Related work 38 | 39 | * Code originally adapted from https://github.com/edgararuiz/cran-stages That repository features an interesting analysis of CRAN incoming folder, including a diagram of the process deducted from that analysis. 40 | 41 | * The [`foghorn` package](https://github.com/fmichonneau/foghorn), to summarize CRAN Check Results in the Terminal, provides an `foghorn::cran_incoming()` function to where your package stands in the CRAN incoming queue. 42 | 43 | * The [cransubs website](https://nx10.github.io/cransubs/) provides a similar dashboard by taking a completely different technical approach. Instead of downloading the queue data and rendering the dashboard as a static site, it fetches the data on the fly and as needed. It is particularly well suited if you wish more regular updates than the hourly schedule of cransays, but it doesn't provide [snapshots of historical data](#historical-data). 44 | 45 | * If you wanna increase the chance of a smooth submission, check out [this collaborative list of things to know before submitting to CRAN](https://github.com/ThinkR-open/prepare-for-cran). 46 | 47 | ## Contributing 48 | 49 | Wanna report a bug or suggest a feature? Great stuff! For more information on how to contribute check out [our contributing guide](.github/CONTRIBUTING.md). 50 | 51 | Please note that this R package is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this package project you agree to abide by its terms. 52 | 53 | -------------------------------------------------------------------------------- /_pkgdown.yml: -------------------------------------------------------------------------------- 1 | url: https://r-hub.github.io/cransays/ 2 | template: 3 | bootstrap: 5 4 | default_assets: false 5 | 6 | authors: 7 | Locke Data: 8 | href: "https://itsalocke.com/" 9 | html: "" 10 | 11 | 12 | navbar: 13 | title: ~ 14 | type: default 15 | left: 16 | - icon: fa-home fa-lg 17 | href: index.html 18 | - text: Reference 19 | href: reference/index.html 20 | - text: Dashboard 21 | href: articles/dashboard.html 22 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | # DO NOT CHANGE the "init" and "install" sections below 2 | 3 | # Download script file from GitHub 4 | init: 5 | ps: | 6 | $ErrorActionPreference = "Stop" 7 | Invoke-WebRequest http://raw.github.com/krlmlr/r-appveyor/master/scripts/appveyor-tool.ps1 -OutFile "..\appveyor-tool.ps1" 8 | Import-Module '..\appveyor-tool.ps1' 9 | 10 | install: 11 | - ps: Bootstrap 12 | - cmd: R -q -e "writeLines('options(repos = \'https://cloud.r-project.org\')', '~/.Rprofile')" 13 | - cmd: R -q -e "getOption('repos')" 14 | - cmd: R -q -e "install.packages('remotes'); remotes::install_github('ropenscilabs/tic'); tic::prepare_all_stages()" 15 | 16 | cache: 17 | - C:\RLibrary 18 | 19 | before_build: R -q -e "tic::before_install()" 20 | build_script: R -q -e "tic::install()" 21 | after_build: R -q -e "tic::after_install()" 22 | before_test: R -q -e "tic::before_script()" 23 | test_script: R -q -e "tic::script()" 24 | on_success: R -q -e "try(tic::after_success(), silent = TRUE)" 25 | on_failure: R -q -e "tic::after_failure()" 26 | before_deploy: R -q -e "tic::before_deploy()" 27 | deploy_script: R -q -e "tic::deploy()" 28 | after_deploy: R -q -e "tic::after_deploy()" 29 | on_finish: R -q -e "tic::after_script()" 30 | 31 | # Adapt as necessary starting from here 32 | 33 | #on_failure: 34 | # - 7z a failure.zip *.Rcheck\* 35 | # - appveyor PushArtifact failure.zip 36 | 37 | #environment: 38 | # GITHUB_PAT: 39 | # secure: VXO22OHLkl4YhVIomSMwCZyOTx03Xf2WICaVng9xH7gISlAg8a+qrt1DtFtk8sK5 40 | 41 | artifacts: 42 | - path: '*.Rcheck\**\*.log' 43 | name: Logs 44 | 45 | - path: '*.Rcheck\**\*.out' 46 | name: Logs 47 | 48 | - path: '*.Rcheck\**\*.fail' 49 | name: Logs 50 | 51 | - path: '*.Rcheck\**\*.Rout' 52 | name: Logs 53 | 54 | - path: '\*_*.tar.gz' 55 | name: Bits 56 | 57 | - path: '\*_*.zip' 58 | name: Bits 59 | -------------------------------------------------------------------------------- /cransays.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: Default 4 | SaveWorkspace: Default 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | StripTrailingWhitespace: Yes 16 | 17 | BuildType: Package 18 | PackageUseDevtools: Yes 19 | PackageInstallArgs: --no-multiarch --with-keep.source 20 | -------------------------------------------------------------------------------- /man/download_history.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/download_history.R 3 | \name{download_history} 4 | \alias{download_history} 5 | \title{Downloads history} 6 | \usage{ 7 | download_history() 8 | } 9 | \value{ 10 | A `data.frame` with columns: 11 | - `package`: the package name 12 | - `version`: the package submitted version 13 | - `snapshot_time`: time of the \pkg{cransays} snapshot, in `"Europe/Vienna"` 14 | timezone, same, as the CRAN servers. 15 | - `folder`: folder where the submitted package is stored at the time of the 16 | snapshot 17 | - `subfolder`: subfolder where the submitted package is stored at the time of 18 | the snapshot 19 | - `submission_time`: time when the package was submitted to CRAN, in 20 | `"Europe/Vienna"` timezone, same as the CRAN servers 21 | } 22 | \description{ 23 | Downloads history of packages on the submission queue as recorded on github branch. 24 | } 25 | \details{ 26 | For some periods github actions recording the data didn't run, 27 | so there are some periods with missing data. 28 | } 29 | -------------------------------------------------------------------------------- /man/take_snapshot.Rd: -------------------------------------------------------------------------------- 1 | % Generated by roxygen2: do not edit by hand 2 | % Please edit documentation in R/take-snapshot.R 3 | \name{take_snapshot} 4 | \alias{take_snapshot} 5 | \title{Take Snapshot of CRAN incoming folder} 6 | \usage{ 7 | take_snapshot() 8 | } 9 | \value{ 10 | A data.frame, one line per submission. 11 | } 12 | \description{ 13 | Take Snapshot of CRAN incoming folder 14 | } 15 | -------------------------------------------------------------------------------- /renv.lock: -------------------------------------------------------------------------------- 1 | { 2 | "R": { 3 | "Version": "4.6.0", 4 | "Repositories": [ 5 | { 6 | "Name": "P3M", 7 | "URL": "https://packagemanager.posit.co/cran/latest" 8 | }, 9 | { 10 | "Name": "CRAN", 11 | "URL": "https://cloud.r-project.org" 12 | } 13 | ] 14 | }, 15 | "Packages": { 16 | "R6": { 17 | "Package": "R6", 18 | "Version": "2.6.1", 19 | "Source": "Repository", 20 | "Title": "Encapsulated Classes with Reference Semantics", 21 | "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 22 | "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.", 23 | "License": "MIT + file LICENSE", 24 | "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", 25 | "BugReports": "https://github.com/r-lib/R6/issues", 26 | "Depends": [ 27 | "R (>= 3.6)" 28 | ], 29 | "Suggests": [ 30 | "lobstr", 31 | "testthat (>= 3.0.0)" 32 | ], 33 | "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark, scales", 34 | "Config/testthat/edition": "3", 35 | "Encoding": "UTF-8", 36 | "RoxygenNote": "7.3.2", 37 | "NeedsCompilation": "no", 38 | "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", 39 | "Maintainer": "Winston Chang ", 40 | "Repository": "RSPM" 41 | }, 42 | "askpass": { 43 | "Package": "askpass", 44 | "Version": "1.2.1", 45 | "Source": "Repository", 46 | "Type": "Package", 47 | "Title": "Password Entry Utilities for R, Git, and SSH", 48 | "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", 49 | "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.", 50 | "License": "MIT + file LICENSE", 51 | "URL": "https://r-lib.r-universe.dev/askpass", 52 | "BugReports": "https://github.com/r-lib/askpass/issues", 53 | "Encoding": "UTF-8", 54 | "Imports": [ 55 | "sys (>= 2.1)" 56 | ], 57 | "RoxygenNote": "7.2.3", 58 | "Suggests": [ 59 | "testthat" 60 | ], 61 | "Language": "en-US", 62 | "NeedsCompilation": "yes", 63 | "Author": "Jeroen Ooms [aut, cre] ()", 64 | "Maintainer": "Jeroen Ooms ", 65 | "Repository": "RSPM" 66 | }, 67 | "base64enc": { 68 | "Package": "base64enc", 69 | "Version": "0.1-3", 70 | "Source": "Repository", 71 | "Title": "Tools for base64 encoding", 72 | "Author": "Simon Urbanek ", 73 | "Maintainer": "Simon Urbanek ", 74 | "Depends": [ 75 | "R (>= 2.9.0)" 76 | ], 77 | "Enhances": [ 78 | "png" 79 | ], 80 | "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", 81 | "License": "GPL-2 | GPL-3", 82 | "URL": "http://www.rforge.net/base64enc", 83 | "NeedsCompilation": "yes", 84 | "Repository": "RSPM", 85 | "Encoding": "UTF-8" 86 | }, 87 | "brio": { 88 | "Package": "brio", 89 | "Version": "1.1.5", 90 | "Source": "Repository", 91 | "Title": "Basic R Input Output", 92 | "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 93 | "Description": "Functions to handle basic input output, these functions always read and write UTF-8 (8-bit Unicode Transformation Format) files and provide more explicit control over line endings.", 94 | "License": "MIT + file LICENSE", 95 | "URL": "https://brio.r-lib.org, https://github.com/r-lib/brio", 96 | "BugReports": "https://github.com/r-lib/brio/issues", 97 | "Depends": [ 98 | "R (>= 3.6)" 99 | ], 100 | "Suggests": [ 101 | "covr", 102 | "testthat (>= 3.0.0)" 103 | ], 104 | "Config/Needs/website": "tidyverse/tidytemplate", 105 | "Config/testthat/edition": "3", 106 | "Encoding": "UTF-8", 107 | "RoxygenNote": "7.2.3", 108 | "NeedsCompilation": "yes", 109 | "Author": "Jim Hester [aut] (), Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", 110 | "Maintainer": "Gábor Csárdi ", 111 | "Repository": "RSPM" 112 | }, 113 | "bslib": { 114 | "Package": "bslib", 115 | "Version": "0.9.0", 116 | "Source": "Repository", 117 | "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", 118 | "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\") )", 119 | "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.", 120 | "License": "MIT + file LICENSE", 121 | "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", 122 | "BugReports": "https://github.com/rstudio/bslib/issues", 123 | "Depends": [ 124 | "R (>= 2.10)" 125 | ], 126 | "Imports": [ 127 | "base64enc", 128 | "cachem", 129 | "fastmap (>= 1.1.1)", 130 | "grDevices", 131 | "htmltools (>= 0.5.8)", 132 | "jquerylib (>= 0.1.3)", 133 | "jsonlite", 134 | "lifecycle", 135 | "memoise (>= 2.0.1)", 136 | "mime", 137 | "rlang", 138 | "sass (>= 0.4.9)" 139 | ], 140 | "Suggests": [ 141 | "bsicons", 142 | "curl", 143 | "fontawesome", 144 | "future", 145 | "ggplot2", 146 | "knitr", 147 | "magrittr", 148 | "rappdirs", 149 | "rmarkdown (>= 2.7)", 150 | "shiny (> 1.8.1)", 151 | "testthat", 152 | "thematic", 153 | "tools", 154 | "utils", 155 | "withr", 156 | "yaml" 157 | ], 158 | "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", 159 | "Config/Needs/routine": "chromote, desc, renv", 160 | "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", 161 | "Config/testthat/edition": "3", 162 | "Config/testthat/parallel": "true", 163 | "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", 164 | "Encoding": "UTF-8", 165 | "RoxygenNote": "7.3.2", 166 | "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-dark-mode.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' 'tooltip.R' 'utils-deps.R' 'utils-shiny.R' 'utils-tags.R' 'value-box.R' 'version-default.R' 'versions.R'", 167 | "NeedsCompilation": "no", 168 | "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], Garrick Aden-Buie [aut] (), 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)", 169 | "Maintainer": "Carson Sievert ", 170 | "Repository": "RSPM" 171 | }, 172 | "cachem": { 173 | "Package": "cachem", 174 | "Version": "1.1.0", 175 | "Source": "Repository", 176 | "Title": "Cache R Objects with Automatic Pruning", 177 | "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.", 178 | "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", 179 | "License": "MIT + file LICENSE", 180 | "Encoding": "UTF-8", 181 | "ByteCompile": "true", 182 | "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", 183 | "Imports": [ 184 | "rlang", 185 | "fastmap (>= 1.2.0)" 186 | ], 187 | "Suggests": [ 188 | "testthat" 189 | ], 190 | "RoxygenNote": "7.2.3", 191 | "Config/Needs/routine": "lobstr", 192 | "Config/Needs/website": "pkgdown", 193 | "NeedsCompilation": "yes", 194 | "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", 195 | "Maintainer": "Winston Chang ", 196 | "Repository": "RSPM" 197 | }, 198 | "callr": { 199 | "Package": "callr", 200 | "Version": "3.7.6", 201 | "Source": "Repository", 202 | "Title": "Call R from R", 203 | "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-7098-9676\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = c(\"cph\", \"fnd\")) )", 204 | "Description": "It is sometimes useful to perform a computation in a separate R process, without affecting the current R process at all. This packages does exactly that.", 205 | "License": "MIT + file LICENSE", 206 | "URL": "https://callr.r-lib.org, https://github.com/r-lib/callr", 207 | "BugReports": "https://github.com/r-lib/callr/issues", 208 | "Depends": [ 209 | "R (>= 3.4)" 210 | ], 211 | "Imports": [ 212 | "processx (>= 3.6.1)", 213 | "R6", 214 | "utils" 215 | ], 216 | "Suggests": [ 217 | "asciicast (>= 2.3.1)", 218 | "cli (>= 1.1.0)", 219 | "mockery", 220 | "ps", 221 | "rprojroot", 222 | "spelling", 223 | "testthat (>= 3.2.0)", 224 | "withr (>= 2.3.0)" 225 | ], 226 | "Config/Needs/website": "r-lib/asciicast, glue, htmlwidgets, igraph, tibble, tidyverse/tidytemplate", 227 | "Config/testthat/edition": "3", 228 | "Encoding": "UTF-8", 229 | "Language": "en-US", 230 | "RoxygenNote": "7.3.1.9000", 231 | "NeedsCompilation": "no", 232 | "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]", 233 | "Maintainer": "Gábor Csárdi ", 234 | "Repository": "RSPM" 235 | }, 236 | "cli": { 237 | "Package": "cli", 238 | "Version": "3.6.4", 239 | "Source": "Repository", 240 | "Title": "Helpers for Developing Command Line Interfaces", 241 | "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\")) )", 242 | "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.", 243 | "License": "MIT + file LICENSE", 244 | "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", 245 | "BugReports": "https://github.com/r-lib/cli/issues", 246 | "Depends": [ 247 | "R (>= 3.4)" 248 | ], 249 | "Imports": [ 250 | "utils" 251 | ], 252 | "Suggests": [ 253 | "callr", 254 | "covr", 255 | "crayon", 256 | "digest", 257 | "glue (>= 1.6.0)", 258 | "grDevices", 259 | "htmltools", 260 | "htmlwidgets", 261 | "knitr", 262 | "methods", 263 | "processx", 264 | "ps (>= 1.3.4.9000)", 265 | "rlang (>= 1.0.2.9003)", 266 | "rmarkdown", 267 | "rprojroot", 268 | "rstudioapi", 269 | "testthat (>= 3.2.0)", 270 | "tibble", 271 | "whoami", 272 | "withr" 273 | ], 274 | "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", 275 | "Config/testthat/edition": "3", 276 | "Encoding": "UTF-8", 277 | "RoxygenNote": "7.3.2", 278 | "NeedsCompilation": "yes", 279 | "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]", 280 | "Maintainer": "Gábor Csárdi ", 281 | "Repository": "RSPM" 282 | }, 283 | "cpp11": { 284 | "Package": "cpp11", 285 | "Version": "0.5.2", 286 | "Source": "Repository", 287 | "Title": "A C++11 Interface for R's C Interface", 288 | "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\")) )", 289 | "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.", 290 | "License": "MIT + file LICENSE", 291 | "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", 292 | "BugReports": "https://github.com/r-lib/cpp11/issues", 293 | "Depends": [ 294 | "R (>= 4.0.0)" 295 | ], 296 | "Suggests": [ 297 | "bench", 298 | "brio", 299 | "callr", 300 | "cli", 301 | "covr", 302 | "decor", 303 | "desc", 304 | "ggplot2", 305 | "glue", 306 | "knitr", 307 | "lobstr", 308 | "mockery", 309 | "progress", 310 | "rmarkdown", 311 | "scales", 312 | "Rcpp", 313 | "testthat (>= 3.2.0)", 314 | "tibble", 315 | "utils", 316 | "vctrs", 317 | "withr" 318 | ], 319 | "VignetteBuilder": "knitr", 320 | "Config/Needs/website": "tidyverse/tidytemplate", 321 | "Config/testthat/edition": "3", 322 | "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", 323 | "Encoding": "UTF-8", 324 | "RoxygenNote": "7.3.2", 325 | "NeedsCompilation": "no", 326 | "Author": "Davis Vaughan [aut, cre] (), Jim Hester [aut] (), Romain François [aut] (), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", 327 | "Maintainer": "Davis Vaughan ", 328 | "Repository": "RSPM" 329 | }, 330 | "curl": { 331 | "Package": "curl", 332 | "Version": "6.2.2", 333 | "Source": "Repository", 334 | "Type": "Package", 335 | "Title": "A Modern and Flexible Web Client for R", 336 | "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\"))", 337 | "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.", 338 | "License": "MIT + file LICENSE", 339 | "SystemRequirements": "libcurl (>= 7.62): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", 340 | "URL": "https://jeroen.r-universe.dev/curl", 341 | "BugReports": "https://github.com/jeroen/curl/issues", 342 | "Suggests": [ 343 | "spelling", 344 | "testthat (>= 1.0.0)", 345 | "knitr", 346 | "jsonlite", 347 | "later", 348 | "rmarkdown", 349 | "httpuv (>= 1.4.4)", 350 | "webutils" 351 | ], 352 | "VignetteBuilder": "knitr", 353 | "Depends": [ 354 | "R (>= 3.0.0)" 355 | ], 356 | "RoxygenNote": "7.3.2.9000", 357 | "Encoding": "UTF-8", 358 | "Language": "en-US", 359 | "NeedsCompilation": "yes", 360 | "Author": "Jeroen Ooms [aut, cre] (), Hadley Wickham [ctb], Posit Software, PBC [cph]", 361 | "Maintainer": "Jeroen Ooms ", 362 | "Repository": "RSPM" 363 | }, 364 | "desc": { 365 | "Package": "desc", 366 | "Version": "1.4.3", 367 | "Source": "Repository", 368 | "Title": "Manipulate DESCRIPTION Files", 369 | "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", role = \"aut\"), person(\"Jim\", \"Hester\", , \"james.f.hester@gmail.com\", role = \"aut\"), person(\"Maëlle\", \"Salmon\", role = \"ctb\", comment = c(ORCID = \"0000-0002-2815-0399\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 370 | "Maintainer": "Gábor Csárdi ", 371 | "Description": "Tools to read, write, create, and manipulate DESCRIPTION files. It is intended for packages that create or manipulate other packages.", 372 | "License": "MIT + file LICENSE", 373 | "URL": "https://desc.r-lib.org/, https://github.com/r-lib/desc", 374 | "BugReports": "https://github.com/r-lib/desc/issues", 375 | "Depends": [ 376 | "R (>= 3.4)" 377 | ], 378 | "Imports": [ 379 | "cli", 380 | "R6", 381 | "utils" 382 | ], 383 | "Suggests": [ 384 | "callr", 385 | "covr", 386 | "gh", 387 | "spelling", 388 | "testthat", 389 | "whoami", 390 | "withr" 391 | ], 392 | "Config/Needs/website": "tidyverse/tidytemplate", 393 | "Config/testthat/edition": "3", 394 | "Encoding": "UTF-8", 395 | "Language": "en-US", 396 | "RoxygenNote": "7.2.3", 397 | "Collate": "'assertions.R' 'authors-at-r.R' 'built.R' 'classes.R' 'collate.R' 'constants.R' 'deps.R' 'desc-package.R' 'description.R' 'encoding.R' 'find-package-root.R' 'latex.R' 'non-oo-api.R' 'package-archives.R' 'read.R' 'remotes.R' 'str.R' 'syntax_checks.R' 'urls.R' 'utils.R' 'validate.R' 'version.R'", 398 | "NeedsCompilation": "no", 399 | "Author": "Gábor Csárdi [aut, cre], Kirill Müller [aut], Jim Hester [aut], Maëlle Salmon [ctb] (), Posit Software, PBC [cph, fnd]", 400 | "Repository": "RSPM" 401 | }, 402 | "digest": { 403 | "Package": "digest", 404 | "Version": "0.6.37", 405 | "Source": "Repository", 406 | "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\"), 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\"), person(\"Duncan\", \"Murdoch\", role=\"ctb\"), person(\"Jim\", \"Hester\", role=\"ctb\"), 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\"), person(\"Ion\", \"Suruceanu\", role=\"ctb\"), person(\"Bill\", \"Denney\", role=\"ctb\"), person(\"Dirk\", \"Schumacher\", role=\"ctb\"), person(\"András\", \"Svraka\", role=\"ctb\"), person(\"Sergey\", \"Fedorov\", role=\"ctb\"), 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\"), 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\"))", 407 | "Date": "2024-08-19", 408 | "Title": "Create Compact Hash Digests of R Objects", 409 | "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.", 410 | "URL": "https://github.com/eddelbuettel/digest, https://dirk.eddelbuettel.com/code/digest.html", 411 | "BugReports": "https://github.com/eddelbuettel/digest/issues", 412 | "Depends": [ 413 | "R (>= 3.3.0)" 414 | ], 415 | "Imports": [ 416 | "utils" 417 | ], 418 | "License": "GPL (>= 2)", 419 | "Suggests": [ 420 | "tinytest", 421 | "simplermarkdown" 422 | ], 423 | "VignetteBuilder": "simplermarkdown", 424 | "Encoding": "UTF-8", 425 | "NeedsCompilation": "yes", 426 | "Author": "Dirk Eddelbuettel [aut, cre] (), Antoine Lucas [ctb], Jarek Tuszynski [ctb], Henrik Bengtsson [ctb] (), Simon Urbanek [ctb] (), Mario Frasca [ctb], Bryan Lewis [ctb], Murray Stokely [ctb], Hannes Muehleisen [ctb], Duncan Murdoch [ctb], Jim Hester [ctb], Wush Wu [ctb] (), Qiang Kou [ctb] (), Thierry Onkelinx [ctb] (), Michel Lang [ctb] (), Viliam Simko [ctb], Kurt Hornik [ctb] (), Radford Neal [ctb] (), Kendon Bell [ctb] (), Matthew de Queljoe [ctb], Dmitry Selivanov [ctb], Ion Suruceanu [ctb], Bill Denney [ctb], Dirk Schumacher [ctb], András Svraka [ctb], Sergey Fedorov [ctb], Will Landau [ctb] (), Floris Vanderhaeghe [ctb] (), Kevin Tappe [ctb], Harris McGehee [ctb], Tim Mastny [ctb], Aaron Peikert [ctb] (), Mark van der Loo [ctb] (), Chris Muir [ctb] (), Moritz Beller [ctb] (), Sebastian Campbell [ctb], Winston Chang [ctb] (), Dean Attali [ctb] (), Michael Chirico [ctb] (), Kevin Ushey [ctb]", 427 | "Maintainer": "Dirk Eddelbuettel ", 428 | "Repository": "RSPM" 429 | }, 430 | "downlit": { 431 | "Package": "downlit", 432 | "Version": "0.4.4", 433 | "Source": "Repository", 434 | "Title": "Syntax Highlighting and Automatic Linking", 435 | "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 436 | "Description": "Syntax highlighting of R code, specifically designed for the needs of 'RMarkdown' packages like 'pkgdown', 'hugodown', and 'bookdown'. It includes linking of function calls to their documentation on the web, and automatic translation of ANSI escapes in output to the equivalent HTML.", 437 | "License": "MIT + file LICENSE", 438 | "URL": "https://downlit.r-lib.org/, https://github.com/r-lib/downlit", 439 | "BugReports": "https://github.com/r-lib/downlit/issues", 440 | "Depends": [ 441 | "R (>= 4.0.0)" 442 | ], 443 | "Imports": [ 444 | "brio", 445 | "desc", 446 | "digest", 447 | "evaluate", 448 | "fansi", 449 | "memoise", 450 | "rlang", 451 | "vctrs", 452 | "withr", 453 | "yaml" 454 | ], 455 | "Suggests": [ 456 | "covr", 457 | "htmltools", 458 | "jsonlite", 459 | "MASS", 460 | "MassSpecWavelet", 461 | "pkgload", 462 | "rmarkdown", 463 | "testthat (>= 3.0.0)", 464 | "xml2" 465 | ], 466 | "Config/Needs/website": "tidyverse/tidytemplate", 467 | "Config/testthat/edition": "3", 468 | "Encoding": "UTF-8", 469 | "RoxygenNote": "7.3.1", 470 | "NeedsCompilation": "no", 471 | "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", 472 | "Maintainer": "Hadley Wickham ", 473 | "Repository": "RSPM" 474 | }, 475 | "dplyr": { 476 | "Package": "dplyr", 477 | "Version": "1.1.4", 478 | "Source": "Repository", 479 | "Type": "Package", 480 | "Title": "A Grammar of Data Manipulation", 481 | "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\")) )", 482 | "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", 483 | "License": "MIT + file LICENSE", 484 | "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", 485 | "BugReports": "https://github.com/tidyverse/dplyr/issues", 486 | "Depends": [ 487 | "R (>= 3.5.0)" 488 | ], 489 | "Imports": [ 490 | "cli (>= 3.4.0)", 491 | "generics", 492 | "glue (>= 1.3.2)", 493 | "lifecycle (>= 1.0.3)", 494 | "magrittr (>= 1.5)", 495 | "methods", 496 | "pillar (>= 1.9.0)", 497 | "R6", 498 | "rlang (>= 1.1.0)", 499 | "tibble (>= 3.2.0)", 500 | "tidyselect (>= 1.2.0)", 501 | "utils", 502 | "vctrs (>= 0.6.4)" 503 | ], 504 | "Suggests": [ 505 | "bench", 506 | "broom", 507 | "callr", 508 | "covr", 509 | "DBI", 510 | "dbplyr (>= 2.2.1)", 511 | "ggplot2", 512 | "knitr", 513 | "Lahman", 514 | "lobstr", 515 | "microbenchmark", 516 | "nycflights13", 517 | "purrr", 518 | "rmarkdown", 519 | "RMySQL", 520 | "RPostgreSQL", 521 | "RSQLite", 522 | "stringi (>= 1.7.6)", 523 | "testthat (>= 3.1.5)", 524 | "tidyr (>= 1.3.0)", 525 | "withr" 526 | ], 527 | "VignetteBuilder": "knitr", 528 | "Config/Needs/website": "tidyverse, shiny, pkgdown, tidyverse/tidytemplate", 529 | "Config/testthat/edition": "3", 530 | "Encoding": "UTF-8", 531 | "LazyData": "true", 532 | "RoxygenNote": "7.2.3", 533 | "NeedsCompilation": "yes", 534 | "Author": "Hadley Wickham [aut, cre] (), Romain François [aut] (), Lionel Henry [aut], Kirill Müller [aut] (), Davis Vaughan [aut] (), Posit Software, PBC [cph, fnd]", 535 | "Maintainer": "Hadley Wickham ", 536 | "Repository": "RSPM" 537 | }, 538 | "evaluate": { 539 | "Package": "evaluate", 540 | "Version": "1.0.3", 541 | "Source": "Repository", 542 | "Type": "Package", 543 | "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", 544 | "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\")) )", 545 | "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", 546 | "License": "MIT + file LICENSE", 547 | "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", 548 | "BugReports": "https://github.com/r-lib/evaluate/issues", 549 | "Depends": [ 550 | "R (>= 3.6.0)" 551 | ], 552 | "Suggests": [ 553 | "callr", 554 | "covr", 555 | "ggplot2 (>= 3.3.6)", 556 | "lattice", 557 | "methods", 558 | "pkgload", 559 | "rlang", 560 | "knitr", 561 | "testthat (>= 3.0.0)", 562 | "withr" 563 | ], 564 | "Config/Needs/website": "tidyverse/tidytemplate", 565 | "Config/testthat/edition": "3", 566 | "Encoding": "UTF-8", 567 | "RoxygenNote": "7.3.2", 568 | "NeedsCompilation": "no", 569 | "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (), 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]", 570 | "Maintainer": "Hadley Wickham ", 571 | "Repository": "RSPM" 572 | }, 573 | "fansi": { 574 | "Package": "fansi", 575 | "Version": "1.0.6", 576 | "Source": "Repository", 577 | "Title": "ANSI Control Sequence Aware String Functions", 578 | "Description": "Counterparts to R string manipulation functions that account for the effects of ANSI text formatting control sequences.", 579 | "Authors@R": "c( person(\"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\", role=c(\"aut\", \"cre\")), person(\"Elliott\", \"Sales De Andrade\", role=\"ctb\"), person(family=\"R Core Team\", email=\"R-core@r-project.org\", role=\"cph\", comment=\"UTF8 byte length calcs from src/util.c\" ))", 580 | "Depends": [ 581 | "R (>= 3.1.0)" 582 | ], 583 | "License": "GPL-2 | GPL-3", 584 | "URL": "https://github.com/brodieG/fansi", 585 | "BugReports": "https://github.com/brodieG/fansi/issues", 586 | "VignetteBuilder": "knitr", 587 | "Suggests": [ 588 | "unitizer", 589 | "knitr", 590 | "rmarkdown" 591 | ], 592 | "Imports": [ 593 | "grDevices", 594 | "utils" 595 | ], 596 | "RoxygenNote": "7.2.3", 597 | "Encoding": "UTF-8", 598 | "Collate": "'constants.R' 'fansi-package.R' 'internal.R' 'load.R' 'misc.R' 'nchar.R' 'strwrap.R' 'strtrim.R' 'strsplit.R' 'substr2.R' 'trimws.R' 'tohtml.R' 'unhandled.R' 'normalize.R' 'sgr.R'", 599 | "NeedsCompilation": "yes", 600 | "Author": "Brodie Gaslam [aut, cre], Elliott Sales De Andrade [ctb], R Core Team [cph] (UTF8 byte length calcs from src/util.c)", 601 | "Maintainer": "Brodie Gaslam ", 602 | "Repository": "RSPM" 603 | }, 604 | "fastmap": { 605 | "Package": "fastmap", 606 | "Version": "1.2.0", 607 | "Source": "Repository", 608 | "Title": "Fast Data Structures", 609 | "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\") )", 610 | "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++.", 611 | "License": "MIT + file LICENSE", 612 | "Encoding": "UTF-8", 613 | "RoxygenNote": "7.2.3", 614 | "Suggests": [ 615 | "testthat (>= 2.1.1)" 616 | ], 617 | "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", 618 | "BugReports": "https://github.com/r-lib/fastmap/issues", 619 | "NeedsCompilation": "yes", 620 | "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", 621 | "Maintainer": "Winston Chang ", 622 | "Repository": "RSPM" 623 | }, 624 | "fontawesome": { 625 | "Package": "fontawesome", 626 | "Version": "0.5.3", 627 | "Source": "Repository", 628 | "Type": "Package", 629 | "Title": "Easily Work with 'Font Awesome' Icons", 630 | "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.", 631 | "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\")) )", 632 | "License": "MIT + file LICENSE", 633 | "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", 634 | "BugReports": "https://github.com/rstudio/fontawesome/issues", 635 | "Encoding": "UTF-8", 636 | "ByteCompile": "true", 637 | "RoxygenNote": "7.3.2", 638 | "Depends": [ 639 | "R (>= 3.3.0)" 640 | ], 641 | "Imports": [ 642 | "rlang (>= 1.0.6)", 643 | "htmltools (>= 0.5.1.1)" 644 | ], 645 | "Suggests": [ 646 | "covr", 647 | "dplyr (>= 1.0.8)", 648 | "gt (>= 0.9.0)", 649 | "knitr (>= 1.31)", 650 | "testthat (>= 3.0.0)", 651 | "rsvg" 652 | ], 653 | "Config/testthat/edition": "3", 654 | "NeedsCompilation": "no", 655 | "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", 656 | "Maintainer": "Richard Iannone ", 657 | "Repository": "RSPM" 658 | }, 659 | "fs": { 660 | "Package": "fs", 661 | "Version": "1.6.6", 662 | "Source": "Repository", 663 | "Title": "Cross-Platform File System Operations Based on 'libuv'", 664 | "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"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\")) )", 665 | "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", 666 | "License": "MIT + file LICENSE", 667 | "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", 668 | "BugReports": "https://github.com/r-lib/fs/issues", 669 | "Depends": [ 670 | "R (>= 3.6)" 671 | ], 672 | "Imports": [ 673 | "methods" 674 | ], 675 | "Suggests": [ 676 | "covr", 677 | "crayon", 678 | "knitr", 679 | "pillar (>= 1.0.0)", 680 | "rmarkdown", 681 | "spelling", 682 | "testthat (>= 3.0.0)", 683 | "tibble (>= 1.1.0)", 684 | "vctrs (>= 0.3.0)", 685 | "withr" 686 | ], 687 | "VignetteBuilder": "knitr", 688 | "ByteCompile": "true", 689 | "Config/Needs/website": "tidyverse/tidytemplate", 690 | "Config/testthat/edition": "3", 691 | "Copyright": "file COPYRIGHTS", 692 | "Encoding": "UTF-8", 693 | "Language": "en-US", 694 | "RoxygenNote": "7.2.3", 695 | "SystemRequirements": "GNU make", 696 | "NeedsCompilation": "yes", 697 | "Author": "Jim Hester [aut], Hadley Wickham [aut], Gábor Csárdi [aut, cre], libuv project contributors [cph] (libuv library), Joyent, Inc. and other Node contributors [cph] (libuv library), Posit Software, PBC [cph, fnd]", 698 | "Maintainer": "Gábor Csárdi ", 699 | "Repository": "P3M" 700 | }, 701 | "generics": { 702 | "Package": "generics", 703 | "Version": "0.1.3", 704 | "Source": "Repository", 705 | "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", 706 | "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")), person(\"Max\", \"Kuhn\", , \"max@rstudio.com\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@rstudio.com\", role = \"aut\"), person(\"RStudio\", role = \"cph\") )", 707 | "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", 708 | "License": "MIT + file LICENSE", 709 | "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", 710 | "BugReports": "https://github.com/r-lib/generics/issues", 711 | "Depends": [ 712 | "R (>= 3.2)" 713 | ], 714 | "Imports": [ 715 | "methods" 716 | ], 717 | "Suggests": [ 718 | "covr", 719 | "pkgload", 720 | "testthat (>= 3.0.0)", 721 | "tibble", 722 | "withr" 723 | ], 724 | "Config/Needs/website": "tidyverse/tidytemplate", 725 | "Config/testthat/edition": "3", 726 | "Encoding": "UTF-8", 727 | "RoxygenNote": "7.2.0", 728 | "NeedsCompilation": "no", 729 | "Author": "Hadley Wickham [aut, cre], Max Kuhn [aut], Davis Vaughan [aut], RStudio [cph]", 730 | "Maintainer": "Hadley Wickham ", 731 | "Repository": "RSPM" 732 | }, 733 | "glue": { 734 | "Package": "glue", 735 | "Version": "1.8.0", 736 | "Source": "Repository", 737 | "Title": "Interpreted String Literals", 738 | "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\")) )", 739 | "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", 740 | "License": "MIT + file LICENSE", 741 | "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", 742 | "BugReports": "https://github.com/tidyverse/glue/issues", 743 | "Depends": [ 744 | "R (>= 3.6)" 745 | ], 746 | "Imports": [ 747 | "methods" 748 | ], 749 | "Suggests": [ 750 | "crayon", 751 | "DBI (>= 1.2.0)", 752 | "dplyr", 753 | "knitr", 754 | "magrittr", 755 | "rlang", 756 | "rmarkdown", 757 | "RSQLite", 758 | "testthat (>= 3.2.0)", 759 | "vctrs (>= 0.3.0)", 760 | "waldo (>= 0.5.3)", 761 | "withr" 762 | ], 763 | "VignetteBuilder": "knitr", 764 | "ByteCompile": "true", 765 | "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", 766 | "Config/testthat/edition": "3", 767 | "Encoding": "UTF-8", 768 | "RoxygenNote": "7.3.2", 769 | "NeedsCompilation": "yes", 770 | "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]", 771 | "Maintainer": "Jennifer Bryan ", 772 | "Repository": "RSPM" 773 | }, 774 | "highr": { 775 | "Package": "highr", 776 | "Version": "0.11", 777 | "Source": "Repository", 778 | "Type": "Package", 779 | "Title": "Syntax Highlighting for R Source Code", 780 | "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\") )", 781 | "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 ().", 782 | "Depends": [ 783 | "R (>= 3.3.0)" 784 | ], 785 | "Imports": [ 786 | "xfun (>= 0.18)" 787 | ], 788 | "Suggests": [ 789 | "knitr", 790 | "markdown", 791 | "testit" 792 | ], 793 | "License": "GPL", 794 | "URL": "https://github.com/yihui/highr", 795 | "BugReports": "https://github.com/yihui/highr/issues", 796 | "VignetteBuilder": "knitr", 797 | "Encoding": "UTF-8", 798 | "RoxygenNote": "7.3.1", 799 | "NeedsCompilation": "no", 800 | "Author": "Yihui Xie [aut, cre] (), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", 801 | "Maintainer": "Yihui Xie ", 802 | "Repository": "RSPM" 803 | }, 804 | "htmltools": { 805 | "Package": "htmltools", 806 | "Version": "0.5.8.1", 807 | "Source": "Repository", 808 | "Type": "Package", 809 | "Title": "Tools for HTML", 810 | "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\")) )", 811 | "Description": "Tools for HTML generation and output.", 812 | "License": "GPL (>= 2)", 813 | "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", 814 | "BugReports": "https://github.com/rstudio/htmltools/issues", 815 | "Depends": [ 816 | "R (>= 2.14.1)" 817 | ], 818 | "Imports": [ 819 | "base64enc", 820 | "digest", 821 | "fastmap (>= 1.1.0)", 822 | "grDevices", 823 | "rlang (>= 1.0.0)", 824 | "utils" 825 | ], 826 | "Suggests": [ 827 | "Cairo", 828 | "markdown", 829 | "ragg", 830 | "shiny", 831 | "testthat", 832 | "withr" 833 | ], 834 | "Enhances": [ 835 | "knitr" 836 | ], 837 | "Config/Needs/check": "knitr", 838 | "Config/Needs/website": "rstudio/quillt, bench", 839 | "Encoding": "UTF-8", 840 | "RoxygenNote": "7.3.1", 841 | "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'", 842 | "NeedsCompilation": "yes", 843 | "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (), Barret Schloerke [aut] (), Winston Chang [aut] (), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", 844 | "Maintainer": "Carson Sievert ", 845 | "Repository": "RSPM" 846 | }, 847 | "htmlwidgets": { 848 | "Package": "htmlwidgets", 849 | "Version": "1.6.4", 850 | "Source": "Repository", 851 | "Type": "Package", 852 | "Title": "HTML Widgets for R", 853 | "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\")) )", 854 | "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", 855 | "License": "MIT + file LICENSE", 856 | "URL": "https://github.com/ramnathv/htmlwidgets", 857 | "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", 858 | "Imports": [ 859 | "grDevices", 860 | "htmltools (>= 0.5.7)", 861 | "jsonlite (>= 0.9.16)", 862 | "knitr (>= 1.8)", 863 | "rmarkdown", 864 | "yaml" 865 | ], 866 | "Suggests": [ 867 | "testthat" 868 | ], 869 | "Enhances": [ 870 | "shiny (>= 1.1)" 871 | ], 872 | "VignetteBuilder": "knitr", 873 | "Encoding": "UTF-8", 874 | "RoxygenNote": "7.2.3", 875 | "NeedsCompilation": "no", 876 | "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]", 877 | "Maintainer": "Carson Sievert ", 878 | "Repository": "RSPM" 879 | }, 880 | "httr2": { 881 | "Package": "httr2", 882 | "Version": "1.1.2", 883 | "Source": "Repository", 884 | "Title": "Perform HTTP Requests and Process the Responses", 885 | "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Maximilian\", \"Girlich\", role = \"ctb\") )", 886 | "Description": "Tools for creating and modifying HTTP requests, then performing them and processing the results. 'httr2' is a modern re-imagining of 'httr' that uses a pipe-based interface and solves more of the problems that API wrapping packages face.", 887 | "License": "MIT + file LICENSE", 888 | "URL": "https://httr2.r-lib.org, https://github.com/r-lib/httr2", 889 | "BugReports": "https://github.com/r-lib/httr2/issues", 890 | "Depends": [ 891 | "R (>= 4.0)" 892 | ], 893 | "Imports": [ 894 | "cli (>= 3.0.0)", 895 | "curl (>= 6.2.1)", 896 | "glue", 897 | "lifecycle", 898 | "magrittr", 899 | "openssl", 900 | "R6", 901 | "rappdirs", 902 | "rlang (>= 1.1.0)", 903 | "vctrs (>= 0.6.3)", 904 | "withr" 905 | ], 906 | "Suggests": [ 907 | "askpass", 908 | "bench", 909 | "clipr", 910 | "covr", 911 | "docopt", 912 | "httpuv", 913 | "jose", 914 | "jsonlite", 915 | "knitr", 916 | "later (>= 1.4.0)", 917 | "nanonext", 918 | "paws.common", 919 | "promises", 920 | "rmarkdown", 921 | "testthat (>= 3.1.8)", 922 | "tibble", 923 | "webfakes", 924 | "xml2" 925 | ], 926 | "VignetteBuilder": "knitr", 927 | "Config/Needs/website": "tidyverse/tidytemplate", 928 | "Config/testthat/edition": "3", 929 | "Config/testthat/parallel": "true", 930 | "Config/testthat/start-first": "multi-req, resp-stream, req-perform", 931 | "Encoding": "UTF-8", 932 | "RoxygenNote": "7.3.2", 933 | "NeedsCompilation": "no", 934 | "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd], Maximilian Girlich [ctb]", 935 | "Maintainer": "Hadley Wickham ", 936 | "Repository": "CRAN" 937 | }, 938 | "jquerylib": { 939 | "Package": "jquerylib", 940 | "Version": "0.1.4", 941 | "Source": "Repository", 942 | "Title": "Obtain 'jQuery' as an HTML Dependency Object", 943 | "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\") )", 944 | "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'.", 945 | "License": "MIT + file LICENSE", 946 | "Encoding": "UTF-8", 947 | "Config/testthat/edition": "3", 948 | "RoxygenNote": "7.0.2", 949 | "Imports": [ 950 | "htmltools" 951 | ], 952 | "Suggests": [ 953 | "testthat" 954 | ], 955 | "NeedsCompilation": "no", 956 | "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)", 957 | "Maintainer": "Carson Sievert ", 958 | "Repository": "RSPM" 959 | }, 960 | "jsonlite": { 961 | "Package": "jsonlite", 962 | "Version": "2.0.0", 963 | "Source": "Repository", 964 | "Title": "A Simple and Robust JSON Parser and Generator for R", 965 | "License": "MIT + file LICENSE", 966 | "Depends": [ 967 | "methods" 968 | ], 969 | "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\"))", 970 | "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", 971 | "BugReports": "https://github.com/jeroen/jsonlite/issues", 972 | "Maintainer": "Jeroen Ooms ", 973 | "VignetteBuilder": "knitr, R.rsp", 974 | "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.", 975 | "Suggests": [ 976 | "httr", 977 | "vctrs", 978 | "testthat", 979 | "knitr", 980 | "rmarkdown", 981 | "R.rsp", 982 | "sf" 983 | ], 984 | "RoxygenNote": "7.3.2", 985 | "Encoding": "UTF-8", 986 | "NeedsCompilation": "yes", 987 | "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", 988 | "Repository": "CRAN" 989 | }, 990 | "knitr": { 991 | "Package": "knitr", 992 | "Version": "1.50", 993 | "Source": "Repository", 994 | "Type": "Package", 995 | "Title": "A General-Purpose Package for Dynamic Report Generation in R", 996 | "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\")) )", 997 | "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", 998 | "Depends": [ 999 | "R (>= 3.6.0)" 1000 | ], 1001 | "Imports": [ 1002 | "evaluate (>= 0.15)", 1003 | "highr (>= 0.11)", 1004 | "methods", 1005 | "tools", 1006 | "xfun (>= 0.51)", 1007 | "yaml (>= 2.1.19)" 1008 | ], 1009 | "Suggests": [ 1010 | "bslib", 1011 | "codetools", 1012 | "DBI (>= 0.4-1)", 1013 | "digest", 1014 | "formatR", 1015 | "gifski", 1016 | "gridSVG", 1017 | "htmlwidgets (>= 0.7)", 1018 | "jpeg", 1019 | "JuliaCall (>= 0.11.1)", 1020 | "magick", 1021 | "litedown", 1022 | "markdown (>= 1.3)", 1023 | "png", 1024 | "ragg", 1025 | "reticulate (>= 1.4)", 1026 | "rgl (>= 0.95.1201)", 1027 | "rlang", 1028 | "rmarkdown", 1029 | "sass", 1030 | "showtext", 1031 | "styler (>= 1.2.0)", 1032 | "targets (>= 0.6.0)", 1033 | "testit", 1034 | "tibble", 1035 | "tikzDevice (>= 0.10)", 1036 | "tinytex (>= 0.56)", 1037 | "webshot", 1038 | "rstudioapi", 1039 | "svglite" 1040 | ], 1041 | "License": "GPL", 1042 | "URL": "https://yihui.org/knitr/", 1043 | "BugReports": "https://github.com/yihui/knitr/issues", 1044 | "Encoding": "UTF-8", 1045 | "VignetteBuilder": "litedown, knitr", 1046 | "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).", 1047 | "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' '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'", 1048 | "RoxygenNote": "7.3.2", 1049 | "NeedsCompilation": "no", 1050 | "Author": "Yihui Xie [aut, cre] (, 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] (), 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] (), 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] (), 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] (), Posit Software, PBC [cph, fnd]", 1051 | "Maintainer": "Yihui Xie ", 1052 | "Repository": "RSPM" 1053 | }, 1054 | "lifecycle": { 1055 | "Package": "lifecycle", 1056 | "Version": "1.0.4", 1057 | "Source": "Repository", 1058 | "Title": "Manage the Life Cycle of your Package Functions", 1059 | "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\")) )", 1060 | "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", 1061 | "License": "MIT + file LICENSE", 1062 | "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", 1063 | "BugReports": "https://github.com/r-lib/lifecycle/issues", 1064 | "Depends": [ 1065 | "R (>= 3.6)" 1066 | ], 1067 | "Imports": [ 1068 | "cli (>= 3.4.0)", 1069 | "glue", 1070 | "rlang (>= 1.1.0)" 1071 | ], 1072 | "Suggests": [ 1073 | "covr", 1074 | "crayon", 1075 | "knitr", 1076 | "lintr", 1077 | "rmarkdown", 1078 | "testthat (>= 3.0.1)", 1079 | "tibble", 1080 | "tidyverse", 1081 | "tools", 1082 | "vctrs", 1083 | "withr" 1084 | ], 1085 | "VignetteBuilder": "knitr", 1086 | "Config/Needs/website": "tidyverse/tidytemplate, usethis", 1087 | "Config/testthat/edition": "3", 1088 | "Encoding": "UTF-8", 1089 | "RoxygenNote": "7.2.1", 1090 | "NeedsCompilation": "no", 1091 | "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]", 1092 | "Maintainer": "Lionel Henry ", 1093 | "Repository": "RSPM" 1094 | }, 1095 | "lubridate": { 1096 | "Package": "lubridate", 1097 | "Version": "1.9.4", 1098 | "Source": "Repository", 1099 | "Type": "Package", 1100 | "Title": "Make Dealing with Dates a Little Easier", 1101 | "Authors@R": "c( person(\"Vitalie\", \"Spinu\", , \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Garrett\", \"Grolemund\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Davis\", \"Vaughan\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Imanuel\", \"Costigan\", role = \"ctb\"), person(\"Jason\", \"Law\", role = \"ctb\"), person(\"Doug\", \"Mitarotonda\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Jonathan\", \"Boiser\", role = \"ctb\"), person(\"Chel Hee\", \"Lee\", role = \"ctb\") )", 1102 | "Maintainer": "Vitalie Spinu ", 1103 | "Description": "Functions to work with date-times and time-spans: fast and user friendly parsing of date-time data, extraction and updating of components of a date-time (years, months, days, hours, minutes, and seconds), algebraic manipulation on date-time and time-span objects. The 'lubridate' package has a consistent and memorable syntax that makes working with dates easy and fun.", 1104 | "License": "GPL (>= 2)", 1105 | "URL": "https://lubridate.tidyverse.org, https://github.com/tidyverse/lubridate", 1106 | "BugReports": "https://github.com/tidyverse/lubridate/issues", 1107 | "Depends": [ 1108 | "methods", 1109 | "R (>= 3.2)" 1110 | ], 1111 | "Imports": [ 1112 | "generics", 1113 | "timechange (>= 0.3.0)" 1114 | ], 1115 | "Suggests": [ 1116 | "covr", 1117 | "knitr", 1118 | "rmarkdown", 1119 | "testthat (>= 2.1.0)", 1120 | "vctrs (>= 0.6.5)" 1121 | ], 1122 | "Enhances": [ 1123 | "chron", 1124 | "data.table", 1125 | "timeDate", 1126 | "tis", 1127 | "zoo" 1128 | ], 1129 | "VignetteBuilder": "knitr", 1130 | "Config/Needs/website": "tidyverse/tidytemplate", 1131 | "Config/testthat/edition": "3", 1132 | "Encoding": "UTF-8", 1133 | "LazyData": "true", 1134 | "RoxygenNote": "7.2.3", 1135 | "SystemRequirements": "C++11, A system with zoneinfo data (e.g. /usr/share/zoneinfo). On Windows the zoneinfo included with R is used.", 1136 | "Collate": "'Dates.r' 'POSIXt.r' 'util.r' 'parse.r' 'timespans.r' 'intervals.r' 'difftimes.r' 'durations.r' 'periods.r' 'accessors-date.R' 'accessors-day.r' 'accessors-dst.r' 'accessors-hour.r' 'accessors-minute.r' 'accessors-month.r' 'accessors-quarter.r' 'accessors-second.r' 'accessors-tz.r' 'accessors-week.r' 'accessors-year.r' 'am-pm.r' 'time-zones.r' 'numeric.r' 'coercion.r' 'constants.r' 'cyclic_encoding.r' 'data.r' 'decimal-dates.r' 'deprecated.r' 'format_ISO8601.r' 'guess.r' 'hidden.r' 'instants.r' 'leap-years.r' 'ops-addition.r' 'ops-compare.r' 'ops-division.r' 'ops-integer-division.r' 'ops-m+.r' 'ops-modulo.r' 'ops-multiplication.r' 'ops-subtraction.r' 'package.r' 'pretty.r' 'round.r' 'stamp.r' 'tzdir.R' 'update.r' 'vctrs.R' 'zzz.R'", 1137 | "NeedsCompilation": "yes", 1138 | "Author": "Vitalie Spinu [aut, cre], Garrett Grolemund [aut], Hadley Wickham [aut], Davis Vaughan [ctb], Ian Lyttle [ctb], Imanuel Costigan [ctb], Jason Law [ctb], Doug Mitarotonda [ctb], Joseph Larmarange [ctb], Jonathan Boiser [ctb], Chel Hee Lee [ctb]", 1139 | "Repository": "CRAN" 1140 | }, 1141 | "magrittr": { 1142 | "Package": "magrittr", 1143 | "Version": "2.0.3", 1144 | "Source": "Repository", 1145 | "Type": "Package", 1146 | "Title": "A Forward-Pipe Operator for R", 1147 | "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@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", 1148 | "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.\"", 1149 | "License": "MIT + file LICENSE", 1150 | "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", 1151 | "BugReports": "https://github.com/tidyverse/magrittr/issues", 1152 | "Depends": [ 1153 | "R (>= 3.4.0)" 1154 | ], 1155 | "Suggests": [ 1156 | "covr", 1157 | "knitr", 1158 | "rlang", 1159 | "rmarkdown", 1160 | "testthat" 1161 | ], 1162 | "VignetteBuilder": "knitr", 1163 | "ByteCompile": "Yes", 1164 | "Config/Needs/website": "tidyverse/tidytemplate", 1165 | "Encoding": "UTF-8", 1166 | "RoxygenNote": "7.1.2", 1167 | "NeedsCompilation": "yes", 1168 | "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], RStudio [cph, fnd]", 1169 | "Maintainer": "Lionel Henry ", 1170 | "Repository": "RSPM" 1171 | }, 1172 | "memoise": { 1173 | "Package": "memoise", 1174 | "Version": "2.0.1", 1175 | "Source": "Repository", 1176 | "Title": "'Memoisation' of Functions", 1177 | "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\"))", 1178 | "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", 1179 | "License": "MIT + file LICENSE", 1180 | "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", 1181 | "BugReports": "https://github.com/r-lib/memoise/issues", 1182 | "Imports": [ 1183 | "rlang (>= 0.4.10)", 1184 | "cachem" 1185 | ], 1186 | "Suggests": [ 1187 | "digest", 1188 | "aws.s3", 1189 | "covr", 1190 | "googleAuthR", 1191 | "googleCloudStorageR", 1192 | "httr", 1193 | "testthat" 1194 | ], 1195 | "Encoding": "UTF-8", 1196 | "RoxygenNote": "7.1.2", 1197 | "NeedsCompilation": "no", 1198 | "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", 1199 | "Maintainer": "Winston Chang ", 1200 | "Repository": "RSPM" 1201 | }, 1202 | "mime": { 1203 | "Package": "mime", 1204 | "Version": "0.13", 1205 | "Source": "Repository", 1206 | "Type": "Package", 1207 | "Title": "Map Filenames to MIME Types", 1208 | "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\") )", 1209 | "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", 1210 | "Imports": [ 1211 | "tools" 1212 | ], 1213 | "License": "GPL", 1214 | "URL": "https://github.com/yihui/mime", 1215 | "BugReports": "https://github.com/yihui/mime/issues", 1216 | "RoxygenNote": "7.3.2", 1217 | "Encoding": "UTF-8", 1218 | "NeedsCompilation": "yes", 1219 | "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", 1220 | "Maintainer": "Yihui Xie ", 1221 | "Repository": "RSPM" 1222 | }, 1223 | "openssl": { 1224 | "Package": "openssl", 1225 | "Version": "2.3.2", 1226 | "Source": "Repository", 1227 | "Type": "Package", 1228 | "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", 1229 | "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\"))", 1230 | "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.", 1231 | "License": "MIT + file LICENSE", 1232 | "URL": "https://jeroen.r-universe.dev/openssl", 1233 | "BugReports": "https://github.com/jeroen/openssl/issues", 1234 | "SystemRequirements": "OpenSSL >= 1.0.2", 1235 | "VignetteBuilder": "knitr", 1236 | "Imports": [ 1237 | "askpass" 1238 | ], 1239 | "Suggests": [ 1240 | "curl", 1241 | "testthat (>= 2.1.0)", 1242 | "digest", 1243 | "knitr", 1244 | "rmarkdown", 1245 | "jsonlite", 1246 | "jose", 1247 | "sodium" 1248 | ], 1249 | "RoxygenNote": "7.3.2", 1250 | "Encoding": "UTF-8", 1251 | "NeedsCompilation": "yes", 1252 | "Author": "Jeroen Ooms [aut, cre] (), Oliver Keyes [ctb]", 1253 | "Maintainer": "Jeroen Ooms ", 1254 | "Repository": "RSPM" 1255 | }, 1256 | "pillar": { 1257 | "Package": "pillar", 1258 | "Version": "1.10.2", 1259 | "Source": "Repository", 1260 | "Title": "Coloured Formatting for Columns", 1261 | "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\"))", 1262 | "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", 1263 | "License": "MIT + file LICENSE", 1264 | "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", 1265 | "BugReports": "https://github.com/r-lib/pillar/issues", 1266 | "Imports": [ 1267 | "cli (>= 2.3.0)", 1268 | "glue", 1269 | "lifecycle", 1270 | "rlang (>= 1.0.2)", 1271 | "utf8 (>= 1.1.0)", 1272 | "utils", 1273 | "vctrs (>= 0.5.0)" 1274 | ], 1275 | "Suggests": [ 1276 | "bit64", 1277 | "DBI", 1278 | "debugme", 1279 | "DiagrammeR", 1280 | "dplyr", 1281 | "formattable", 1282 | "ggplot2", 1283 | "knitr", 1284 | "lubridate", 1285 | "nanotime", 1286 | "nycflights13", 1287 | "palmerpenguins", 1288 | "rmarkdown", 1289 | "scales", 1290 | "stringi", 1291 | "survival", 1292 | "testthat (>= 3.1.1)", 1293 | "tibble", 1294 | "units (>= 0.7.2)", 1295 | "vdiffr", 1296 | "withr" 1297 | ], 1298 | "VignetteBuilder": "knitr", 1299 | "Encoding": "UTF-8", 1300 | "RoxygenNote": "7.3.2.9000", 1301 | "Config/testthat/edition": "3", 1302 | "Config/testthat/parallel": "true", 1303 | "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", 1304 | "Config/autostyle/scope": "line_breaks", 1305 | "Config/autostyle/strict": "true", 1306 | "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", 1307 | "Config/Needs/website": "tidyverse/tidytemplate", 1308 | "NeedsCompilation": "no", 1309 | "Author": "Kirill Müller [aut, cre] (), Hadley Wickham [aut], RStudio [cph]", 1310 | "Maintainer": "Kirill Müller ", 1311 | "Repository": "P3M" 1312 | }, 1313 | "pkgconfig": { 1314 | "Package": "pkgconfig", 1315 | "Version": "2.0.3", 1316 | "Source": "Repository", 1317 | "Title": "Private Configuration for 'R' Packages", 1318 | "Author": "Gábor Csárdi", 1319 | "Maintainer": "Gábor Csárdi ", 1320 | "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", 1321 | "License": "MIT + file LICENSE", 1322 | "LazyData": "true", 1323 | "Imports": [ 1324 | "utils" 1325 | ], 1326 | "Suggests": [ 1327 | "covr", 1328 | "testthat", 1329 | "disposables (>= 1.0.3)" 1330 | ], 1331 | "URL": "https://github.com/r-lib/pkgconfig#readme", 1332 | "BugReports": "https://github.com/r-lib/pkgconfig/issues", 1333 | "Encoding": "UTF-8", 1334 | "NeedsCompilation": "no", 1335 | "Repository": "RSPM" 1336 | }, 1337 | "pkgdown": { 1338 | "Package": "pkgdown", 1339 | "Version": "2.1.1", 1340 | "Source": "Repository", 1341 | "Title": "Make Static HTML Documentation for a Package", 1342 | "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jay\", \"Hesselberth\", role = \"aut\", comment = c(ORCID = \"0000-0002-6299-179X\")), person(\"Maëlle\", \"Salmon\", role = \"aut\", comment = c(ORCID = \"0000-0002-2815-0399\")), person(\"Olivier\", \"Roy\", role = \"aut\"), person(\"Salim\", \"Brüggemann\", role = \"aut\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 1343 | "Description": "Generate an attractive and useful website from a source package. 'pkgdown' converts your documentation, vignettes, 'README', and more to 'HTML' making it easy to share information about your package online.", 1344 | "License": "MIT + file LICENSE", 1345 | "URL": "https://pkgdown.r-lib.org/, https://github.com/r-lib/pkgdown", 1346 | "BugReports": "https://github.com/r-lib/pkgdown/issues", 1347 | "Depends": [ 1348 | "R (>= 4.0.0)" 1349 | ], 1350 | "Imports": [ 1351 | "bslib (>= 0.5.1)", 1352 | "callr (>= 3.7.3)", 1353 | "cli (>= 3.6.1)", 1354 | "desc (>= 1.4.0)", 1355 | "digest", 1356 | "downlit (>= 0.4.4)", 1357 | "fontawesome", 1358 | "fs (>= 1.4.0)", 1359 | "httr2 (>= 1.0.2)", 1360 | "jsonlite", 1361 | "openssl", 1362 | "purrr (>= 1.0.0)", 1363 | "ragg", 1364 | "rlang (>= 1.1.0)", 1365 | "rmarkdown (>= 2.27)", 1366 | "tibble", 1367 | "whisker", 1368 | "withr (>= 2.4.3)", 1369 | "xml2 (>= 1.3.1)", 1370 | "yaml" 1371 | ], 1372 | "Suggests": [ 1373 | "covr", 1374 | "diffviewer", 1375 | "evaluate (>= 0.24.0)", 1376 | "gert", 1377 | "gt", 1378 | "htmltools", 1379 | "htmlwidgets", 1380 | "knitr", 1381 | "lifecycle", 1382 | "magick", 1383 | "methods", 1384 | "pkgload (>= 1.0.2)", 1385 | "quarto", 1386 | "rsconnect", 1387 | "rstudioapi", 1388 | "rticles", 1389 | "sass", 1390 | "testthat (>= 3.1.3)", 1391 | "tools" 1392 | ], 1393 | "VignetteBuilder": "knitr, quarto", 1394 | "Config/Needs/website": "usethis, servr", 1395 | "Config/potools/style": "explicit", 1396 | "Config/testthat/edition": "3", 1397 | "Config/testthat/parallel": "true", 1398 | "Config/testthat/start-first": "build-article, build-quarto-article, build-reference", 1399 | "Encoding": "UTF-8", 1400 | "RoxygenNote": "7.3.2", 1401 | "SystemRequirements": "pandoc", 1402 | "NeedsCompilation": "no", 1403 | "Author": "Hadley Wickham [aut, cre] (), Jay Hesselberth [aut] (), Maëlle Salmon [aut] (), Olivier Roy [aut], Salim Brüggemann [aut] (), Posit Software, PBC [cph, fnd]", 1404 | "Maintainer": "Hadley Wickham ", 1405 | "Repository": "RSPM" 1406 | }, 1407 | "prettyunits": { 1408 | "Package": "prettyunits", 1409 | "Version": "1.2.0", 1410 | "Source": "Repository", 1411 | "Title": "Pretty, Human Readable Formatting of Quantities", 1412 | "Authors@R": "c( person(\"Gabor\", \"Csardi\", email=\"csardi.gabor@gmail.com\", role=c(\"aut\", \"cre\")), person(\"Bill\", \"Denney\", email=\"wdenney@humanpredictions.com\", role=c(\"ctb\"), comment=c(ORCID=\"0000-0002-5759-428X\")), person(\"Christophe\", \"Regouby\", email=\"christophe.regouby@free.fr\", role=c(\"ctb\")) )", 1413 | "Description": "Pretty, human readable formatting of quantities. Time intervals: '1337000' -> '15d 11h 23m 20s'. Vague time intervals: '2674000' -> 'about a month ago'. Bytes: '1337' -> '1.34 kB'. Rounding: '99' with 3 significant digits -> '99.0' p-values: '0.00001' -> '<0.0001'. Colors: '#FF0000' -> 'red'. Quantities: '1239437' -> '1.24 M'.", 1414 | "License": "MIT + file LICENSE", 1415 | "URL": "https://github.com/r-lib/prettyunits", 1416 | "BugReports": "https://github.com/r-lib/prettyunits/issues", 1417 | "Depends": [ 1418 | "R(>= 2.10)" 1419 | ], 1420 | "Suggests": [ 1421 | "codetools", 1422 | "covr", 1423 | "testthat" 1424 | ], 1425 | "RoxygenNote": "7.2.3", 1426 | "Encoding": "UTF-8", 1427 | "NeedsCompilation": "no", 1428 | "Author": "Gabor Csardi [aut, cre], Bill Denney [ctb] (), Christophe Regouby [ctb]", 1429 | "Maintainer": "Gabor Csardi ", 1430 | "Repository": "RSPM" 1431 | }, 1432 | "processx": { 1433 | "Package": "processx", 1434 | "Version": "3.8.6", 1435 | "Source": "Repository", 1436 | "Title": "Execute and Control System Processes", 1437 | "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-7098-9676\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = c(\"cph\", \"fnd\")) )", 1438 | "Description": "Tools to run system processes in the background. It can check if a background process is running; wait on a background process to finish; get the exit status of finished processes; kill background processes. It can read the standard output and error of the processes, using non-blocking connections. 'processx' can poll a process for standard output or error, with a timeout. It can also poll several processes at once.", 1439 | "License": "MIT + file LICENSE", 1440 | "URL": "https://processx.r-lib.org, https://github.com/r-lib/processx", 1441 | "BugReports": "https://github.com/r-lib/processx/issues", 1442 | "Depends": [ 1443 | "R (>= 3.4.0)" 1444 | ], 1445 | "Imports": [ 1446 | "ps (>= 1.2.0)", 1447 | "R6", 1448 | "utils" 1449 | ], 1450 | "Suggests": [ 1451 | "callr (>= 3.7.3)", 1452 | "cli (>= 3.3.0)", 1453 | "codetools", 1454 | "covr", 1455 | "curl", 1456 | "debugme", 1457 | "parallel", 1458 | "rlang (>= 1.0.2)", 1459 | "testthat (>= 3.0.0)", 1460 | "webfakes", 1461 | "withr" 1462 | ], 1463 | "Config/Needs/website": "tidyverse/tidytemplate", 1464 | "Config/testthat/edition": "3", 1465 | "Encoding": "UTF-8", 1466 | "RoxygenNote": "7.3.1.9000", 1467 | "NeedsCompilation": "yes", 1468 | "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]", 1469 | "Maintainer": "Gábor Csárdi ", 1470 | "Repository": "RSPM" 1471 | }, 1472 | "ps": { 1473 | "Package": "ps", 1474 | "Version": "1.9.1", 1475 | "Source": "Repository", 1476 | "Title": "List, Query, Manipulate System Processes", 1477 | "Authors@R": "c( person(\"Jay\", \"Loden\", role = \"aut\"), person(\"Dave\", \"Daeschler\", role = \"aut\"), person(\"Giampaolo\", \"Rodola'\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 1478 | "Description": "List, query and manipulate all system processes, on 'Windows', 'Linux' and 'macOS'.", 1479 | "License": "MIT + file LICENSE", 1480 | "URL": "https://github.com/r-lib/ps, https://ps.r-lib.org/", 1481 | "BugReports": "https://github.com/r-lib/ps/issues", 1482 | "Depends": [ 1483 | "R (>= 3.4)" 1484 | ], 1485 | "Imports": [ 1486 | "utils" 1487 | ], 1488 | "Suggests": [ 1489 | "callr", 1490 | "covr", 1491 | "curl", 1492 | "pillar", 1493 | "pingr", 1494 | "processx (>= 3.1.0)", 1495 | "R6", 1496 | "rlang", 1497 | "testthat (>= 3.0.0)", 1498 | "webfakes", 1499 | "withr" 1500 | ], 1501 | "Biarch": "true", 1502 | "Config/Needs/website": "tidyverse/tidytemplate", 1503 | "Config/testthat/edition": "3", 1504 | "Encoding": "UTF-8", 1505 | "RoxygenNote": "7.3.2", 1506 | "NeedsCompilation": "yes", 1507 | "Author": "Jay Loden [aut], Dave Daeschler [aut], Giampaolo Rodola' [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", 1508 | "Maintainer": "Gábor Csárdi ", 1509 | "Repository": "P3M" 1510 | }, 1511 | "purrr": { 1512 | "Package": "purrr", 1513 | "Version": "1.0.4", 1514 | "Source": "Repository", 1515 | "Title": "Functional Programming Tools", 1516 | "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 = \"03wc8by49\")) )", 1517 | "Description": "A complete and consistent functional programming toolkit for R.", 1518 | "License": "MIT + file LICENSE", 1519 | "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", 1520 | "BugReports": "https://github.com/tidyverse/purrr/issues", 1521 | "Depends": [ 1522 | "R (>= 4.0)" 1523 | ], 1524 | "Imports": [ 1525 | "cli (>= 3.6.1)", 1526 | "lifecycle (>= 1.0.3)", 1527 | "magrittr (>= 1.5.0)", 1528 | "rlang (>= 1.1.1)", 1529 | "vctrs (>= 0.6.3)" 1530 | ], 1531 | "Suggests": [ 1532 | "covr", 1533 | "dplyr (>= 0.7.8)", 1534 | "httr", 1535 | "knitr", 1536 | "lubridate", 1537 | "rmarkdown", 1538 | "testthat (>= 3.0.0)", 1539 | "tibble", 1540 | "tidyselect" 1541 | ], 1542 | "LinkingTo": [ 1543 | "cli" 1544 | ], 1545 | "VignetteBuilder": "knitr", 1546 | "Biarch": "true", 1547 | "Config/build/compilation-database": "true", 1548 | "Config/Needs/website": "tidyverse/tidytemplate, tidyr", 1549 | "Config/testthat/edition": "3", 1550 | "Config/testthat/parallel": "TRUE", 1551 | "Encoding": "UTF-8", 1552 | "RoxygenNote": "7.3.2", 1553 | "NeedsCompilation": "yes", 1554 | "Author": "Hadley Wickham [aut, cre] (), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", 1555 | "Maintainer": "Hadley Wickham ", 1556 | "Repository": "RSPM" 1557 | }, 1558 | "ragg": { 1559 | "Package": "ragg", 1560 | "Version": "1.4.0", 1561 | "Source": "Repository", 1562 | "Type": "Package", 1563 | "Title": "Graphic Devices Based on AGG", 1564 | "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Maxim\", \"Shemanarev\", role = c(\"aut\", \"cph\"), comment = \"Author of AGG\"), person(\"Tony\", \"Juricic\", , \"tonygeek@yahoo.com\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Milan\", \"Marusinec\", , \"milan@marusinec.sk\", role = c(\"ctb\", \"cph\"), comment = \"Contributor to AGG\"), person(\"Spencer\", \"Garrett\", role = \"ctb\", comment = \"Contributor to AGG\"), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", 1565 | "Maintainer": "Thomas Lin Pedersen ", 1566 | "Description": "Anti-Grain Geometry (AGG) is a high-quality and high-performance 2D drawing library. The 'ragg' package provides a set of graphic devices based on AGG to use as alternative to the raster devices provided through the 'grDevices' package.", 1567 | "License": "MIT + file LICENSE", 1568 | "URL": "https://ragg.r-lib.org, https://github.com/r-lib/ragg", 1569 | "BugReports": "https://github.com/r-lib/ragg/issues", 1570 | "Imports": [ 1571 | "systemfonts (>= 1.0.3)", 1572 | "textshaping (>= 0.3.0)" 1573 | ], 1574 | "Suggests": [ 1575 | "covr", 1576 | "graphics", 1577 | "grid", 1578 | "testthat (>= 3.0.0)" 1579 | ], 1580 | "LinkingTo": [ 1581 | "systemfonts", 1582 | "textshaping" 1583 | ], 1584 | "Config/Needs/website": "ggplot2, devoid, magick, bench, tidyr, ggridges, hexbin, sessioninfo, pkgdown, tidyverse/tidytemplate", 1585 | "Encoding": "UTF-8", 1586 | "RoxygenNote": "7.3.2", 1587 | "SystemRequirements": "freetype2, libpng, libtiff, libjpeg", 1588 | "Config/testthat/edition": "3", 1589 | "Config/build/compilation-database": "true", 1590 | "NeedsCompilation": "yes", 1591 | "Author": "Thomas Lin Pedersen [cre, aut] (), Maxim Shemanarev [aut, cph] (Author of AGG), Tony Juricic [ctb, cph] (Contributor to AGG), Milan Marusinec [ctb, cph] (Contributor to AGG), Spencer Garrett [ctb] (Contributor to AGG), Posit, PBC [cph, fnd]", 1592 | "Repository": "P3M" 1593 | }, 1594 | "rappdirs": { 1595 | "Package": "rappdirs", 1596 | "Version": "0.3.3", 1597 | "Source": "Repository", 1598 | "Type": "Package", 1599 | "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", 1600 | "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = c(\"trl\", \"cre\", \"cph\"), email = \"hadley@rstudio.com\"), person(given = \"RStudio\", role = \"cph\"), person(given = \"Sridhar\", family = \"Ratnakumar\", role = \"aut\"), person(given = \"Trent\", family = \"Mick\", role = \"aut\"), person(given = \"ActiveState\", role = \"cph\", comment = \"R/appdir.r, R/cache.r, R/data.r, R/log.r translated from appdirs\"), person(given = \"Eddy\", family = \"Petrisor\", role = \"ctb\"), person(given = \"Trevor\", family = \"Davis\", role = c(\"trl\", \"aut\")), person(given = \"Gabor\", family = \"Csardi\", role = \"ctb\"), person(given = \"Gregory\", family = \"Jefferis\", role = \"ctb\"))", 1601 | "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.", 1602 | "License": "MIT + file LICENSE", 1603 | "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", 1604 | "BugReports": "https://github.com/r-lib/rappdirs/issues", 1605 | "Depends": [ 1606 | "R (>= 3.2)" 1607 | ], 1608 | "Suggests": [ 1609 | "roxygen2", 1610 | "testthat (>= 3.0.0)", 1611 | "covr", 1612 | "withr" 1613 | ], 1614 | "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, RStudio. See file LICENSE for details.", 1615 | "Encoding": "UTF-8", 1616 | "RoxygenNote": "7.1.1", 1617 | "Config/testthat/edition": "3", 1618 | "NeedsCompilation": "yes", 1619 | "Author": "Hadley Wickham [trl, cre, cph], RStudio [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], Gabor Csardi [ctb], Gregory Jefferis [ctb]", 1620 | "Maintainer": "Hadley Wickham ", 1621 | "Repository": "RSPM" 1622 | }, 1623 | "reactR": { 1624 | "Package": "reactR", 1625 | "Version": "0.6.1", 1626 | "Source": "Repository", 1627 | "Type": "Package", 1628 | "Title": "React Helpers", 1629 | "Date": "2024-09-14", 1630 | "Authors@R": "c( person( \"Facebook\", \"Inc\" , role = c(\"aut\", \"cph\") , comment = \"React library in lib, https://reactjs.org/; see AUTHORS for full list of contributors\" ), person( \"Michel\",\"Weststrate\", , role = c(\"aut\", \"cph\") , comment = \"mobx library in lib, https://github.com/mobxjs\" ), person( \"Kent\", \"Russell\" , role = c(\"aut\", \"cre\") , comment = \"R interface\" , email = \"kent.russell@timelyportfolio.com\" ), person( \"Alan\", \"Dipert\" , role = c(\"aut\") , comment = \"R interface\" , email = \"alan@rstudio.com\" ), person( \"Greg\", \"Lin\" , role = c(\"aut\") , comment = \"R interface\" , email = \"glin@glin.io\" ) )", 1631 | "Maintainer": "Kent Russell ", 1632 | "Description": "Make it easy to use 'React' in R with 'htmlwidget' scaffolds, helper dependency functions, an embedded 'Babel' 'transpiler', and examples.", 1633 | "URL": "https://github.com/react-R/reactR", 1634 | "BugReports": "https://github.com/react-R/reactR/issues", 1635 | "License": "MIT + file LICENSE", 1636 | "Encoding": "UTF-8", 1637 | "Imports": [ 1638 | "htmltools" 1639 | ], 1640 | "Suggests": [ 1641 | "htmlwidgets (>= 1.5.3)", 1642 | "rmarkdown", 1643 | "shiny", 1644 | "V8", 1645 | "knitr", 1646 | "usethis", 1647 | "jsonlite" 1648 | ], 1649 | "RoxygenNote": "7.3.2", 1650 | "VignetteBuilder": "knitr", 1651 | "NeedsCompilation": "no", 1652 | "Author": "Facebook Inc [aut, cph] (React library in lib, https://reactjs.org/; see AUTHORS for full list of contributors), Michel Weststrate [aut, cph] (mobx library in lib, https://github.com/mobxjs), Kent Russell [aut, cre] (R interface), Alan Dipert [aut] (R interface), Greg Lin [aut] (R interface)", 1653 | "Repository": "RSPM" 1654 | }, 1655 | "reactable": { 1656 | "Package": "reactable", 1657 | "Version": "0.4.4", 1658 | "Source": "Repository", 1659 | "Type": "Package", 1660 | "Title": "Interactive Data Tables for R", 1661 | "Authors@R": "c( person(\"Greg\", \"Lin\", email = \"glin@glin.io\", role = c(\"aut\", \"cre\")), person(\"Tanner\", \"Linsley\", role = c(\"ctb\", \"cph\"), comment = \"React Table library\"), person(family = \"Emotion team and other contributors\", role = c(\"ctb\", \"cph\"), comment = \"Emotion library\"), person(\"Kent\", \"Russell\", role = c(\"ctb\", \"cph\"), comment = \"reactR package\"), person(\"Ramnath\", \"Vaidyanathan\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Joe\", \"Cheng\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"JJ\", \"Allaire\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Yihui\", \"Xie\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(\"Kenton\", \"Russell\", role = c(\"ctb\", \"cph\"), comment = \"htmlwidgets package\"), person(family = \"Facebook, Inc. and its affiliates\", role = c(\"ctb\", \"cph\"), comment = \"React library\"), person(family = \"FormatJS\", role = c(\"ctb\", \"cph\"), comment = \"FormatJS libraries\"), person(family = \"Feross Aboukhadijeh, and other contributors\", role = c(\"ctb\", \"cph\"), comment = \"buffer library\"), person(\"Roman\", \"Shtylman\", role = c(\"ctb\", \"cph\"), comment = \"process library\"), person(\"James\", \"Halliday\", role = c(\"ctb\", \"cph\"), comment = \"stream-browserify library\"), person(family = \"Posit Software, PBC\", role = c(\"fnd\", \"cph\")) )", 1662 | "Description": "Interactive data tables for R, based on the 'React Table' JavaScript library. Provides an HTML widget that can be used in 'R Markdown' or 'Quarto' documents, 'Shiny' applications, or viewed from an R console.", 1663 | "License": "MIT + file LICENSE", 1664 | "URL": "https://glin.github.io/reactable/, https://github.com/glin/reactable", 1665 | "BugReports": "https://github.com/glin/reactable/issues", 1666 | "Depends": [ 1667 | "R (>= 3.1)" 1668 | ], 1669 | "Imports": [ 1670 | "digest", 1671 | "htmltools (>= 0.5.2)", 1672 | "htmlwidgets (>= 1.5.3)", 1673 | "jsonlite", 1674 | "reactR" 1675 | ], 1676 | "Suggests": [ 1677 | "covr", 1678 | "crosstalk", 1679 | "dplyr", 1680 | "fontawesome", 1681 | "knitr", 1682 | "leaflet", 1683 | "MASS", 1684 | "rmarkdown", 1685 | "shiny", 1686 | "sparkline", 1687 | "testthat", 1688 | "tippy", 1689 | "V8" 1690 | ], 1691 | "Encoding": "UTF-8", 1692 | "RoxygenNote": "7.2.1", 1693 | "Config/testthat/edition": "3", 1694 | "NeedsCompilation": "no", 1695 | "Author": "Greg Lin [aut, cre], Tanner Linsley [ctb, cph] (React Table library), Emotion team and other contributors [ctb, cph] (Emotion library), Kent Russell [ctb, cph] (reactR package), Ramnath Vaidyanathan [ctb, cph] (htmlwidgets package), Joe Cheng [ctb, cph] (htmlwidgets package), JJ Allaire [ctb, cph] (htmlwidgets package), Yihui Xie [ctb, cph] (htmlwidgets package), Kenton Russell [ctb, cph] (htmlwidgets package), Facebook, Inc. and its affiliates [ctb, cph] (React library), FormatJS [ctb, cph] (FormatJS libraries), Feross Aboukhadijeh, and other contributors [ctb, cph] (buffer library), Roman Shtylman [ctb, cph] (process library), James Halliday [ctb, cph] (stream-browserify library), Posit Software, PBC [fnd, cph]", 1696 | "Maintainer": "Greg Lin ", 1697 | "Repository": "RSPM" 1698 | }, 1699 | "renv": { 1700 | "Package": "renv", 1701 | "Version": "1.1.4", 1702 | "Source": "Repository", 1703 | "Type": "Package", 1704 | "Title": "Project Environments", 1705 | "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\")) )", 1706 | "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.", 1707 | "License": "MIT + file LICENSE", 1708 | "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", 1709 | "BugReports": "https://github.com/rstudio/renv/issues", 1710 | "Imports": [ 1711 | "utils" 1712 | ], 1713 | "Suggests": [ 1714 | "BiocManager", 1715 | "cli", 1716 | "compiler", 1717 | "covr", 1718 | "cpp11", 1719 | "devtools", 1720 | "gitcreds", 1721 | "jsonlite", 1722 | "jsonvalidate", 1723 | "knitr", 1724 | "miniUI", 1725 | "modules", 1726 | "packrat", 1727 | "pak", 1728 | "R6", 1729 | "remotes", 1730 | "reticulate", 1731 | "rmarkdown", 1732 | "rstudioapi", 1733 | "shiny", 1734 | "testthat", 1735 | "uuid", 1736 | "waldo", 1737 | "yaml", 1738 | "webfakes" 1739 | ], 1740 | "Encoding": "UTF-8", 1741 | "RoxygenNote": "7.3.2", 1742 | "VignetteBuilder": "knitr", 1743 | "Config/Needs/website": "tidyverse/tidytemplate", 1744 | "Config/testthat/edition": "3", 1745 | "Config/testthat/parallel": "true", 1746 | "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", 1747 | "NeedsCompilation": "no", 1748 | "Author": "Kevin Ushey [aut, cre] (), Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]", 1749 | "Maintainer": "Kevin Ushey ", 1750 | "Repository": "P3M" 1751 | }, 1752 | "rlang": { 1753 | "Package": "rlang", 1754 | "Version": "1.1.6", 1755 | "Source": "Repository", 1756 | "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", 1757 | "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", 1758 | "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\")) )", 1759 | "License": "MIT + file LICENSE", 1760 | "ByteCompile": "true", 1761 | "Biarch": "true", 1762 | "Depends": [ 1763 | "R (>= 3.5.0)" 1764 | ], 1765 | "Imports": [ 1766 | "utils" 1767 | ], 1768 | "Suggests": [ 1769 | "cli (>= 3.1.0)", 1770 | "covr", 1771 | "crayon", 1772 | "desc", 1773 | "fs", 1774 | "glue", 1775 | "knitr", 1776 | "magrittr", 1777 | "methods", 1778 | "pillar", 1779 | "pkgload", 1780 | "rmarkdown", 1781 | "stats", 1782 | "testthat (>= 3.2.0)", 1783 | "tibble", 1784 | "usethis", 1785 | "vctrs (>= 0.2.3)", 1786 | "withr" 1787 | ], 1788 | "Enhances": [ 1789 | "winch" 1790 | ], 1791 | "Encoding": "UTF-8", 1792 | "RoxygenNote": "7.3.2", 1793 | "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", 1794 | "BugReports": "https://github.com/r-lib/rlang/issues", 1795 | "Config/build/compilation-database": "true", 1796 | "Config/testthat/edition": "3", 1797 | "Config/Needs/website": "dplyr, tidyverse/tidytemplate", 1798 | "NeedsCompilation": "yes", 1799 | "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]", 1800 | "Maintainer": "Lionel Henry ", 1801 | "Repository": "P3M" 1802 | }, 1803 | "rmarkdown": { 1804 | "Package": "rmarkdown", 1805 | "Version": "2.29", 1806 | "Source": "Repository", 1807 | "Type": "Package", 1808 | "Title": "Dynamic Documents for R", 1809 | "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\") )", 1810 | "Description": "Convert R Markdown documents into a variety of formats.", 1811 | "License": "GPL-3", 1812 | "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", 1813 | "BugReports": "https://github.com/rstudio/rmarkdown/issues", 1814 | "Depends": [ 1815 | "R (>= 3.0)" 1816 | ], 1817 | "Imports": [ 1818 | "bslib (>= 0.2.5.1)", 1819 | "evaluate (>= 0.13)", 1820 | "fontawesome (>= 0.5.0)", 1821 | "htmltools (>= 0.5.1)", 1822 | "jquerylib", 1823 | "jsonlite", 1824 | "knitr (>= 1.43)", 1825 | "methods", 1826 | "tinytex (>= 0.31)", 1827 | "tools", 1828 | "utils", 1829 | "xfun (>= 0.36)", 1830 | "yaml (>= 2.1.19)" 1831 | ], 1832 | "Suggests": [ 1833 | "digest", 1834 | "dygraphs", 1835 | "fs", 1836 | "rsconnect", 1837 | "downlit (>= 0.4.0)", 1838 | "katex (>= 1.4.0)", 1839 | "sass (>= 0.4.0)", 1840 | "shiny (>= 1.6.0)", 1841 | "testthat (>= 3.0.3)", 1842 | "tibble", 1843 | "vctrs", 1844 | "cleanrmd", 1845 | "withr (>= 2.4.2)", 1846 | "xml2" 1847 | ], 1848 | "VignetteBuilder": "knitr", 1849 | "Config/Needs/website": "rstudio/quillt, pkgdown", 1850 | "Config/testthat/edition": "3", 1851 | "Encoding": "UTF-8", 1852 | "RoxygenNote": "7.3.2", 1853 | "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", 1854 | "NeedsCompilation": "no", 1855 | "Author": "JJ Allaire [aut], Yihui Xie [aut, cre] (), Christophe Dervieux [aut] (), Jonathan McPherson [aut], Javier Luraschi [aut], Kevin Ushey [aut], Aron Atkins [aut], Hadley Wickham [aut], Joe Cheng [aut], Winston Chang [aut], Richard Iannone [aut] (), Andrew Dunning [ctb] (), Atsushi Yasumoto [ctb, cph] (, Number sections Lua filter), Barret Schloerke [ctb], Carson Sievert [ctb] (), Devon Ryan [ctb] (), Frederik Aust [ctb] (), Jeff Allen [ctb], JooYoung Seo [ctb] (), 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)", 1856 | "Maintainer": "Yihui Xie ", 1857 | "Repository": "RSPM" 1858 | }, 1859 | "sass": { 1860 | "Package": "sass", 1861 | "Version": "0.4.10", 1862 | "Source": "Repository", 1863 | "Type": "Package", 1864 | "Title": "Syntactically Awesome Style Sheets ('Sass')", 1865 | "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.", 1866 | "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\") )", 1867 | "License": "MIT + file LICENSE", 1868 | "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", 1869 | "BugReports": "https://github.com/rstudio/sass/issues", 1870 | "Encoding": "UTF-8", 1871 | "RoxygenNote": "7.3.2", 1872 | "SystemRequirements": "GNU make", 1873 | "Imports": [ 1874 | "fs (>= 1.2.4)", 1875 | "rlang (>= 0.4.10)", 1876 | "htmltools (>= 0.5.1)", 1877 | "R6", 1878 | "rappdirs" 1879 | ], 1880 | "Suggests": [ 1881 | "testthat", 1882 | "knitr", 1883 | "rmarkdown", 1884 | "withr", 1885 | "shiny", 1886 | "curl" 1887 | ], 1888 | "VignetteBuilder": "knitr", 1889 | "Config/testthat/edition": "3", 1890 | "NeedsCompilation": "yes", 1891 | "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)", 1892 | "Maintainer": "Carson Sievert ", 1893 | "Repository": "P3M" 1894 | }, 1895 | "stringi": { 1896 | "Package": "stringi", 1897 | "Version": "1.8.7", 1898 | "Source": "Repository", 1899 | "Date": "2025-03-27", 1900 | "Title": "Fast and Portable Character String Processing Facilities", 1901 | "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, ).", 1902 | "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", 1903 | "BugReports": "https://github.com/gagolews/stringi/issues", 1904 | "SystemRequirements": "ICU4C (>= 61, optional)", 1905 | "Type": "Package", 1906 | "Depends": [ 1907 | "R (>= 3.4)" 1908 | ], 1909 | "Imports": [ 1910 | "tools", 1911 | "utils", 1912 | "stats" 1913 | ], 1914 | "Biarch": "TRUE", 1915 | "License": "file LICENSE", 1916 | "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\") )", 1917 | "RoxygenNote": "7.3.2", 1918 | "Encoding": "UTF-8", 1919 | "NeedsCompilation": "yes", 1920 | "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", 1921 | "Maintainer": "Marek Gagolewski ", 1922 | "License_is_FOSS": "yes", 1923 | "Repository": "P3M" 1924 | }, 1925 | "stringr": { 1926 | "Package": "stringr", 1927 | "Version": "1.5.1", 1928 | "Source": "Repository", 1929 | "Title": "Simple, Consistent Wrappers for Common String Operations", 1930 | "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", 1931 | "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.", 1932 | "License": "MIT + file LICENSE", 1933 | "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", 1934 | "BugReports": "https://github.com/tidyverse/stringr/issues", 1935 | "Depends": [ 1936 | "R (>= 3.6)" 1937 | ], 1938 | "Imports": [ 1939 | "cli", 1940 | "glue (>= 1.6.1)", 1941 | "lifecycle (>= 1.0.3)", 1942 | "magrittr", 1943 | "rlang (>= 1.0.0)", 1944 | "stringi (>= 1.5.3)", 1945 | "vctrs (>= 0.4.0)" 1946 | ], 1947 | "Suggests": [ 1948 | "covr", 1949 | "dplyr", 1950 | "gt", 1951 | "htmltools", 1952 | "htmlwidgets", 1953 | "knitr", 1954 | "rmarkdown", 1955 | "testthat (>= 3.0.0)", 1956 | "tibble" 1957 | ], 1958 | "VignetteBuilder": "knitr", 1959 | "Config/Needs/website": "tidyverse/tidytemplate", 1960 | "Config/testthat/edition": "3", 1961 | "Encoding": "UTF-8", 1962 | "LazyData": "true", 1963 | "RoxygenNote": "7.2.3", 1964 | "NeedsCompilation": "no", 1965 | "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", 1966 | "Maintainer": "Hadley Wickham ", 1967 | "Repository": "RSPM" 1968 | }, 1969 | "sys": { 1970 | "Package": "sys", 1971 | "Version": "3.4.3", 1972 | "Source": "Repository", 1973 | "Type": "Package", 1974 | "Title": "Powerful and Reliable Tools for Running System Commands in R", 1975 | "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\"))", 1976 | "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.", 1977 | "License": "MIT + file LICENSE", 1978 | "URL": "https://jeroen.r-universe.dev/sys", 1979 | "BugReports": "https://github.com/jeroen/sys/issues", 1980 | "Encoding": "UTF-8", 1981 | "RoxygenNote": "7.1.1", 1982 | "Suggests": [ 1983 | "unix (>= 1.4)", 1984 | "spelling", 1985 | "testthat" 1986 | ], 1987 | "Language": "en-US", 1988 | "NeedsCompilation": "yes", 1989 | "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", 1990 | "Maintainer": "Jeroen Ooms ", 1991 | "Repository": "RSPM" 1992 | }, 1993 | "systemfonts": { 1994 | "Package": "systemfonts", 1995 | "Version": "1.2.2", 1996 | "Source": "Repository", 1997 | "Type": "Package", 1998 | "Title": "System Native Font Finding", 1999 | "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Jeroen\", \"Ooms\", , \"jeroen@berkeley.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Devon\", \"Govett\", role = \"aut\", comment = \"Author of font-manager\"), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", 2000 | "Description": "Provides system native access to the font catalogue. As font handling varies between systems it is difficult to correctly locate installed fonts across different operating systems. The 'systemfonts' package provides bindings to the native libraries on Windows, macOS and Linux for finding font files that can then be used further by e.g. graphic devices. The main use is intended to be from compiled code but 'systemfonts' also provides access from R.", 2001 | "License": "MIT + file LICENSE", 2002 | "URL": "https://github.com/r-lib/systemfonts, https://systemfonts.r-lib.org", 2003 | "BugReports": "https://github.com/r-lib/systemfonts/issues", 2004 | "Depends": [ 2005 | "R (>= 3.2.0)" 2006 | ], 2007 | "Suggests": [ 2008 | "covr", 2009 | "farver", 2010 | "graphics", 2011 | "knitr", 2012 | "rmarkdown", 2013 | "testthat (>= 2.1.0)" 2014 | ], 2015 | "LinkingTo": [ 2016 | "cpp11 (>= 0.2.1)" 2017 | ], 2018 | "VignetteBuilder": "knitr", 2019 | "Encoding": "UTF-8", 2020 | "RoxygenNote": "7.3.2", 2021 | "SystemRequirements": "fontconfig, freetype2", 2022 | "Config/Needs/website": "tidyverse/tidytemplate", 2023 | "Imports": [ 2024 | "grid", 2025 | "jsonlite", 2026 | "lifecycle", 2027 | "tools", 2028 | "utils" 2029 | ], 2030 | "Config/build/compilation-database": "true", 2031 | "NeedsCompilation": "yes", 2032 | "Author": "Thomas Lin Pedersen [aut, cre] (), Jeroen Ooms [aut] (), Devon Govett [aut] (Author of font-manager), Posit, PBC [cph, fnd]", 2033 | "Maintainer": "Thomas Lin Pedersen ", 2034 | "Repository": "P3M" 2035 | }, 2036 | "textshaping": { 2037 | "Package": "textshaping", 2038 | "Version": "1.0.0", 2039 | "Source": "Repository", 2040 | "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", 2041 | "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", 2042 | "Description": "Provides access to the text shaping functionality in the 'HarfBuzz' library and the bidirectional algorithm in the 'Fribidi' library. 'textshaping' is a low-level utility package mainly for graphic devices that expands upon the font tool-set provided by the 'systemfonts' package.", 2043 | "License": "MIT + file LICENSE", 2044 | "URL": "https://github.com/r-lib/textshaping", 2045 | "BugReports": "https://github.com/r-lib/textshaping/issues", 2046 | "Depends": [ 2047 | "R (>= 3.2.0)" 2048 | ], 2049 | "Imports": [ 2050 | "lifecycle", 2051 | "stats", 2052 | "stringi", 2053 | "systemfonts (>= 1.1.0)", 2054 | "utils" 2055 | ], 2056 | "Suggests": [ 2057 | "covr", 2058 | "grDevices", 2059 | "grid", 2060 | "knitr", 2061 | "rmarkdown", 2062 | "testthat (>= 3.0.0)" 2063 | ], 2064 | "LinkingTo": [ 2065 | "cpp11 (>= 0.2.1)", 2066 | "systemfonts (>= 1.0.0)" 2067 | ], 2068 | "VignetteBuilder": "knitr", 2069 | "Encoding": "UTF-8", 2070 | "RoxygenNote": "7.3.2", 2071 | "SystemRequirements": "freetype2, harfbuzz, fribidi", 2072 | "Config/build/compilation-database": "true", 2073 | "Config/testthat/edition": "3", 2074 | "NeedsCompilation": "yes", 2075 | "Author": "Thomas Lin Pedersen [cre, aut] (), Posit, PBC [cph, fnd]", 2076 | "Maintainer": "Thomas Lin Pedersen ", 2077 | "Repository": "RSPM" 2078 | }, 2079 | "tibble": { 2080 | "Package": "tibble", 2081 | "Version": "3.2.1", 2082 | "Source": "Repository", 2083 | "Title": "Simple Data Frames", 2084 | "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\", email = \"hadley@rstudio.com\"), person(given = \"Romain\", family = \"Francois\", role = \"ctb\", email = \"romain@r-enthusiasts.com\"), person(given = \"Jennifer\", family = \"Bryan\", role = \"ctb\", email = \"jenny@rstudio.com\"), person(given = \"RStudio\", role = c(\"cph\", \"fnd\")))", 2085 | "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", 2086 | "License": "MIT + file LICENSE", 2087 | "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", 2088 | "BugReports": "https://github.com/tidyverse/tibble/issues", 2089 | "Depends": [ 2090 | "R (>= 3.4.0)" 2091 | ], 2092 | "Imports": [ 2093 | "fansi (>= 0.4.0)", 2094 | "lifecycle (>= 1.0.0)", 2095 | "magrittr", 2096 | "methods", 2097 | "pillar (>= 1.8.1)", 2098 | "pkgconfig", 2099 | "rlang (>= 1.0.2)", 2100 | "utils", 2101 | "vctrs (>= 0.4.2)" 2102 | ], 2103 | "Suggests": [ 2104 | "bench", 2105 | "bit64", 2106 | "blob", 2107 | "brio", 2108 | "callr", 2109 | "cli", 2110 | "covr", 2111 | "crayon (>= 1.3.4)", 2112 | "DiagrammeR", 2113 | "dplyr", 2114 | "evaluate", 2115 | "formattable", 2116 | "ggplot2", 2117 | "here", 2118 | "hms", 2119 | "htmltools", 2120 | "knitr", 2121 | "lubridate", 2122 | "mockr", 2123 | "nycflights13", 2124 | "pkgbuild", 2125 | "pkgload", 2126 | "purrr", 2127 | "rmarkdown", 2128 | "stringi", 2129 | "testthat (>= 3.0.2)", 2130 | "tidyr", 2131 | "withr" 2132 | ], 2133 | "VignetteBuilder": "knitr", 2134 | "Encoding": "UTF-8", 2135 | "RoxygenNote": "7.2.3", 2136 | "Config/testthat/edition": "3", 2137 | "Config/testthat/parallel": "true", 2138 | "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", 2139 | "Config/autostyle/scope": "line_breaks", 2140 | "Config/autostyle/strict": "true", 2141 | "Config/autostyle/rmd": "false", 2142 | "Config/Needs/website": "tidyverse/tidytemplate", 2143 | "NeedsCompilation": "yes", 2144 | "Author": "Kirill Müller [aut, cre] (), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], RStudio [cph, fnd]", 2145 | "Maintainer": "Kirill Müller ", 2146 | "Repository": "RSPM" 2147 | }, 2148 | "tidyr": { 2149 | "Package": "tidyr", 2150 | "Version": "1.3.1", 2151 | "Source": "Repository", 2152 | "Title": "Tidy Messy Data", 2153 | "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\")) )", 2154 | "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).", 2155 | "License": "MIT + file LICENSE", 2156 | "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", 2157 | "BugReports": "https://github.com/tidyverse/tidyr/issues", 2158 | "Depends": [ 2159 | "R (>= 3.6)" 2160 | ], 2161 | "Imports": [ 2162 | "cli (>= 3.4.1)", 2163 | "dplyr (>= 1.0.10)", 2164 | "glue", 2165 | "lifecycle (>= 1.0.3)", 2166 | "magrittr", 2167 | "purrr (>= 1.0.1)", 2168 | "rlang (>= 1.1.1)", 2169 | "stringr (>= 1.5.0)", 2170 | "tibble (>= 2.1.1)", 2171 | "tidyselect (>= 1.2.0)", 2172 | "utils", 2173 | "vctrs (>= 0.5.2)" 2174 | ], 2175 | "Suggests": [ 2176 | "covr", 2177 | "data.table", 2178 | "knitr", 2179 | "readr", 2180 | "repurrrsive (>= 1.1.0)", 2181 | "rmarkdown", 2182 | "testthat (>= 3.0.0)" 2183 | ], 2184 | "LinkingTo": [ 2185 | "cpp11 (>= 0.4.0)" 2186 | ], 2187 | "VignetteBuilder": "knitr", 2188 | "Config/Needs/website": "tidyverse/tidytemplate", 2189 | "Config/testthat/edition": "3", 2190 | "Encoding": "UTF-8", 2191 | "LazyData": "true", 2192 | "RoxygenNote": "7.3.0", 2193 | "NeedsCompilation": "yes", 2194 | "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", 2195 | "Maintainer": "Hadley Wickham ", 2196 | "Repository": "RSPM" 2197 | }, 2198 | "tidyselect": { 2199 | "Package": "tidyselect", 2200 | "Version": "1.2.1", 2201 | "Source": "Repository", 2202 | "Title": "Select from a Set of Strings", 2203 | "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\")) )", 2204 | "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.", 2205 | "License": "MIT + file LICENSE", 2206 | "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", 2207 | "BugReports": "https://github.com/r-lib/tidyselect/issues", 2208 | "Depends": [ 2209 | "R (>= 3.4)" 2210 | ], 2211 | "Imports": [ 2212 | "cli (>= 3.3.0)", 2213 | "glue (>= 1.3.0)", 2214 | "lifecycle (>= 1.0.3)", 2215 | "rlang (>= 1.0.4)", 2216 | "vctrs (>= 0.5.2)", 2217 | "withr" 2218 | ], 2219 | "Suggests": [ 2220 | "covr", 2221 | "crayon", 2222 | "dplyr", 2223 | "knitr", 2224 | "magrittr", 2225 | "rmarkdown", 2226 | "stringr", 2227 | "testthat (>= 3.1.1)", 2228 | "tibble (>= 2.1.3)" 2229 | ], 2230 | "VignetteBuilder": "knitr", 2231 | "ByteCompile": "true", 2232 | "Config/testthat/edition": "3", 2233 | "Config/Needs/website": "tidyverse/tidytemplate", 2234 | "Encoding": "UTF-8", 2235 | "RoxygenNote": "7.3.0.9000", 2236 | "NeedsCompilation": "yes", 2237 | "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", 2238 | "Maintainer": "Lionel Henry ", 2239 | "Repository": "RSPM" 2240 | }, 2241 | "timechange": { 2242 | "Package": "timechange", 2243 | "Version": "0.3.0", 2244 | "Source": "Repository", 2245 | "Title": "Efficient Manipulation of Date-Times", 2246 | "Authors@R": "c(person(\"Vitalie\", \"Spinu\", email = \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Google Inc.\", role = c(\"ctb\", \"cph\")))", 2247 | "Description": "Efficient routines for manipulation of date-time objects while accounting for time-zones and daylight saving times. The package includes utilities for updating of date-time components (year, month, day etc.), modification of time-zones, rounding of date-times, period addition and subtraction etc. Parts of the 'CCTZ' source code, released under the Apache 2.0 License, are included in this package. See for more details.", 2248 | "Depends": [ 2249 | "R (>= 3.3)" 2250 | ], 2251 | "License": "GPL (>= 3)", 2252 | "Encoding": "UTF-8", 2253 | "LinkingTo": [ 2254 | "cpp11 (>= 0.2.7)" 2255 | ], 2256 | "Suggests": [ 2257 | "testthat (>= 0.7.1.99)", 2258 | "knitr" 2259 | ], 2260 | "SystemRequirements": "A system with zoneinfo data (e.g. /usr/share/zoneinfo) as well as a recent-enough C++11 compiler (such as g++-4.8 or later). On Windows the zoneinfo included with R is used.", 2261 | "BugReports": "https://github.com/vspinu/timechange/issues", 2262 | "URL": "https://github.com/vspinu/timechange/", 2263 | "RoxygenNote": "7.2.1", 2264 | "NeedsCompilation": "yes", 2265 | "Author": "Vitalie Spinu [aut, cre], Google Inc. [ctb, cph]", 2266 | "Maintainer": "Vitalie Spinu ", 2267 | "Repository": "RSPM" 2268 | }, 2269 | "tinytex": { 2270 | "Package": "tinytex", 2271 | "Version": "0.57", 2272 | "Source": "Repository", 2273 | "Type": "Package", 2274 | "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", 2275 | "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() )", 2276 | "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.", 2277 | "Imports": [ 2278 | "xfun (>= 0.48)" 2279 | ], 2280 | "Suggests": [ 2281 | "testit", 2282 | "rstudioapi" 2283 | ], 2284 | "License": "MIT + file LICENSE", 2285 | "URL": "https://github.com/rstudio/tinytex", 2286 | "BugReports": "https://github.com/rstudio/tinytex/issues", 2287 | "Encoding": "UTF-8", 2288 | "RoxygenNote": "7.3.2", 2289 | "NeedsCompilation": "no", 2290 | "Author": "Yihui Xie [aut, cre, cph] (), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (), Devon Ryan [ctb] (), Ethan Heinzen [ctb], Fernando Cagua [ctb]", 2291 | "Maintainer": "Yihui Xie ", 2292 | "Repository": "P3M" 2293 | }, 2294 | "utf8": { 2295 | "Package": "utf8", 2296 | "Version": "1.2.4", 2297 | "Source": "Repository", 2298 | "Title": "Unicode Text Processing", 2299 | "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\"), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", 2300 | "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", 2301 | "License": "Apache License (== 2.0) | file LICENSE", 2302 | "URL": "https://ptrckprry.com/r-utf8/, https://github.com/patperry/r-utf8", 2303 | "BugReports": "https://github.com/patperry/r-utf8/issues", 2304 | "Depends": [ 2305 | "R (>= 2.10)" 2306 | ], 2307 | "Suggests": [ 2308 | "cli", 2309 | "covr", 2310 | "knitr", 2311 | "rlang", 2312 | "rmarkdown", 2313 | "testthat (>= 3.0.0)", 2314 | "withr" 2315 | ], 2316 | "VignetteBuilder": "knitr, rmarkdown", 2317 | "Config/testthat/edition": "3", 2318 | "Encoding": "UTF-8", 2319 | "RoxygenNote": "7.2.3", 2320 | "NeedsCompilation": "yes", 2321 | "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre], Unicode, Inc. [cph, dtc] (Unicode Character Database)", 2322 | "Maintainer": "Kirill Müller ", 2323 | "Repository": "RSPM" 2324 | }, 2325 | "vctrs": { 2326 | "Package": "vctrs", 2327 | "Version": "0.6.5", 2328 | "Source": "Repository", 2329 | "Title": "Vector Helpers", 2330 | "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\")) )", 2331 | "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.", 2332 | "License": "MIT + file LICENSE", 2333 | "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", 2334 | "BugReports": "https://github.com/r-lib/vctrs/issues", 2335 | "Depends": [ 2336 | "R (>= 3.5.0)" 2337 | ], 2338 | "Imports": [ 2339 | "cli (>= 3.4.0)", 2340 | "glue", 2341 | "lifecycle (>= 1.0.3)", 2342 | "rlang (>= 1.1.0)" 2343 | ], 2344 | "Suggests": [ 2345 | "bit64", 2346 | "covr", 2347 | "crayon", 2348 | "dplyr (>= 0.8.5)", 2349 | "generics", 2350 | "knitr", 2351 | "pillar (>= 1.4.4)", 2352 | "pkgdown (>= 2.0.1)", 2353 | "rmarkdown", 2354 | "testthat (>= 3.0.0)", 2355 | "tibble (>= 3.1.3)", 2356 | "waldo (>= 0.2.0)", 2357 | "withr", 2358 | "xml2", 2359 | "zeallot" 2360 | ], 2361 | "VignetteBuilder": "knitr", 2362 | "Config/Needs/website": "tidyverse/tidytemplate", 2363 | "Config/testthat/edition": "3", 2364 | "Encoding": "UTF-8", 2365 | "Language": "en-GB", 2366 | "RoxygenNote": "7.2.3", 2367 | "NeedsCompilation": "yes", 2368 | "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]", 2369 | "Maintainer": "Davis Vaughan ", 2370 | "Repository": "RSPM" 2371 | }, 2372 | "whisker": { 2373 | "Package": "whisker", 2374 | "Version": "0.4.1", 2375 | "Source": "Repository", 2376 | "Maintainer": "Edwin de Jonge ", 2377 | "License": "GPL-3", 2378 | "Title": "{{mustache}} for R, Logicless Templating", 2379 | "Type": "Package", 2380 | "LazyLoad": "yes", 2381 | "Author": "Edwin de Jonge", 2382 | "Description": "Implements 'Mustache' logicless templating.", 2383 | "URL": "https://github.com/edwindj/whisker", 2384 | "Suggests": [ 2385 | "markdown" 2386 | ], 2387 | "RoxygenNote": "6.1.1", 2388 | "NeedsCompilation": "no", 2389 | "Repository": "RSPM", 2390 | "Encoding": "UTF-8" 2391 | }, 2392 | "withr": { 2393 | "Package": "withr", 2394 | "Version": "3.0.2", 2395 | "Source": "Repository", 2396 | "Title": "Run Code 'With' Temporarily Modified Global State", 2397 | "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\")) )", 2398 | "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.", 2399 | "License": "MIT + file LICENSE", 2400 | "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", 2401 | "BugReports": "https://github.com/r-lib/withr/issues", 2402 | "Depends": [ 2403 | "R (>= 3.6.0)" 2404 | ], 2405 | "Imports": [ 2406 | "graphics", 2407 | "grDevices" 2408 | ], 2409 | "Suggests": [ 2410 | "callr", 2411 | "DBI", 2412 | "knitr", 2413 | "methods", 2414 | "rlang", 2415 | "rmarkdown (>= 2.12)", 2416 | "RSQLite", 2417 | "testthat (>= 3.0.0)" 2418 | ], 2419 | "VignetteBuilder": "knitr", 2420 | "Config/Needs/website": "tidyverse/tidytemplate", 2421 | "Config/testthat/edition": "3", 2422 | "Encoding": "UTF-8", 2423 | "RoxygenNote": "7.3.2", 2424 | "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'", 2425 | "NeedsCompilation": "no", 2426 | "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]", 2427 | "Maintainer": "Lionel Henry ", 2428 | "Repository": "RSPM" 2429 | }, 2430 | "xfun": { 2431 | "Package": "xfun", 2432 | "Version": "0.52", 2433 | "Source": "Repository", 2434 | "Type": "Package", 2435 | "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", 2436 | "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() )", 2437 | "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", 2438 | "Depends": [ 2439 | "R (>= 3.2.0)" 2440 | ], 2441 | "Imports": [ 2442 | "grDevices", 2443 | "stats", 2444 | "tools" 2445 | ], 2446 | "Suggests": [ 2447 | "testit", 2448 | "parallel", 2449 | "codetools", 2450 | "methods", 2451 | "rstudioapi", 2452 | "tinytex (>= 0.30)", 2453 | "mime", 2454 | "litedown (>= 0.4)", 2455 | "commonmark", 2456 | "knitr (>= 1.50)", 2457 | "remotes", 2458 | "pak", 2459 | "curl", 2460 | "xml2", 2461 | "jsonlite", 2462 | "magick", 2463 | "yaml", 2464 | "qs" 2465 | ], 2466 | "License": "MIT + file LICENSE", 2467 | "URL": "https://github.com/yihui/xfun", 2468 | "BugReports": "https://github.com/yihui/xfun/issues", 2469 | "Encoding": "UTF-8", 2470 | "RoxygenNote": "7.3.2", 2471 | "VignetteBuilder": "litedown", 2472 | "NeedsCompilation": "yes", 2473 | "Author": "Yihui Xie [aut, cre, cph] (, https://yihui.org), Wush Wu [ctb], Daijiang Li [ctb], Xianying Tan [ctb], Salim Brüggemann [ctb] (), Christophe Dervieux [ctb]", 2474 | "Maintainer": "Yihui Xie ", 2475 | "Repository": "P3M" 2476 | }, 2477 | "xml2": { 2478 | "Package": "xml2", 2479 | "Version": "1.3.8", 2480 | "Source": "Repository", 2481 | "Title": "Parse XML", 2482 | "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Jeroen\", \"Ooms\", email = \"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Foundation\", role = \"ctb\", comment = \"Copy of R-project homepage cached as example\") )", 2483 | "Description": "Bindings to 'libxml2' for working with XML data using a simple, consistent interface based on 'XPath' expressions. Also supports XML schema validation; for 'XSLT' transformations see the 'xslt' package.", 2484 | "License": "MIT + file LICENSE", 2485 | "URL": "https://xml2.r-lib.org, https://r-lib.r-universe.dev/xml2", 2486 | "BugReports": "https://github.com/r-lib/xml2/issues", 2487 | "Depends": [ 2488 | "R (>= 3.6.0)" 2489 | ], 2490 | "Imports": [ 2491 | "cli", 2492 | "methods", 2493 | "rlang (>= 1.1.0)" 2494 | ], 2495 | "Suggests": [ 2496 | "covr", 2497 | "curl", 2498 | "httr", 2499 | "knitr", 2500 | "magrittr", 2501 | "mockery", 2502 | "rmarkdown", 2503 | "testthat (>= 3.2.0)", 2504 | "xslt" 2505 | ], 2506 | "VignetteBuilder": "knitr", 2507 | "Config/Needs/website": "tidyverse/tidytemplate", 2508 | "Encoding": "UTF-8", 2509 | "RoxygenNote": "7.2.3", 2510 | "SystemRequirements": "libxml2: libxml2-dev (deb), libxml2-devel (rpm)", 2511 | "Collate": "'S4.R' 'as_list.R' 'xml_parse.R' 'as_xml_document.R' 'classes.R' 'format.R' 'import-standalone-obj-type.R' 'import-standalone-purrr.R' 'import-standalone-types-check.R' 'init.R' 'nodeset_apply.R' 'paths.R' 'utils.R' 'xml2-package.R' 'xml_attr.R' 'xml_children.R' 'xml_document.R' 'xml_find.R' 'xml_missing.R' 'xml_modify.R' 'xml_name.R' 'xml_namespaces.R' 'xml_node.R' 'xml_nodeset.R' 'xml_path.R' 'xml_schema.R' 'xml_serialize.R' 'xml_structure.R' 'xml_text.R' 'xml_type.R' 'xml_url.R' 'xml_write.R' 'zzz.R'", 2512 | "Config/testthat/edition": "3", 2513 | "NeedsCompilation": "yes", 2514 | "Author": "Hadley Wickham [aut], Jim Hester [aut], Jeroen Ooms [aut, cre], Posit Software, PBC [cph, fnd], R Foundation [ctb] (Copy of R-project homepage cached as example)", 2515 | "Maintainer": "Jeroen Ooms ", 2516 | "Repository": "RSPM" 2517 | }, 2518 | "yaml": { 2519 | "Package": "yaml", 2520 | "Version": "2.3.10", 2521 | "Source": "Repository", 2522 | "Type": "Package", 2523 | "Title": "Methods to Convert R Data to YAML and Back", 2524 | "Date": "2024-07-22", 2525 | "Suggests": [ 2526 | "RUnit" 2527 | ], 2528 | "Author": "Shawn P Garbett [aut], Jeremy Stephens [aut, cre], Kirill Simonov [aut], Yihui Xie [ctb], Zhuoer Dong [ctb], Hadley Wickham [ctb], Jeffrey Horner [ctb], reikoch [ctb], Will Beasley [ctb], Brendan O'Connor [ctb], Gregory R. Warnes [ctb], Michael Quinn [ctb], Zhian N. Kamvar [ctb], Charlie Gao [ctb]", 2529 | "Maintainer": "Shawn Garbett ", 2530 | "License": "BSD_3_clause + file LICENSE", 2531 | "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", 2532 | "URL": "https://github.com/vubiostat/r-yaml/", 2533 | "BugReports": "https://github.com/vubiostat/r-yaml/issues", 2534 | "NeedsCompilation": "yes", 2535 | "Repository": "RSPM", 2536 | "Encoding": "UTF-8" 2537 | } 2538 | } 2539 | } 2540 | -------------------------------------------------------------------------------- /renv/.gitignore: -------------------------------------------------------------------------------- 1 | sandbox/ 2 | library/ 3 | local/ 4 | cellar/ 5 | lock/ 6 | python/ 7 | staging/ 8 | -------------------------------------------------------------------------------- /renv/activate.R: -------------------------------------------------------------------------------- 1 | 2 | local({ 3 | 4 | # the requested version of renv 5 | version <- "1.1.4" 6 | attr(version, "sha") <- NULL 7 | 8 | # the project directory 9 | project <- Sys.getenv("RENV_PROJECT") 10 | if (!nzchar(project)) 11 | project <- getwd() 12 | 13 | # use start-up diagnostics if enabled 14 | diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") 15 | if (diagnostics) { 16 | start <- Sys.time() 17 | profile <- tempfile("renv-startup-", fileext = ".Rprof") 18 | utils::Rprof(profile) 19 | on.exit({ 20 | utils::Rprof(NULL) 21 | elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) 22 | writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) 23 | writeLines(sprintf("- Profile: %s", profile)) 24 | print(utils::summaryRprof(profile)) 25 | }, add = TRUE) 26 | } 27 | 28 | # figure out whether the autoloader is enabled 29 | enabled <- local({ 30 | 31 | # first, check config option 32 | override <- getOption("renv.config.autoloader.enabled") 33 | if (!is.null(override)) 34 | return(override) 35 | 36 | # if we're being run in a context where R_LIBS is already set, 37 | # don't load -- presumably we're being run as a sub-process and 38 | # the parent process has already set up library paths for us 39 | rcmd <- Sys.getenv("R_CMD", unset = NA) 40 | rlibs <- Sys.getenv("R_LIBS", unset = NA) 41 | if (!is.na(rlibs) && !is.na(rcmd)) 42 | return(FALSE) 43 | 44 | # next, check environment variables 45 | # prefer using the configuration one in the future 46 | envvars <- c( 47 | "RENV_CONFIG_AUTOLOADER_ENABLED", 48 | "RENV_AUTOLOADER_ENABLED", 49 | "RENV_ACTIVATE_PROJECT" 50 | ) 51 | 52 | for (envvar in envvars) { 53 | envval <- Sys.getenv(envvar, unset = NA) 54 | if (!is.na(envval)) 55 | return(tolower(envval) %in% c("true", "t", "1")) 56 | } 57 | 58 | # enable by default 59 | TRUE 60 | 61 | }) 62 | 63 | # bail if we're not enabled 64 | if (!enabled) { 65 | 66 | # if we're not enabled, we might still need to manually load 67 | # the user profile here 68 | profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") 69 | if (file.exists(profile)) { 70 | cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") 71 | if (tolower(cfg) %in% c("true", "t", "1")) 72 | sys.source(profile, envir = globalenv()) 73 | } 74 | 75 | return(FALSE) 76 | 77 | } 78 | 79 | # avoid recursion 80 | if (identical(getOption("renv.autoloader.running"), TRUE)) { 81 | warning("ignoring recursive attempt to run renv autoloader") 82 | return(invisible(TRUE)) 83 | } 84 | 85 | # signal that we're loading renv during R startup 86 | options(renv.autoloader.running = TRUE) 87 | on.exit(options(renv.autoloader.running = NULL), add = TRUE) 88 | 89 | # signal that we've consented to use renv 90 | options(renv.consent = TRUE) 91 | 92 | # load the 'utils' package eagerly -- this ensures that renv shims, which 93 | # mask 'utils' packages, will come first on the search path 94 | library(utils, lib.loc = .Library) 95 | 96 | # unload renv if it's already been loaded 97 | if ("renv" %in% loadedNamespaces()) 98 | unloadNamespace("renv") 99 | 100 | # load bootstrap tools 101 | ansify <- function(text) { 102 | if (renv_ansify_enabled()) 103 | renv_ansify_enhanced(text) 104 | else 105 | renv_ansify_default(text) 106 | } 107 | 108 | renv_ansify_enabled <- function() { 109 | 110 | override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) 111 | if (!is.na(override)) 112 | return(as.logical(override)) 113 | 114 | pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) 115 | if (identical(pane, "build")) 116 | return(FALSE) 117 | 118 | testthat <- Sys.getenv("TESTTHAT", unset = "false") 119 | if (tolower(testthat) %in% "true") 120 | return(FALSE) 121 | 122 | iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") 123 | if (tolower(iderun) %in% "false") 124 | return(FALSE) 125 | 126 | TRUE 127 | 128 | } 129 | 130 | renv_ansify_default <- function(text) { 131 | text 132 | } 133 | 134 | renv_ansify_enhanced <- function(text) { 135 | 136 | # R help links 137 | pattern <- "`\\?(renv::(?:[^`])+)`" 138 | replacement <- "`\033]8;;x-r-help:\\1\a?\\1\033]8;;\a`" 139 | text <- gsub(pattern, replacement, text, perl = TRUE) 140 | 141 | # runnable code 142 | pattern <- "`(renv::(?:[^`])+)`" 143 | replacement <- "`\033]8;;x-r-run:\\1\a\\1\033]8;;\a`" 144 | text <- gsub(pattern, replacement, text, perl = TRUE) 145 | 146 | # return ansified text 147 | text 148 | 149 | } 150 | 151 | renv_ansify_init <- function() { 152 | 153 | envir <- renv_envir_self() 154 | if (renv_ansify_enabled()) 155 | assign("ansify", renv_ansify_enhanced, envir = envir) 156 | else 157 | assign("ansify", renv_ansify_default, envir = envir) 158 | 159 | } 160 | 161 | `%||%` <- function(x, y) { 162 | if (is.null(x)) y else x 163 | } 164 | 165 | catf <- function(fmt, ..., appendLF = TRUE) { 166 | 167 | quiet <- getOption("renv.bootstrap.quiet", default = FALSE) 168 | if (quiet) 169 | return(invisible()) 170 | 171 | msg <- sprintf(fmt, ...) 172 | cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") 173 | 174 | invisible(msg) 175 | 176 | } 177 | 178 | header <- function(label, 179 | ..., 180 | prefix = "#", 181 | suffix = "-", 182 | n = min(getOption("width"), 78)) 183 | { 184 | label <- sprintf(label, ...) 185 | n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) 186 | if (n <= 0) 187 | return(paste(prefix, label)) 188 | 189 | tail <- paste(rep.int(suffix, n), collapse = "") 190 | paste0(prefix, " ", label, " ", tail) 191 | 192 | } 193 | 194 | heredoc <- function(text, leave = 0) { 195 | 196 | # remove leading, trailing whitespace 197 | trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) 198 | 199 | # split into lines 200 | lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] 201 | 202 | # compute common indent 203 | indent <- regexpr("[^[:space:]]", lines) 204 | common <- min(setdiff(indent, -1L)) - leave 205 | text <- paste(substring(lines, common), collapse = "\n") 206 | 207 | # substitute in ANSI links for executable renv code 208 | ansify(text) 209 | 210 | } 211 | 212 | bootstrap <- function(version, library) { 213 | 214 | friendly <- renv_bootstrap_version_friendly(version) 215 | section <- header(sprintf("Bootstrapping renv %s", friendly)) 216 | catf(section) 217 | 218 | # attempt to download renv 219 | catf("- Downloading renv ... ", appendLF = FALSE) 220 | withCallingHandlers( 221 | tarball <- renv_bootstrap_download(version), 222 | error = function(err) { 223 | catf("FAILED") 224 | stop("failed to download:\n", conditionMessage(err)) 225 | } 226 | ) 227 | catf("OK") 228 | on.exit(unlink(tarball), add = TRUE) 229 | 230 | # now attempt to install 231 | catf("- Installing renv ... ", appendLF = FALSE) 232 | withCallingHandlers( 233 | status <- renv_bootstrap_install(version, tarball, library), 234 | error = function(err) { 235 | catf("FAILED") 236 | stop("failed to install:\n", conditionMessage(err)) 237 | } 238 | ) 239 | catf("OK") 240 | 241 | # add empty line to break up bootstrapping from normal output 242 | catf("") 243 | 244 | return(invisible()) 245 | } 246 | 247 | renv_bootstrap_tests_running <- function() { 248 | getOption("renv.tests.running", default = FALSE) 249 | } 250 | 251 | renv_bootstrap_repos <- function() { 252 | 253 | # get CRAN repository 254 | cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") 255 | 256 | # check for repos override 257 | repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) 258 | if (!is.na(repos)) { 259 | 260 | # check for RSPM; if set, use a fallback repository for renv 261 | rspm <- Sys.getenv("RSPM", unset = NA) 262 | if (identical(rspm, repos)) 263 | repos <- c(RSPM = rspm, CRAN = cran) 264 | 265 | return(repos) 266 | 267 | } 268 | 269 | # check for lockfile repositories 270 | repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) 271 | if (!inherits(repos, "error") && length(repos)) 272 | return(repos) 273 | 274 | # retrieve current repos 275 | repos <- getOption("repos") 276 | 277 | # ensure @CRAN@ entries are resolved 278 | repos[repos == "@CRAN@"] <- cran 279 | 280 | # add in renv.bootstrap.repos if set 281 | default <- c(FALLBACK = "https://cloud.r-project.org") 282 | extra <- getOption("renv.bootstrap.repos", default = default) 283 | repos <- c(repos, extra) 284 | 285 | # remove duplicates that might've snuck in 286 | dupes <- duplicated(repos) | duplicated(names(repos)) 287 | repos[!dupes] 288 | 289 | } 290 | 291 | renv_bootstrap_repos_lockfile <- function() { 292 | 293 | lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") 294 | if (!file.exists(lockpath)) 295 | return(NULL) 296 | 297 | lockfile <- tryCatch(renv_json_read(lockpath), error = identity) 298 | if (inherits(lockfile, "error")) { 299 | warning(lockfile) 300 | return(NULL) 301 | } 302 | 303 | repos <- lockfile$R$Repositories 304 | if (length(repos) == 0) 305 | return(NULL) 306 | 307 | keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) 308 | vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) 309 | names(vals) <- keys 310 | 311 | return(vals) 312 | 313 | } 314 | 315 | renv_bootstrap_download <- function(version) { 316 | 317 | sha <- attr(version, "sha", exact = TRUE) 318 | 319 | methods <- if (!is.null(sha)) { 320 | 321 | # attempting to bootstrap a development version of renv 322 | c( 323 | function() renv_bootstrap_download_tarball(sha), 324 | function() renv_bootstrap_download_github(sha) 325 | ) 326 | 327 | } else { 328 | 329 | # attempting to bootstrap a release version of renv 330 | c( 331 | function() renv_bootstrap_download_tarball(version), 332 | function() renv_bootstrap_download_cran_latest(version), 333 | function() renv_bootstrap_download_cran_archive(version) 334 | ) 335 | 336 | } 337 | 338 | for (method in methods) { 339 | path <- tryCatch(method(), error = identity) 340 | if (is.character(path) && file.exists(path)) 341 | return(path) 342 | } 343 | 344 | stop("All download methods failed") 345 | 346 | } 347 | 348 | renv_bootstrap_download_impl <- function(url, destfile) { 349 | 350 | mode <- "wb" 351 | 352 | # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 353 | fixup <- 354 | Sys.info()[["sysname"]] == "Windows" && 355 | substring(url, 1L, 5L) == "file:" 356 | 357 | if (fixup) 358 | mode <- "w+b" 359 | 360 | args <- list( 361 | url = url, 362 | destfile = destfile, 363 | mode = mode, 364 | quiet = TRUE 365 | ) 366 | 367 | if ("headers" %in% names(formals(utils::download.file))) { 368 | headers <- renv_bootstrap_download_custom_headers(url) 369 | if (length(headers) && is.character(headers)) 370 | args$headers <- headers 371 | } 372 | 373 | do.call(utils::download.file, args) 374 | 375 | } 376 | 377 | renv_bootstrap_download_custom_headers <- function(url) { 378 | 379 | headers <- getOption("renv.download.headers") 380 | if (is.null(headers)) 381 | return(character()) 382 | 383 | if (!is.function(headers)) 384 | stopf("'renv.download.headers' is not a function") 385 | 386 | headers <- headers(url) 387 | if (length(headers) == 0L) 388 | return(character()) 389 | 390 | if (is.list(headers)) 391 | headers <- unlist(headers, recursive = FALSE, use.names = TRUE) 392 | 393 | ok <- 394 | is.character(headers) && 395 | is.character(names(headers)) && 396 | all(nzchar(names(headers))) 397 | 398 | if (!ok) 399 | stop("invocation of 'renv.download.headers' did not return a named character vector") 400 | 401 | headers 402 | 403 | } 404 | 405 | renv_bootstrap_download_cran_latest <- function(version) { 406 | 407 | spec <- renv_bootstrap_download_cran_latest_find(version) 408 | type <- spec$type 409 | repos <- spec$repos 410 | 411 | baseurl <- utils::contrib.url(repos = repos, type = type) 412 | ext <- if (identical(type, "source")) 413 | ".tar.gz" 414 | else if (Sys.info()[["sysname"]] == "Windows") 415 | ".zip" 416 | else 417 | ".tgz" 418 | name <- sprintf("renv_%s%s", version, ext) 419 | url <- paste(baseurl, name, sep = "/") 420 | 421 | destfile <- file.path(tempdir(), name) 422 | status <- tryCatch( 423 | renv_bootstrap_download_impl(url, destfile), 424 | condition = identity 425 | ) 426 | 427 | if (inherits(status, "condition")) 428 | return(FALSE) 429 | 430 | # report success and return 431 | destfile 432 | 433 | } 434 | 435 | renv_bootstrap_download_cran_latest_find <- function(version) { 436 | 437 | # check whether binaries are supported on this system 438 | binary <- 439 | getOption("renv.bootstrap.binary", default = TRUE) && 440 | !identical(.Platform$pkgType, "source") && 441 | !identical(getOption("pkgType"), "source") && 442 | Sys.info()[["sysname"]] %in% c("Darwin", "Windows") 443 | 444 | types <- c(if (binary) "binary", "source") 445 | 446 | # iterate over types + repositories 447 | for (type in types) { 448 | for (repos in renv_bootstrap_repos()) { 449 | 450 | # build arguments for utils::available.packages() call 451 | args <- list(type = type, repos = repos) 452 | 453 | # add custom headers if available -- note that 454 | # utils::available.packages() will pass this to download.file() 455 | if ("headers" %in% names(formals(utils::download.file))) { 456 | headers <- renv_bootstrap_download_custom_headers(repos) 457 | if (length(headers) && is.character(headers)) 458 | args$headers <- headers 459 | } 460 | 461 | # retrieve package database 462 | db <- tryCatch( 463 | as.data.frame( 464 | do.call(utils::available.packages, args), 465 | stringsAsFactors = FALSE 466 | ), 467 | error = identity 468 | ) 469 | 470 | if (inherits(db, "error")) 471 | next 472 | 473 | # check for compatible entry 474 | entry <- db[db$Package %in% "renv" & db$Version %in% version, ] 475 | if (nrow(entry) == 0) 476 | next 477 | 478 | # found it; return spec to caller 479 | spec <- list(entry = entry, type = type, repos = repos) 480 | return(spec) 481 | 482 | } 483 | } 484 | 485 | # if we got here, we failed to find renv 486 | fmt <- "renv %s is not available from your declared package repositories" 487 | stop(sprintf(fmt, version)) 488 | 489 | } 490 | 491 | renv_bootstrap_download_cran_archive <- function(version) { 492 | 493 | name <- sprintf("renv_%s.tar.gz", version) 494 | repos <- renv_bootstrap_repos() 495 | urls <- file.path(repos, "src/contrib/Archive/renv", name) 496 | destfile <- file.path(tempdir(), name) 497 | 498 | for (url in urls) { 499 | 500 | status <- tryCatch( 501 | renv_bootstrap_download_impl(url, destfile), 502 | condition = identity 503 | ) 504 | 505 | if (identical(status, 0L)) 506 | return(destfile) 507 | 508 | } 509 | 510 | return(FALSE) 511 | 512 | } 513 | 514 | renv_bootstrap_download_tarball <- function(version) { 515 | 516 | # if the user has provided the path to a tarball via 517 | # an environment variable, then use it 518 | tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) 519 | if (is.na(tarball)) 520 | return() 521 | 522 | # allow directories 523 | if (dir.exists(tarball)) { 524 | name <- sprintf("renv_%s.tar.gz", version) 525 | tarball <- file.path(tarball, name) 526 | } 527 | 528 | # bail if it doesn't exist 529 | if (!file.exists(tarball)) { 530 | 531 | # let the user know we weren't able to honour their request 532 | fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." 533 | msg <- sprintf(fmt, tarball) 534 | warning(msg) 535 | 536 | # bail 537 | return() 538 | 539 | } 540 | 541 | catf("- Using local tarball '%s'.", tarball) 542 | tarball 543 | 544 | } 545 | 546 | renv_bootstrap_github_token <- function() { 547 | for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { 548 | envval <- Sys.getenv(envvar, unset = NA) 549 | if (!is.na(envval)) 550 | return(envval) 551 | } 552 | } 553 | 554 | renv_bootstrap_download_github <- function(version) { 555 | 556 | enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") 557 | if (!identical(enabled, "TRUE")) 558 | return(FALSE) 559 | 560 | # prepare download options 561 | token <- renv_bootstrap_github_token() 562 | if (is.null(token)) 563 | token <- "" 564 | 565 | if (nzchar(Sys.which("curl")) && nzchar(token)) { 566 | fmt <- "--location --fail --header \"Authorization: token %s\"" 567 | extra <- sprintf(fmt, token) 568 | saved <- options("download.file.method", "download.file.extra") 569 | options(download.file.method = "curl", download.file.extra = extra) 570 | on.exit(do.call(base::options, saved), add = TRUE) 571 | } else if (nzchar(Sys.which("wget")) && nzchar(token)) { 572 | fmt <- "--header=\"Authorization: token %s\"" 573 | extra <- sprintf(fmt, token) 574 | saved <- options("download.file.method", "download.file.extra") 575 | options(download.file.method = "wget", download.file.extra = extra) 576 | on.exit(do.call(base::options, saved), add = TRUE) 577 | } 578 | 579 | url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) 580 | name <- sprintf("renv_%s.tar.gz", version) 581 | destfile <- file.path(tempdir(), name) 582 | 583 | status <- tryCatch( 584 | renv_bootstrap_download_impl(url, destfile), 585 | condition = identity 586 | ) 587 | 588 | if (!identical(status, 0L)) 589 | return(FALSE) 590 | 591 | renv_bootstrap_download_augment(destfile) 592 | 593 | return(destfile) 594 | 595 | } 596 | 597 | # Add Sha to DESCRIPTION. This is stop gap until #890, after which we 598 | # can use renv::install() to fully capture metadata. 599 | renv_bootstrap_download_augment <- function(destfile) { 600 | sha <- renv_bootstrap_git_extract_sha1_tar(destfile) 601 | if (is.null(sha)) { 602 | return() 603 | } 604 | 605 | # Untar 606 | tempdir <- tempfile("renv-github-") 607 | on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) 608 | untar(destfile, exdir = tempdir) 609 | pkgdir <- dir(tempdir, full.names = TRUE)[[1]] 610 | 611 | # Modify description 612 | desc_path <- file.path(pkgdir, "DESCRIPTION") 613 | desc_lines <- readLines(desc_path) 614 | remotes_fields <- c( 615 | "RemoteType: github", 616 | "RemoteHost: api.github.com", 617 | "RemoteRepo: renv", 618 | "RemoteUsername: rstudio", 619 | "RemotePkgRef: rstudio/renv", 620 | paste("RemoteRef: ", sha), 621 | paste("RemoteSha: ", sha) 622 | ) 623 | writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) 624 | 625 | # Re-tar 626 | local({ 627 | old <- setwd(tempdir) 628 | on.exit(setwd(old), add = TRUE) 629 | 630 | tar(destfile, compression = "gzip") 631 | }) 632 | invisible() 633 | } 634 | 635 | # Extract the commit hash from a git archive. Git archives include the SHA1 636 | # hash as the comment field of the tarball pax extended header 637 | # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) 638 | # For GitHub archives this should be the first header after the default one 639 | # (512 byte) header. 640 | renv_bootstrap_git_extract_sha1_tar <- function(bundle) { 641 | 642 | # open the bundle for reading 643 | # We use gzcon for everything because (from ?gzcon) 644 | # > Reading from a connection which does not supply a 'gzip' magic 645 | # > header is equivalent to reading from the original connection 646 | conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) 647 | on.exit(close(conn)) 648 | 649 | # The default pax header is 512 bytes long and the first pax extended header 650 | # with the comment should be 51 bytes long 651 | # `52 comment=` (11 chars) + 40 byte SHA1 hash 652 | len <- 0x200 + 0x33 653 | res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) 654 | 655 | if (grepl("^52 comment=", res)) { 656 | sub("52 comment=", "", res) 657 | } else { 658 | NULL 659 | } 660 | } 661 | 662 | renv_bootstrap_install <- function(version, tarball, library) { 663 | 664 | # attempt to install it into project library 665 | dir.create(library, showWarnings = FALSE, recursive = TRUE) 666 | output <- renv_bootstrap_install_impl(library, tarball) 667 | 668 | # check for successful install 669 | status <- attr(output, "status") 670 | if (is.null(status) || identical(status, 0L)) 671 | return(status) 672 | 673 | # an error occurred; report it 674 | header <- "installation of renv failed" 675 | lines <- paste(rep.int("=", nchar(header)), collapse = "") 676 | text <- paste(c(header, lines, output), collapse = "\n") 677 | stop(text) 678 | 679 | } 680 | 681 | renv_bootstrap_install_impl <- function(library, tarball) { 682 | 683 | # invoke using system2 so we can capture and report output 684 | bin <- R.home("bin") 685 | exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" 686 | R <- file.path(bin, exe) 687 | 688 | args <- c( 689 | "--vanilla", "CMD", "INSTALL", "--no-multiarch", 690 | "-l", shQuote(path.expand(library)), 691 | shQuote(path.expand(tarball)) 692 | ) 693 | 694 | system2(R, args, stdout = TRUE, stderr = TRUE) 695 | 696 | } 697 | 698 | renv_bootstrap_platform_prefix_default <- function() { 699 | 700 | # read version component 701 | version <- Sys.getenv("RENV_PATHS_VERSION", unset = "R-%v") 702 | 703 | # expand placeholders 704 | placeholders <- list( 705 | list("%v", format(getRversion()[1, 1:2])), 706 | list("%V", format(getRversion()[1, 1:3])) 707 | ) 708 | 709 | for (placeholder in placeholders) 710 | version <- gsub(placeholder[[1L]], placeholder[[2L]], version, fixed = TRUE) 711 | 712 | # include SVN revision for development versions of R 713 | # (to avoid sharing platform-specific artefacts with released versions of R) 714 | devel <- 715 | identical(R.version[["status"]], "Under development (unstable)") || 716 | identical(R.version[["nickname"]], "Unsuffered Consequences") 717 | 718 | if (devel) 719 | version <- paste(version, R.version[["svn rev"]], sep = "-r") 720 | 721 | version 722 | 723 | } 724 | 725 | renv_bootstrap_platform_prefix <- function() { 726 | 727 | # construct version prefix 728 | version <- renv_bootstrap_platform_prefix_default() 729 | 730 | # build list of path components 731 | components <- c(version, R.version$platform) 732 | 733 | # include prefix if provided by user 734 | prefix <- renv_bootstrap_platform_prefix_impl() 735 | if (!is.na(prefix) && nzchar(prefix)) 736 | components <- c(prefix, components) 737 | 738 | # build prefix 739 | paste(components, collapse = "/") 740 | 741 | } 742 | 743 | renv_bootstrap_platform_prefix_impl <- function() { 744 | 745 | # if an explicit prefix has been supplied, use it 746 | prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) 747 | if (!is.na(prefix)) 748 | return(prefix) 749 | 750 | # if the user has requested an automatic prefix, generate it 751 | auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) 752 | if (is.na(auto) && getRversion() >= "4.4.0") 753 | auto <- "TRUE" 754 | 755 | if (auto %in% c("TRUE", "True", "true", "1")) 756 | return(renv_bootstrap_platform_prefix_auto()) 757 | 758 | # empty string on failure 759 | "" 760 | 761 | } 762 | 763 | renv_bootstrap_platform_prefix_auto <- function() { 764 | 765 | prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) 766 | if (inherits(prefix, "error") || prefix %in% "unknown") { 767 | 768 | msg <- paste( 769 | "failed to infer current operating system", 770 | "please file a bug report at https://github.com/rstudio/renv/issues", 771 | sep = "; " 772 | ) 773 | 774 | warning(msg) 775 | 776 | } 777 | 778 | prefix 779 | 780 | } 781 | 782 | renv_bootstrap_platform_os <- function() { 783 | 784 | sysinfo <- Sys.info() 785 | sysname <- sysinfo[["sysname"]] 786 | 787 | # handle Windows + macOS up front 788 | if (sysname == "Windows") 789 | return("windows") 790 | else if (sysname == "Darwin") 791 | return("macos") 792 | 793 | # check for os-release files 794 | for (file in c("/etc/os-release", "/usr/lib/os-release")) 795 | if (file.exists(file)) 796 | return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) 797 | 798 | # check for redhat-release files 799 | if (file.exists("/etc/redhat-release")) 800 | return(renv_bootstrap_platform_os_via_redhat_release()) 801 | 802 | "unknown" 803 | 804 | } 805 | 806 | renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { 807 | 808 | # read /etc/os-release 809 | release <- utils::read.table( 810 | file = file, 811 | sep = "=", 812 | quote = c("\"", "'"), 813 | col.names = c("Key", "Value"), 814 | comment.char = "#", 815 | stringsAsFactors = FALSE 816 | ) 817 | 818 | vars <- as.list(release$Value) 819 | names(vars) <- release$Key 820 | 821 | # get os name 822 | os <- tolower(sysinfo[["sysname"]]) 823 | 824 | # read id 825 | id <- "unknown" 826 | for (field in c("ID", "ID_LIKE")) { 827 | if (field %in% names(vars) && nzchar(vars[[field]])) { 828 | id <- vars[[field]] 829 | break 830 | } 831 | } 832 | 833 | # read version 834 | version <- "unknown" 835 | for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { 836 | if (field %in% names(vars) && nzchar(vars[[field]])) { 837 | version <- vars[[field]] 838 | break 839 | } 840 | } 841 | 842 | # join together 843 | paste(c(os, id, version), collapse = "-") 844 | 845 | } 846 | 847 | renv_bootstrap_platform_os_via_redhat_release <- function() { 848 | 849 | # read /etc/redhat-release 850 | contents <- readLines("/etc/redhat-release", warn = FALSE) 851 | 852 | # infer id 853 | id <- if (grepl("centos", contents, ignore.case = TRUE)) 854 | "centos" 855 | else if (grepl("redhat", contents, ignore.case = TRUE)) 856 | "redhat" 857 | else 858 | "unknown" 859 | 860 | # try to find a version component (very hacky) 861 | version <- "unknown" 862 | 863 | parts <- strsplit(contents, "[[:space:]]")[[1L]] 864 | for (part in parts) { 865 | 866 | nv <- tryCatch(numeric_version(part), error = identity) 867 | if (inherits(nv, "error")) 868 | next 869 | 870 | version <- nv[1, 1] 871 | break 872 | 873 | } 874 | 875 | paste(c("linux", id, version), collapse = "-") 876 | 877 | } 878 | 879 | renv_bootstrap_library_root_name <- function(project) { 880 | 881 | # use project name as-is if requested 882 | asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") 883 | if (asis) 884 | return(basename(project)) 885 | 886 | # otherwise, disambiguate based on project's path 887 | id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) 888 | paste(basename(project), id, sep = "-") 889 | 890 | } 891 | 892 | renv_bootstrap_library_root <- function(project) { 893 | 894 | prefix <- renv_bootstrap_profile_prefix() 895 | 896 | path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) 897 | if (!is.na(path)) 898 | return(paste(c(path, prefix), collapse = "/")) 899 | 900 | path <- renv_bootstrap_library_root_impl(project) 901 | if (!is.null(path)) { 902 | name <- renv_bootstrap_library_root_name(project) 903 | return(paste(c(path, prefix, name), collapse = "/")) 904 | } 905 | 906 | renv_bootstrap_paths_renv("library", project = project) 907 | 908 | } 909 | 910 | renv_bootstrap_library_root_impl <- function(project) { 911 | 912 | root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) 913 | if (!is.na(root)) 914 | return(root) 915 | 916 | type <- renv_bootstrap_project_type(project) 917 | if (identical(type, "package")) { 918 | userdir <- renv_bootstrap_user_dir() 919 | return(file.path(userdir, "library")) 920 | } 921 | 922 | } 923 | 924 | renv_bootstrap_validate_version <- function(version, description = NULL) { 925 | 926 | # resolve description file 927 | # 928 | # avoid passing lib.loc to `packageDescription()` below, since R will 929 | # use the loaded version of the package by default anyhow. note that 930 | # this function should only be called after 'renv' is loaded 931 | # https://github.com/rstudio/renv/issues/1625 932 | description <- description %||% packageDescription("renv") 933 | 934 | # check whether requested version 'version' matches loaded version of renv 935 | sha <- attr(version, "sha", exact = TRUE) 936 | valid <- if (!is.null(sha)) 937 | renv_bootstrap_validate_version_dev(sha, description) 938 | else 939 | renv_bootstrap_validate_version_release(version, description) 940 | 941 | if (valid) 942 | return(TRUE) 943 | 944 | # the loaded version of renv doesn't match the requested version; 945 | # give the user instructions on how to proceed 946 | dev <- identical(description[["RemoteType"]], "github") 947 | remote <- if (dev) 948 | paste("rstudio/renv", description[["RemoteSha"]], sep = "@") 949 | else 950 | paste("renv", description[["Version"]], sep = "@") 951 | 952 | # display both loaded version + sha if available 953 | friendly <- renv_bootstrap_version_friendly( 954 | version = description[["Version"]], 955 | sha = if (dev) description[["RemoteSha"]] 956 | ) 957 | 958 | fmt <- heredoc(" 959 | renv %1$s was loaded from project library, but this project is configured to use renv %2$s. 960 | - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. 961 | - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. 962 | ") 963 | catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) 964 | 965 | FALSE 966 | 967 | } 968 | 969 | renv_bootstrap_validate_version_dev <- function(version, description) { 970 | 971 | expected <- description[["RemoteSha"]] 972 | if (!is.character(expected)) 973 | return(FALSE) 974 | 975 | pattern <- sprintf("^\\Q%s\\E", version) 976 | grepl(pattern, expected, perl = TRUE) 977 | 978 | } 979 | 980 | renv_bootstrap_validate_version_release <- function(version, description) { 981 | expected <- description[["Version"]] 982 | is.character(expected) && identical(expected, version) 983 | } 984 | 985 | renv_bootstrap_hash_text <- function(text) { 986 | 987 | hashfile <- tempfile("renv-hash-") 988 | on.exit(unlink(hashfile), add = TRUE) 989 | 990 | writeLines(text, con = hashfile) 991 | tools::md5sum(hashfile) 992 | 993 | } 994 | 995 | renv_bootstrap_load <- function(project, libpath, version) { 996 | 997 | # try to load renv from the project library 998 | if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) 999 | return(FALSE) 1000 | 1001 | # warn if the version of renv loaded does not match 1002 | renv_bootstrap_validate_version(version) 1003 | 1004 | # execute renv load hooks, if any 1005 | hooks <- getHook("renv::autoload") 1006 | for (hook in hooks) 1007 | if (is.function(hook)) 1008 | tryCatch(hook(), error = warnify) 1009 | 1010 | # load the project 1011 | renv::load(project) 1012 | 1013 | TRUE 1014 | 1015 | } 1016 | 1017 | renv_bootstrap_profile_load <- function(project) { 1018 | 1019 | # if RENV_PROFILE is already set, just use that 1020 | profile <- Sys.getenv("RENV_PROFILE", unset = NA) 1021 | if (!is.na(profile) && nzchar(profile)) 1022 | return(profile) 1023 | 1024 | # check for a profile file (nothing to do if it doesn't exist) 1025 | path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) 1026 | if (!file.exists(path)) 1027 | return(NULL) 1028 | 1029 | # read the profile, and set it if it exists 1030 | contents <- readLines(path, warn = FALSE) 1031 | if (length(contents) == 0L) 1032 | return(NULL) 1033 | 1034 | # set RENV_PROFILE 1035 | profile <- contents[[1L]] 1036 | if (!profile %in% c("", "default")) 1037 | Sys.setenv(RENV_PROFILE = profile) 1038 | 1039 | profile 1040 | 1041 | } 1042 | 1043 | renv_bootstrap_profile_prefix <- function() { 1044 | profile <- renv_bootstrap_profile_get() 1045 | if (!is.null(profile)) 1046 | return(file.path("profiles", profile, "renv")) 1047 | } 1048 | 1049 | renv_bootstrap_profile_get <- function() { 1050 | profile <- Sys.getenv("RENV_PROFILE", unset = "") 1051 | renv_bootstrap_profile_normalize(profile) 1052 | } 1053 | 1054 | renv_bootstrap_profile_set <- function(profile) { 1055 | profile <- renv_bootstrap_profile_normalize(profile) 1056 | if (is.null(profile)) 1057 | Sys.unsetenv("RENV_PROFILE") 1058 | else 1059 | Sys.setenv(RENV_PROFILE = profile) 1060 | } 1061 | 1062 | renv_bootstrap_profile_normalize <- function(profile) { 1063 | 1064 | if (is.null(profile) || profile %in% c("", "default")) 1065 | return(NULL) 1066 | 1067 | profile 1068 | 1069 | } 1070 | 1071 | renv_bootstrap_path_absolute <- function(path) { 1072 | 1073 | substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( 1074 | substr(path, 1L, 1L) %in% c(letters, LETTERS) && 1075 | substr(path, 2L, 3L) %in% c(":/", ":\\") 1076 | ) 1077 | 1078 | } 1079 | 1080 | renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { 1081 | renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") 1082 | root <- if (renv_bootstrap_path_absolute(renv)) NULL else project 1083 | prefix <- if (profile) renv_bootstrap_profile_prefix() 1084 | components <- c(root, renv, prefix, ...) 1085 | paste(components, collapse = "/") 1086 | } 1087 | 1088 | renv_bootstrap_project_type <- function(path) { 1089 | 1090 | descpath <- file.path(path, "DESCRIPTION") 1091 | if (!file.exists(descpath)) 1092 | return("unknown") 1093 | 1094 | desc <- tryCatch( 1095 | read.dcf(descpath, all = TRUE), 1096 | error = identity 1097 | ) 1098 | 1099 | if (inherits(desc, "error")) 1100 | return("unknown") 1101 | 1102 | type <- desc$Type 1103 | if (!is.null(type)) 1104 | return(tolower(type)) 1105 | 1106 | package <- desc$Package 1107 | if (!is.null(package)) 1108 | return("package") 1109 | 1110 | "unknown" 1111 | 1112 | } 1113 | 1114 | renv_bootstrap_user_dir <- function() { 1115 | dir <- renv_bootstrap_user_dir_impl() 1116 | path.expand(chartr("\\", "/", dir)) 1117 | } 1118 | 1119 | renv_bootstrap_user_dir_impl <- function() { 1120 | 1121 | # use local override if set 1122 | override <- getOption("renv.userdir.override") 1123 | if (!is.null(override)) 1124 | return(override) 1125 | 1126 | # use R_user_dir if available 1127 | tools <- asNamespace("tools") 1128 | if (is.function(tools$R_user_dir)) 1129 | return(tools$R_user_dir("renv", "cache")) 1130 | 1131 | # try using our own backfill for older versions of R 1132 | envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") 1133 | for (envvar in envvars) { 1134 | root <- Sys.getenv(envvar, unset = NA) 1135 | if (!is.na(root)) 1136 | return(file.path(root, "R/renv")) 1137 | } 1138 | 1139 | # use platform-specific default fallbacks 1140 | if (Sys.info()[["sysname"]] == "Windows") 1141 | file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") 1142 | else if (Sys.info()[["sysname"]] == "Darwin") 1143 | "~/Library/Caches/org.R-project.R/R/renv" 1144 | else 1145 | "~/.cache/R/renv" 1146 | 1147 | } 1148 | 1149 | renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { 1150 | sha <- sha %||% attr(version, "sha", exact = TRUE) 1151 | parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) 1152 | paste(parts, collapse = "") 1153 | } 1154 | 1155 | renv_bootstrap_exec <- function(project, libpath, version) { 1156 | if (!renv_bootstrap_load(project, libpath, version)) 1157 | renv_bootstrap_run(project, libpath, version) 1158 | } 1159 | 1160 | renv_bootstrap_run <- function(project, libpath, version) { 1161 | 1162 | # perform bootstrap 1163 | bootstrap(version, libpath) 1164 | 1165 | # exit early if we're just testing bootstrap 1166 | if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) 1167 | return(TRUE) 1168 | 1169 | # try again to load 1170 | if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { 1171 | return(renv::load(project = project)) 1172 | } 1173 | 1174 | # failed to download or load renv; warn the user 1175 | msg <- c( 1176 | "Failed to find an renv installation: the project will not be loaded.", 1177 | "Use `renv::activate()` to re-initialize the project." 1178 | ) 1179 | 1180 | warning(paste(msg, collapse = "\n"), call. = FALSE) 1181 | 1182 | } 1183 | 1184 | renv_json_read <- function(file = NULL, text = NULL) { 1185 | 1186 | jlerr <- NULL 1187 | 1188 | # if jsonlite is loaded, use that instead 1189 | if ("jsonlite" %in% loadedNamespaces()) { 1190 | 1191 | json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) 1192 | if (!inherits(json, "error")) 1193 | return(json) 1194 | 1195 | jlerr <- json 1196 | 1197 | } 1198 | 1199 | # otherwise, fall back to the default JSON reader 1200 | json <- tryCatch(renv_json_read_default(file, text), error = identity) 1201 | if (!inherits(json, "error")) 1202 | return(json) 1203 | 1204 | # report an error 1205 | if (!is.null(jlerr)) 1206 | stop(jlerr) 1207 | else 1208 | stop(json) 1209 | 1210 | } 1211 | 1212 | renv_json_read_jsonlite <- function(file = NULL, text = NULL) { 1213 | text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") 1214 | jsonlite::fromJSON(txt = text, simplifyVector = FALSE) 1215 | } 1216 | 1217 | renv_json_read_patterns <- function() { 1218 | 1219 | list( 1220 | 1221 | # objects 1222 | list("{", "\t\n\tobject(\t\n\t", TRUE), 1223 | list("}", "\t\n\t)\t\n\t", TRUE), 1224 | 1225 | # arrays 1226 | list("[", "\t\n\tarray(\t\n\t", TRUE), 1227 | list("]", "\n\t\n)\n\t\n", TRUE), 1228 | 1229 | # maps 1230 | list(":", "\t\n\t=\t\n\t", TRUE), 1231 | 1232 | # newlines 1233 | list("\\u000a", "\n", FALSE) 1234 | 1235 | ) 1236 | 1237 | } 1238 | 1239 | renv_json_read_envir <- function() { 1240 | 1241 | envir <- new.env(parent = emptyenv()) 1242 | 1243 | envir[["+"]] <- `+` 1244 | envir[["-"]] <- `-` 1245 | 1246 | envir[["object"]] <- function(...) { 1247 | result <- list(...) 1248 | names(result) <- as.character(names(result)) 1249 | result 1250 | } 1251 | 1252 | envir[["array"]] <- list 1253 | 1254 | envir[["true"]] <- TRUE 1255 | envir[["false"]] <- FALSE 1256 | envir[["null"]] <- NULL 1257 | 1258 | envir 1259 | 1260 | } 1261 | 1262 | renv_json_read_remap <- function(object, patterns) { 1263 | 1264 | # repair names if necessary 1265 | if (!is.null(names(object))) { 1266 | 1267 | nms <- names(object) 1268 | for (pattern in patterns) 1269 | nms <- gsub(pattern[[2L]], pattern[[1L]], nms, fixed = TRUE) 1270 | names(object) <- nms 1271 | 1272 | } 1273 | 1274 | # repair strings if necessary 1275 | if (is.character(object)) { 1276 | for (pattern in patterns) 1277 | object <- gsub(pattern[[2L]], pattern[[1L]], object, fixed = TRUE) 1278 | } 1279 | 1280 | # recurse for other objects 1281 | if (is.recursive(object)) 1282 | for (i in seq_along(object)) 1283 | object[i] <- list(renv_json_read_remap(object[[i]], patterns)) 1284 | 1285 | # return remapped object 1286 | object 1287 | 1288 | } 1289 | 1290 | renv_json_read_default <- function(file = NULL, text = NULL) { 1291 | 1292 | # read json text 1293 | text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") 1294 | 1295 | # convert into something the R parser will understand 1296 | patterns <- renv_json_read_patterns() 1297 | transformed <- text 1298 | for (pattern in patterns) 1299 | transformed <- gsub(pattern[[1L]], pattern[[2L]], transformed, fixed = TRUE) 1300 | 1301 | # parse it 1302 | rfile <- tempfile("renv-json-", fileext = ".R") 1303 | on.exit(unlink(rfile), add = TRUE) 1304 | writeLines(transformed, con = rfile) 1305 | json <- parse(rfile, keep.source = FALSE, srcfile = NULL)[[1L]] 1306 | 1307 | # evaluate in safe environment 1308 | result <- eval(json, envir = renv_json_read_envir()) 1309 | 1310 | # fix up strings if necessary -- do so only with reversible patterns 1311 | patterns <- Filter(function(pattern) pattern[[3L]], patterns) 1312 | renv_json_read_remap(result, patterns) 1313 | 1314 | } 1315 | 1316 | 1317 | # load the renv profile, if any 1318 | renv_bootstrap_profile_load(project) 1319 | 1320 | # construct path to library root 1321 | root <- renv_bootstrap_library_root(project) 1322 | 1323 | # construct library prefix for platform 1324 | prefix <- renv_bootstrap_platform_prefix() 1325 | 1326 | # construct full libpath 1327 | libpath <- file.path(root, prefix) 1328 | 1329 | # run bootstrap code 1330 | renv_bootstrap_exec(project, libpath, version) 1331 | 1332 | invisible() 1333 | 1334 | }) 1335 | -------------------------------------------------------------------------------- /renv/settings.dcf: -------------------------------------------------------------------------------- 1 | bioconductor.version: 2 | external.libraries: 3 | ignored.packages: 4 | package.dependency.fields: Imports, Depends, LinkingTo 5 | r.version: 6 | snapshot.type: implicit 7 | use.cache: TRUE 8 | vcs.ignore.cellar: TRUE 9 | vcs.ignore.library: TRUE 10 | vcs.ignore.local: TRUE 11 | -------------------------------------------------------------------------------- /renv/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "bioconductor.version": [], 3 | "external.libraries": [], 4 | "ignored.packages": [], 5 | "package.dependency.fields": [ 6 | "Imports", 7 | "Depends", 8 | "LinkingTo" 9 | ], 10 | "r.version": [], 11 | "snapshot.type": "implicit", 12 | "use.cache": true, 13 | "vcs.ignore.cellar": true, 14 | "vcs.ignore.library": true, 15 | "vcs.ignore.local": true, 16 | "vcs.manage.ignores": true 17 | } 18 | -------------------------------------------------------------------------------- /vignettes/.gitignore: -------------------------------------------------------------------------------- 1 | *.html 2 | *.R 3 | *.csv 4 | -------------------------------------------------------------------------------- /vignettes/cran-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/r-hub/cransays/ef0efd7e76b49539ea95073be6bcc3de98bbc550/vignettes/cran-diagram.png -------------------------------------------------------------------------------- /vignettes/dashboard.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "CRAN incoming dashboard" 3 | date: "`r format(Sys.time(), '%F %R UTC%z')`" 4 | output: rmarkdown::html_vignette 5 | vignette: > 6 | %\VignetteIndexEntry{CRAN incoming dashboard} 7 | %\VignetteEngine{knitr::rmarkdown} 8 | %\VignetteEncoding{UTF-8} 9 | --- 10 | 11 | ```{r setup, include = FALSE} 12 | knitr::opts_chunk$set( 13 | collapse = TRUE, 14 | comment = "#>", 15 | warning = FALSE, 16 | message = FALSE, 17 | echo = FALSE 18 | ) 19 | ``` 20 | 21 | The data in this table stems from our querying https://cran.r-project.org/incoming/. 22 | We update it every hour. [See below](#cran-review-workflow) for a description of each 23 | folder meaning. 24 | 25 | 26 | 27 | # Dashboard 28 | 29 | ```{r get-data} 30 | library(dplyr) 31 | 32 | standard_folders <- c( 33 | "pretest", "inspect", "recheck", "pending", "publish", "newbies", "waiting" 34 | ) 35 | 36 | cran_raw <- cransays::take_snapshot() 37 | 38 | cran_incoming <- cran_raw |> 39 | arrange(subfolder, howlongago) |> 40 | filter(subfolder != "archive") |> 41 | mutate( 42 | folder = ifelse(subfolder %in% standard_folders, subfolder, "human"), 43 | subfolder = ifelse(subfolder %in% standard_folders, NA, subfolder) 44 | ) 45 | 46 | cran_incoming |> 47 | select(package, version, snapshot_time, folder, subfolder, submission_time) |> 48 | arrange(package, version) |> 49 | write.csv( 50 | paste0("cran-incoming-v5-", format(Sys.time(), "%Y%m%dT%H%M%S"), ".csv"), 51 | row.names = FALSE, 52 | quote = FALSE 53 | ) 54 | ``` 55 | 56 | ```{r} 57 | library(reactable) 58 | 59 | colours <- c( 60 | "pretest" = "#F8F3BA", 61 | "inspect" = "#F8F3BA", 62 | "human" = "#F1D9A1", 63 | "recheck" = "#E5CADB", 64 | "publish" = "#A5D6C8" 65 | ) 66 | 67 | cran_incoming |> 68 | dplyr::select(package, version, submission_time, folder, subfolder) |> 69 | reactable( 70 | columns = list( 71 | folder = colDef(style = function(value) { 72 | val <- as.character(value) 73 | if (val %in% names(colours)) { 74 | list(background = colours[[val]]) 75 | } else { 76 | list() 77 | } 78 | }), 79 | submission_time = colDef(cell = function(value, index) { 80 | prettyunits::time_ago(value) 81 | }) 82 | ), 83 | defaultSorted = list("submission_time" = "desc"), 84 | filterable = TRUE, 85 | defaultPageSize = 50 86 | ) 87 | ``` 88 | 89 | 90 | # CRAN review workflow 91 | 92 | Your package will be stored in a different folder depending on its current state 93 | in the review process. The exact meaning of each folder is detailed in articles from 94 | the R Journal in [2018](https://journal.r-project.org/archive/2018-1/cran.pdf) and [2019](https://journal.r-project.org/archive/2019-1/cran.pdf), and updated by a [2019 mailing list post](https://stat.ethz.ch/pipermail/r-package-devel/2019q1/003631.html) (and [confirmed in 2022](https://stat.ethz.ch/pipermail/r-package-devel/2022q2/008084.html)): 95 | 96 | - **inspect**: your package is awaiting manual inspection by the CRAN team, probably because automated tests found a problem that is likely to be a false positive 97 | - **newbies**: a specific queue for the manual inspection of first-time CRAN submissions. 98 | - **pending**: a CRAN team member has to do a closer inspection and needs more time. 99 | - **human**: your package has been assigned to a specific CRAN member (with initials as indicated by `subfolder`) for further inspection. 100 | - **waiting**: the CRAN team is waiting for an answer from you, e.g. because issues are present that CRAN cannot automatically check for, such as maintainer changes (check your e-mail ...) 101 | - **pretest**: the CRAN maintainers restarted automated tests on your package to 102 | see whether an issue has been fixed by your action or is still present. 103 | - **archive**: your package has been rejected from CRAN because it did not pass checks cleanly and the problems were not likely to be false positives. 104 | - **recheck**: your package has passed basic checks. Because other CRAN packages depend on yours ("reverse dependencies"), a reverse-dependency-checking step is underway to see if your update has broken anything downstream. 105 | - **publish**: you're all set! Your package has passed the review process and 106 | will soon be available on CRAN. 107 | 108 | This information is (approximately) summarised in the following diagram by Hadley Wickham, 109 | available in the [cran-stages Github](https://github.com/edgararuiz/cran-stages) 110 | repository: 111 | 112 | ```{r, out.width="50%", fig.align='center'} 113 | knitr::include_graphics("cran-diagram.png") 114 | ``` 115 | --------------------------------------------------------------------------------