diff --git a/.Rbuildignore b/.Rbuildignore index abe85f3..db3653d 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,10 +1,5 @@ -^renv$ -^renv\.lock$ ^fairenough\.Rproj$ -^CLAUDE\.md$ -^pipeline\.qmd$ ^\.Rproj\.user$ -^data-raw$ ^LICENSE\.md$ ^README\.Rmd$ ^\.github$ @@ -14,8 +9,14 @@ ^pkgdown$ ^CRAN-SUBMISSION$ ^dev$ -^\.claude$ -^TODO\.md$ -^legacy$ -^tests/penguins$ - +\.claude +CLAUDE\.md +TODO +legacy +tests/palmerpenguins +rv/ +rproject\.toml +rv\.lock +CITATION.cff +^README\.Rmd$ +^README\.html$ diff --git a/.Rprofile b/.Rprofile deleted file mode 100644 index 81b960f..0000000 --- a/.Rprofile +++ /dev/null @@ -1 +0,0 @@ -source("renv/activate.R") diff --git a/.github/workflows/render-readme.yml b/.github/workflows/render-readme.yml deleted file mode 100644 index af86b33..0000000 --- a/.github/workflows/render-readme.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Render README - -on: - push: - branches: [main] - paths: - - 'README.qmd' - - 'DESCRIPTION' - pull_request: - branches: [main] - paths: - - 'README.qmd' - - 'DESCRIPTION' - -jobs: - render: - runs-on: ubuntu-latest - - steps: - - name: Check out repository - uses: actions/checkout@v4 - - - name: Set up Quarto - uses: quarto-dev/quarto-actions/setup@v2 - - - name: Set up R - uses: r-lib/actions/setup-r@v2 - with: - r-version: '4.3.0' - - - name: Install R dependencies - uses: r-lib/actions/setup-r-dependencies@v2 - with: - packages: | - any::knitr - any::rmarkdown - any::desc - any::dplyr - - - name: Render Quarto document - uses: quarto-dev/quarto-actions/render@v2 - with: - path: README.qmd - - - name: Commit rendered files - run: | - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - git add README.md - git diff --staged --quiet || git commit -m "Auto-render README from Quarto" - git push \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5dbd5cc..8ae6237 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,16 @@ CLAUDE.md tests/* !tests/testthat !tests/palmerpenguins -TODO.md +TODO/ legacy .claude /.quarto/ -docs/ \ No newline at end of file +docs/ +rv/ +data_raw/ +*.bk* +*.DS_Store +.RData +.Ruserdata +README.html +.Rprofile \ No newline at end of file diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..cf703f6 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,622 @@ +# -------------------------------------------- +# CITATION file created with {cffr} R package +# See also: https://docs.ropensci.org/cffr/ +# -------------------------------------------- + +cff-version: 1.2.0 +message: 'To cite package "fairenough" in publications use:' +type: software +license: MIT +title: 'fairenough: fairenough' +version: 0.1.0 +abstract: Convert tidy data into R packages with documentation websites and intelligent + AI descriptions. +authors: +- family-names: Massari + given-names: Nicolo + email: nmassari@ethz.ch + orcid: https://orcid.org/0009-0006-8421-930X +- family-names: Zhong + given-names: Mian + email: mzhong@ethz.ch + orcid: https://orcid.org/0009-0009-4546-7214 +- family-names: Götschmann + given-names: Margaux + email: margauxg@ethz.ch + orcid: https://orcid.org/0009-0002-2567-3343 +- family-names: Walder + given-names: Colin + email: cwalder@ethz.ch + orcid: https://orcid.org/0009-0006-0969-1954 +- family-names: Schöbitz + given-names: Lars + email: lschoebitz@ethz.ch + orcid: https://orcid.org/0000-0003-2196-5015 +repository-code: https://github.com/openwashdata/fairenough +url: https://github.com/openwashdata/fairenough +date-released: '2025-08-28' +contact: +- family-names: Massari + given-names: Nicolo + email: nmassari@ethz.ch + orcid: https://orcid.org/0009-0006-8421-930X +references: +- type: software + title: 'R: A Language and Environment for Statistical Computing' + notes: Depends + url: https://www.R-project.org/ + authors: + - name: R Core Team + institution: + name: R Foundation for Statistical Computing + address: Vienna, Austria + year: '2025' + version: '>= 4.1.0' +- type: software + title: cli + abstract: 'cli: Helpers for Developing Command Line Interfaces' + notes: Imports + url: https://cli.r-lib.org + repository: https://CRAN.R-project.org/package=cli + authors: + - family-names: Csárdi + given-names: Gábor + email: gabor@posit.co + year: '2025' + doi: 10.32614/CRAN.package.cli +- type: software + title: desc + abstract: 'desc: Manipulate DESCRIPTION Files' + notes: Imports + url: https://desc.r-lib.org/ + repository: https://CRAN.R-project.org/package=desc + authors: + - family-names: Csárdi + given-names: Gábor + email: csardi.gabor@gmail.com + - family-names: Müller + given-names: Kirill + - family-names: Hester + given-names: Jim + email: james.f.hester@gmail.com + year: '2025' + doi: 10.32614/CRAN.package.desc +- type: software + title: devtools + abstract: 'devtools: Tools to Make Developing R Packages Easier' + notes: Imports + url: https://devtools.r-lib.org/ + repository: https://CRAN.R-project.org/package=devtools + authors: + - family-names: Wickham + given-names: Hadley + - family-names: Hester + given-names: Jim + - family-names: Chang + given-names: Winston + - family-names: Bryan + given-names: Jennifer + email: jenny@rstudio.com + orcid: https://orcid.org/0000-0002-6983-2759 + year: '2025' + doi: 10.32614/CRAN.package.devtools +- type: software + title: dplyr + abstract: 'dplyr: A Grammar of Data Manipulation' + notes: Imports + url: https://dplyr.tidyverse.org + repository: https://CRAN.R-project.org/package=dplyr + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + orcid: https://orcid.org/0000-0003-4757-117X + - family-names: François + given-names: Romain + orcid: https://orcid.org/0000-0002-2444-4226 + - family-names: Henry + given-names: Lionel + - family-names: Müller + given-names: Kirill + orcid: https://orcid.org/0000-0002-1416-3412 + - family-names: Vaughan + given-names: Davis + email: davis@posit.co + orcid: https://orcid.org/0000-0003-4777-038X + year: '2025' + doi: 10.32614/CRAN.package.dplyr +- type: software + title: fs + abstract: 'fs: Cross-Platform File System Operations Based on ''libuv''' + notes: Imports + url: https://fs.r-lib.org + repository: https://CRAN.R-project.org/package=fs + authors: + - family-names: Hester + given-names: Jim + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + - family-names: Csárdi + given-names: Gábor + email: csardi.gabor@gmail.com + year: '2025' + doi: 10.32614/CRAN.package.fs +- type: software + title: here + abstract: 'here: A Simpler Way to Find Your Files' + notes: Imports + url: https://here.r-lib.org/ + repository: https://CRAN.R-project.org/package=here + authors: + - family-names: Müller + given-names: Kirill + email: krlmlr+r@mailbox.org + orcid: https://orcid.org/0000-0002-1416-3412 + year: '2025' + doi: 10.32614/CRAN.package.here +- type: software + title: janitor + abstract: 'janitor: Simple Tools for Examining and Cleaning Dirty Data' + notes: Imports + url: https://sfirke.github.io/janitor/ + repository: https://CRAN.R-project.org/package=janitor + authors: + - family-names: Firke + given-names: Sam + email: samuel.firke@gmail.com + year: '2025' + doi: 10.32614/CRAN.package.janitor +- type: software + title: readr + abstract: 'readr: Read Rectangular Text Data' + notes: Imports + url: https://readr.tidyverse.org + repository: https://CRAN.R-project.org/package=readr + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + - family-names: Hester + given-names: Jim + - family-names: Bryan + given-names: Jennifer + email: jenny@posit.co + orcid: https://orcid.org/0000-0002-6983-2759 + year: '2025' + doi: 10.32614/CRAN.package.readr +- type: software + title: readxl + abstract: 'readxl: Read Excel Files' + notes: Imports + url: https://readxl.tidyverse.org + repository: https://CRAN.R-project.org/package=readxl + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + orcid: https://orcid.org/0000-0003-4757-117X + - family-names: Bryan + given-names: Jennifer + email: jenny@posit.co + orcid: https://orcid.org/0000-0002-6983-2759 + year: '2025' + doi: 10.32614/CRAN.package.readxl +- type: software + title: roxygen2 + abstract: 'roxygen2: In-Line Documentation for R' + notes: Imports + url: https://roxygen2.r-lib.org/ + repository: https://CRAN.R-project.org/package=roxygen2 + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + orcid: https://orcid.org/0000-0003-4757-117X + - family-names: Danenberg + given-names: Peter + email: pcd@roxygen.org + - family-names: Csárdi + given-names: Gábor + email: csardi.gabor@gmail.com + - family-names: Eugster + given-names: Manuel + year: '2025' + doi: 10.32614/CRAN.package.roxygen2 +- type: software + title: tools + abstract: 'R: A Language and Environment for Statistical Computing' + notes: Imports + authors: + - name: R Core Team + institution: + name: R Foundation for Statistical Computing + address: Vienna, Austria + year: '2025' +- type: software + title: usethis + abstract: 'usethis: Automate Package and Project Setup' + notes: Imports + url: https://usethis.r-lib.org + repository: https://CRAN.R-project.org/package=usethis + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + orcid: https://orcid.org/0000-0003-4757-117X + - family-names: Bryan + given-names: Jennifer + email: jenny@posit.co + orcid: https://orcid.org/0000-0002-6983-2759 + - family-names: Barrett + given-names: Malcolm + email: malcolmbarrett@gmail.com + orcid: https://orcid.org/0000-0003-0299-5825 + - family-names: Teucher + given-names: Andy + email: andy.teucher@posit.co + orcid: https://orcid.org/0000-0002-7840-692X + year: '2025' + doi: 10.32614/CRAN.package.usethis +- type: software + title: whisker + abstract: 'whisker: mustache for R, Logicless Templating' + notes: Imports + url: https://github.com/edwindj/whisker + repository: https://CRAN.R-project.org/package=whisker + authors: + - family-names: Jonge + given-names: Edwin + name-particle: de + year: '2025' + doi: 10.32614/CRAN.package.whisker +- type: software + title: cffr + abstract: 'cffr: Generate Citation File Format (''cff'') Metadata for R Packages' + notes: Imports + url: https://docs.ropensci.org/cffr/ + repository: https://CRAN.R-project.org/package=cffr + authors: + - family-names: Hernangómez + given-names: Diego + email: diego.hernangomezherrero@gmail.com + orcid: https://orcid.org/0000-0001-8457-4658 + year: '2025' + doi: 10.32614/CRAN.package.cffr +- type: software + title: pkgdown + abstract: 'pkgdown: Make Static HTML Documentation for a Package' + notes: Imports + url: https://pkgdown.r-lib.org/ + repository: https://CRAN.R-project.org/package=pkgdown + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + orcid: https://orcid.org/0000-0003-4757-117X + - family-names: Hesselberth + given-names: Jay + orcid: https://orcid.org/0000-0002-6299-179X + - family-names: Salmon + given-names: Maëlle + orcid: https://orcid.org/0000-0002-2815-0399 + - family-names: Roy + given-names: Olivier + - family-names: Brüggemann + given-names: Salim + orcid: https://orcid.org/0000-0002-5329-5987 + year: '2025' + doi: 10.32614/CRAN.package.pkgdown +- type: software + title: rmarkdown + abstract: 'rmarkdown: Dynamic Documents for R' + notes: Imports + url: https://pkgs.rstudio.com/rmarkdown/ + repository: https://CRAN.R-project.org/package=rmarkdown + authors: + - family-names: Allaire + given-names: JJ + email: jj@posit.co + - family-names: Xie + given-names: Yihui + email: xie@yihui.name + orcid: https://orcid.org/0000-0003-0645-5666 + - family-names: Dervieux + given-names: Christophe + email: cderv@posit.co + orcid: https://orcid.org/0000-0003-4474-2498 + - family-names: McPherson + given-names: Jonathan + email: jonathan@posit.co + - family-names: Luraschi + given-names: Javier + - family-names: Ushey + given-names: Kevin + email: kevin@posit.co + - family-names: Atkins + given-names: Aron + email: aron@posit.co + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + - family-names: Cheng + given-names: Joe + email: joe@posit.co + - family-names: Chang + given-names: Winston + email: winston@posit.co + - family-names: Iannone + given-names: Richard + email: rich@posit.co + orcid: https://orcid.org/0000-0003-3925-190X + year: '2025' + doi: 10.32614/CRAN.package.rmarkdown +- type: software + title: quarto + abstract: 'quarto: R Interface to ''Quarto'' Markdown Publishing System' + notes: Imports + url: https://quarto-dev.github.io/quarto-r/ + repository: https://CRAN.R-project.org/package=quarto + authors: + - family-names: Allaire + given-names: JJ + email: jj@posit.co + orcid: https://orcid.org/0000-0003-0174-9868 + - family-names: Dervieux + given-names: Christophe + email: cderv@posit.co + orcid: https://orcid.org/0000-0003-4474-2498 + year: '2025' + doi: 10.32614/CRAN.package.quarto +- type: software + title: knitr + abstract: 'knitr: A General-Purpose Package for Dynamic Report Generation in R' + notes: Imports + url: https://yihui.org/knitr/ + repository: https://CRAN.R-project.org/package=knitr + authors: + - family-names: Xie + given-names: Yihui + email: xie@yihui.name + orcid: https://orcid.org/0000-0003-0645-5666 + year: '2025' + doi: 10.32614/CRAN.package.knitr +- type: software + title: withr + abstract: 'withr: Run Code ''With'' Temporarily Modified Global State' + notes: Imports + url: https://withr.r-lib.org + repository: https://CRAN.R-project.org/package=withr + authors: + - family-names: Hester + given-names: Jim + - family-names: Henry + given-names: Lionel + email: lionel@posit.co + - family-names: Müller + given-names: Kirill + email: krlmlr+r@mailbox.org + - family-names: Ushey + given-names: Kevin + email: kevinushey@gmail.com + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + - family-names: Chang + given-names: Winston + year: '2025' + doi: 10.32614/CRAN.package.withr +- type: software + title: ellmer + abstract: 'ellmer: Chat with Large Language Models' + notes: Imports + url: https://ellmer.tidyverse.org + repository: https://CRAN.R-project.org/package=ellmer + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + orcid: https://orcid.org/0000-0003-4757-117X + - family-names: Cheng + given-names: Joe + - family-names: Jacobs + given-names: Aaron + - family-names: Aden-Buie + given-names: Garrick + email: garrick@posit.co + orcid: https://orcid.org/0000-0002-7111-0077 + - family-names: Schloerke + given-names: Barret + email: barret@posit.co + orcid: https://orcid.org/0000-0001-9986-114X + year: '2025' + doi: 10.32614/CRAN.package.ellmer +- type: software + title: glue + abstract: 'glue: Interpreted String Literals' + notes: Imports + url: https://glue.tidyverse.org/ + repository: https://CRAN.R-project.org/package=glue + authors: + - family-names: Hester + given-names: Jim + orcid: https://orcid.org/0000-0002-2739-7082 + - family-names: Bryan + given-names: Jennifer + email: jenny@posit.co + orcid: https://orcid.org/0000-0002-6983-2759 + year: '2025' + doi: 10.32614/CRAN.package.glue +- type: software + title: jsonlite + abstract: 'jsonlite: A Simple and Robust JSON Parser and Generator for R' + notes: Imports + url: https://jeroen.r-universe.dev/jsonlite + repository: https://CRAN.R-project.org/package=jsonlite + authors: + - family-names: Ooms + given-names: Jeroen + email: jeroenooms@gmail.com + orcid: https://orcid.org/0000-0002-4035-0289 + year: '2025' + doi: 10.32614/CRAN.package.jsonlite +- type: software + title: tibble + abstract: 'tibble: Simple Data Frames' + notes: Imports + url: https://tibble.tidyverse.org/ + repository: https://CRAN.R-project.org/package=tibble + authors: + - family-names: Müller + given-names: Kirill + email: kirill@cynkra.com + orcid: https://orcid.org/0000-0002-1416-3412 + - family-names: Wickham + given-names: Hadley + email: hadley@rstudio.com + year: '2025' + doi: 10.32614/CRAN.package.tibble +- type: software + title: spelling + abstract: 'spelling: Tools for Spell Checking in R' + notes: Imports + url: https://ropensci.r-universe.dev/spelling + repository: https://CRAN.R-project.org/package=spelling + authors: + - family-names: Ooms + given-names: Jeroen + email: jeroenooms@gmail.com + orcid: https://orcid.org/0000-0002-4035-0289 + - family-names: Hester + given-names: Jim + email: james.hester@rstudio.com + year: '2025' + doi: 10.32614/CRAN.package.spelling +- type: software + title: rstudioapi + abstract: 'rstudioapi: Safely Access the RStudio API' + notes: Imports + url: https://rstudio.github.io/rstudioapi/ + repository: https://CRAN.R-project.org/package=rstudioapi + authors: + - family-names: Ushey + given-names: Kevin + email: kevin@rstudio.com + - family-names: Allaire + given-names: JJ + email: jj@posit.co + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + - family-names: Ritchie + given-names: Gary + email: gary@posit.co + year: '2025' + doi: 10.32614/CRAN.package.rstudioapi +- type: software + title: goodpractice + abstract: 'goodpractice: Advice on R Package Building' + notes: Imports + url: https://docs.ropensci.org/goodpractice/ + repository: https://CRAN.R-project.org/package=goodpractice + authors: + - family-names: Padgham + given-names: Mark + email: mark@ropensci.org + orcid: https://orcid.org/0000-0003-2172-5265 + - family-names: Marks + given-names: Karina + email: karina.marks@ascent.io + - family-names: Bortoli + given-names: Daniel + name-particle: de + - family-names: Csardi + given-names: Gabor + email: csardi.gabor@gmail.com + - family-names: Frick + given-names: Hannah + email: hannah.frick@gmail.com + - family-names: Jones + given-names: Owen + email: owenjonesuob@gmail.com + - family-names: Alexander + given-names: Hannah + email: halexander@mango-solutions.com + year: '2025' + doi: 10.32614/CRAN.package.goodpractice +- type: software + title: gt + abstract: 'gt: Easily Create Presentation-Ready Display Tables' + notes: Imports + url: https://gt.rstudio.com + repository: https://CRAN.R-project.org/package=gt + authors: + - family-names: Iannone + given-names: Richard + email: rich@posit.co + orcid: https://orcid.org/0000-0003-3925-190X + - family-names: Cheng + given-names: Joe + email: joe@posit.co + - family-names: Schloerke + given-names: Barret + email: barret@posit.co + orcid: https://orcid.org/0000-0001-9986-114X + - family-names: Hughes + given-names: Ellis + email: ellis.h.hughes@gsk.com + orcid: https://orcid.org/0000-0003-0637-4436 + - family-names: Lauer + given-names: Alexandra + email: alexandralauer1@gmail.com + orcid: https://orcid.org/0000-0002-4191-6301 + - family-names: Seo + given-names: JooYoung + email: jseo1005@illinois.edu + orcid: https://orcid.org/0000-0002-4064-6012 + - family-names: Brevoort + given-names: Ken + email: ken@brevoort.com + orcid: https://orcid.org/0000-0002-4001-8358 + - family-names: Roy + given-names: Olivier + year: '2025' + doi: 10.32614/CRAN.package.gt +- type: software + title: fontawesome + abstract: 'fontawesome: Easily Work with ''Font Awesome'' Icons' + notes: Imports + url: https://rstudio.github.io/fontawesome/ + repository: https://CRAN.R-project.org/package=fontawesome + authors: + - family-names: Iannone + given-names: Richard + email: rich@posit.co + orcid: https://orcid.org/0000-0003-3925-190X + year: '2025' + doi: 10.32614/CRAN.package.fontawesome +- type: software + title: stringr + abstract: 'stringr: Simple, Consistent Wrappers for Common String Operations' + notes: Imports + url: https://stringr.tidyverse.org + repository: https://CRAN.R-project.org/package=stringr + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + year: '2025' + doi: 10.32614/CRAN.package.stringr +- type: software + title: testthat + abstract: 'testthat: Unit Testing for R' + notes: Suggests + url: https://testthat.r-lib.org + repository: https://CRAN.R-project.org/package=testthat + authors: + - family-names: Wickham + given-names: Hadley + email: hadley@posit.co + year: '2025' + doi: 10.32614/CRAN.package.testthat + diff --git a/DESCRIPTION b/DESCRIPTION index 7a45706..88ee3c1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: fairenough -Title: Automated R Data Package Creation with AI-Powered Documentation +Title: fairenough Version: 0.1.0 Authors@R: c( person("Nicolo", "Massari", , "nmassari@ethz.ch", role = c("aut", "cre"), @@ -14,11 +14,7 @@ Authors@R: c( comment = c(ORCID = "0000-0003-2196-5015")), person("Global Health Engineering, ETH Zurich", role = "cph") ) -Description: An intelligent toolkit for automated R data package creation. - Evolved from washr, fairenough minimizes manual intervention by automating - data processing, AI-powered dictionary generation, documentation creation, - and publication workflows. Features chainable functions and a unified - pipeline from raw data to published package. +Description: Convert tidy data into R packages with documentation websites and intelligent AI descriptions. License: MIT + file LICENSE Depends: R (>= 4.1.0) URL: https://github.com/openwashdata/fairenough @@ -40,8 +36,9 @@ Imports: cffr, pkgdown, rmarkdown, + quarto, knitr, - withr (>= 3.0.0), + withr, ellmer, glue, jsonlite, @@ -53,12 +50,13 @@ Imports: fontawesome, stringr Suggests: - testthat (>= 3.2.1), + testthat, VignetteBuilder: knitr Config/Needs/website: rmarkdown Config/testthat/edition: 3 Encoding: UTF-8 Language: en-GB +Date: 2025-08-28 Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.2 diff --git a/NAMESPACE b/NAMESPACE index 96caf89..129eccc 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,14 +7,9 @@ export(build_package) export(build_readme) export(build_roxygen) export(build_site) -export(clean_data) export(collect) -export(collect_dataset_info) export(collect_metadata) -export(create_directories) export(ensure_directory) -export(export_csv) -export(export_rda) export(fairenough) export(filter_supported_files) export(gendict) @@ -28,28 +23,25 @@ export(get_raw_dir) export(get_supported_extensions) export(is_supported_file_type) export(match_license) -export(move_data_files) export(process) +export(process_clean) export(process_data) export(prompt_confirm) export(prompt_input) export(prompt_menu) export(prompt_multi_select) export(read_data) -export(run_checks) export(save_metadata) export(setup) -export(setup_gitignore) export(setup_package) -export(update_metadata) export(use_template) export(validate_data_frame) export(validate_date) export(validate_email) export(validate_file_path) export(validate_orcid) -export(validate_package) export(validate_package_name) +export(validate_setup_completed) export(validate_url) importFrom(stats,na.omit) importFrom(stats,setNames) diff --git a/R/build_package.R b/R/build_package.R index cbcfbdc..45d1403 100644 --- a/R/build_package.R +++ b/R/build_package.R @@ -100,8 +100,7 @@ build_package <- function( #' @param spell_check Whether to run spell check (default: TRUE) #' @param good_practice Whether to run good practice checks (default: FALSE, as it's slow) #' @return List with validation results -#' @export -validate_package <- function( +.validate_package <- function( base_path = NULL, verbose = TRUE, spell_check = TRUE, @@ -119,7 +118,7 @@ validate_package <- function( if (verbose) { cli::cli_alert_info("Running R CMD check") } - results$check <- run_checks(base_path = base_path, verbose = verbose) + results$check <- .run_checks(base_path = base_path, verbose = verbose) # 2. Spell check (if requested) if (spell_check) { @@ -327,48 +326,87 @@ build_roxygen <- function(type = "dataset", base_path = NULL, verbose = TRUE) { return(invisible(TRUE)) } -#' Build README from inst/templates/README.Rmd +#' Build README from inst/templates/README.qmd #' -#' Build README.md from the README.Rmd template, incorporating package metadata. +#' Build README.md from the README.qmd template, incorporating package metadata. #' #' @param base_path Base path for the project #' @param verbose Whether to show messages -#' @param overwrite Whether to overwrite README.Rmd found at base_path +#' @param overwrite Whether to overwrite README.qmd found at base_path #' @return Path to generated README #' @export -build_readme <- function(base_path = NULL, verbose = TRUE, overwrite = TRUE) { +build_readme <- function( + base_path = NULL, + verbose = TRUE, + overwrite = TRUE, + quarto = FALSE +) { base_path <- get_base_path(base_path) - - # Create README.Rmd from template if it doesn't exist - readme_rmd <- file.path(base_path, "README.Rmd") - template_path <- system.file( - "templates", - "README.Rmd", - package = "fairenough" - ) - fs::file_copy(template_path, readme_rmd, overwrite = overwrite) - - # Check if rmarkdown is available - if (requireNamespace("rmarkdown", quietly = TRUE)) { - tryCatch( - { - # Render README with proper working directory - readme_md <- file.path(base_path, "README.md") - rmarkdown::render( - readme_rmd, - output_format = "github_document", - output_file = readme_md, - quiet = !verbose - ) - if (verbose) cli::cli_alert_success("Generated README.md") - }, - error = function(e) { - cli::cli_alert_warning("Could not render README: {e$message}") - } + quarto_installed <- system("quarto --version", ignore.stderr = TRUE) == 0 + cli::cli_alert_info("Is Quarto installed: {quarto_installed}") + + if (quarto && quarto_installed) { + # Create README.qmd from template if it doesn't exist + readme_qmd <- file.path(base_path, "README.qmd") + template_path <- system.file( + "templates", + "README.qmd", + package = "fairenough" ) + fs::file_copy(template_path, readme_qmd, overwrite = overwrite) + + # Check if quarto is available + if (requireNamespace("quarto", quietly = TRUE)) { + tryCatch( + { + # Render README with quarto + quarto::quarto_render( + readme_qmd, + output_format = "gfm", + quiet = !verbose + ) + if (verbose) cli::cli_alert_success("Generated README.md") + }, + error = function(e) { + cli::cli_alert_warning("Could not render README: {e$message}") + } + ) + } else { + cli::cli_alert_warning("Package {.pkg quarto} not installed") + cli::cli_alert_info("Install it with: install.packages('quarto')") + } } else { - cli::cli_alert_warning("Package {.pkg rmarkdown} not installed") - cli::cli_alert_info("Install it with: install.packages('rmarkdown')") + # Create README.Rmd from template if it doesn't exist + readme_rmd <- file.path(base_path, "README.Rmd") + template_path <- system.file( + "templates", + "README.Rmd", + package = "fairenough" + ) + fs::file_copy(template_path, readme_rmd, overwrite = overwrite) + + # Check if rmarkdown is available + if (requireNamespace("rmarkdown", quietly = TRUE)) { + tryCatch( + { + # Render README with proper working directory + readme_md <- file.path(base_path, "README.md") + rmarkdown::render( + readme_rmd, + output_format = "github_document", + output_file = readme_md, + quiet = !verbose + ) + if (verbose) cli::cli_alert_success("Generated README.md") + }, + error = function(e) { + cli::cli_alert_warning("Could not render README: {e$message}") + } + ) + } else { + cli::cli_alert_warning("Package {.pkg rmarkdown} not installed") + cli::cli_alert_info("Install it with: install.packages('rmarkdown')") + } } return(invisible(file.path(base_path, "README.md"))) @@ -447,11 +485,38 @@ build_site <- function( metadata <- list() } + # Flatten metadata structure for template substitution + template_data <- list() + if (!is.null(metadata$package)) { + # Flatten package fields to top level for template + template_data$package <- metadata$package + # Add flattened versions for backward compatibility + if (!is.null(metadata$package$name)) { + template_data$package.name <- metadata$package$name + } + if (!is.null(metadata$package$github_user)) { + template_data$package.github_user <- metadata$package$github_user + } + if (!is.null(metadata$package$title)) { + template_data$package.title <- metadata$package$title + } + if (!is.null(metadata$package$description)) { + template_data$package.description <- metadata$package$description + } + } + # Keep other metadata sections as-is + if (!is.null(metadata$authors)) { + template_data$authors <- metadata$authors + } + if (!is.null(metadata$license)) { + template_data$license <- metadata$license + } + # Use our own template function that respects base_path use_template( template = "_pkgdown.yml", save_as = "_pkgdown.yml", - data = metadata, + data = template_data, base_path = base_path, package = "fairenough", verbose = verbose @@ -466,20 +531,12 @@ build_site <- function( tryCatch( { # pkgdown::build_site() needs to know the package path - if (verbose) { - pkgdown::build_site( - pkg = base_path, - preview = preview, - install = install - ) - } else { - suppressMessages(pkgdown::build_site( - pkg = base_path, - preview = preview, - install = install - )) - } - if (verbose) cli::cli_alert_success("Website built in {.path docs/}") + devtools::build_site( + base_path, + preview = preview, + install = install, + quiet = !verbose + ) }, error = function(e) { cli::cli_alert_warning("Could not build website: {e$message}") @@ -497,8 +554,7 @@ build_site <- function( #' @param base_path Base path for the project #' @param verbose Whether to show messages #' @return Logical indicating if checks passed -#' @export -run_checks <- function(base_path = NULL, verbose = TRUE) { +.run_checks <- function(base_path = NULL, verbose = TRUE) { base_path <- get_base_path(base_path) if (!requireNamespace("devtools", quietly = TRUE)) { @@ -514,7 +570,7 @@ run_checks <- function(base_path = NULL, verbose = TRUE) { check_result <- tryCatch( { devtools::check( - pkg = base_path, + base_path, quiet = !verbose, args = "--no-manual" ) diff --git a/R/collect_metadata.R b/R/collect_metadata.R index 9c59cca..f944148 100644 --- a/R/collect_metadata.R +++ b/R/collect_metadata.R @@ -29,6 +29,7 @@ #' @param save_to_desc Whether to save to DESCRIPTION file (default: TRUE) #' @param base_path Base path for the project #' @param overwrite Whether to overwrite existing metadata (default: FALSE) +#' @param verbose Whether to show detailed messages (default: TRUE) #' #' @return List containing all metadata organized by category #' @export @@ -54,7 +55,8 @@ collect_metadata <- function( interactive = TRUE, save_to_desc = TRUE, base_path = NULL, - overwrite = FALSE + overwrite = FALSE, + verbose = TRUE ) { # Get base path if needed if (!is.null(base_path)) { @@ -73,15 +75,27 @@ collect_metadata <- function( ) if (!is.null(existing_meta)) { - if (interactive) { - cli::cli_alert_info("Metadata already exists in DESCRIPTION") - if ( - !prompt_confirm("Do you want to overwrite it?", default = FALSE) - ) { + # Check if existing metadata is meaningful (not placeholder content) + has_meaningful_content <- (!is.null(existing_meta$package$title) && + !grepl("Placeholder|What the Package Does", existing_meta$package$title, ignore.case = TRUE)) || + (!is.null(existing_meta$package$description) && + !grepl("Placeholder|What the package does", existing_meta$package$description, ignore.case = TRUE)) || + (!is.null(existing_meta$authors) && length(existing_meta$authors) > 0 && + !any(sapply(existing_meta$authors, function(author) { + grepl("First|Last", paste(author$given, author$family), ignore.case = TRUE) + }))) + + if (has_meaningful_content) { + if (interactive) { + cli::cli_alert_info("Metadata already exists in DESCRIPTION") + if ( + !prompt_confirm("Do you want to overwrite it?", default = FALSE) + ) { + return(existing_meta) + } + } else { return(existing_meta) } - } else { - return(existing_meta) } } } @@ -163,6 +177,9 @@ collect_metadata <- function( affiliation <- prompt_input(" Affiliation", default = "ETH Zurich") # Use multi-select for roles + # First author gets "aut" and "cre" by default, others get only "aut" + default_roles <- if (author_num == 1) c("aut", "cre") else c("aut") + roles <- prompt_multi_select( choices = c( "Author (wrote the package)" = "aut", @@ -172,7 +189,7 @@ collect_metadata <- function( "Thesis advisor (supervised the work)" = "ths" ), title = "Select author roles", - default = c("aut", "cre"), + default = default_roles, min_choices = 1 ) @@ -191,6 +208,23 @@ collect_metadata <- function( } } + # Ensure at least one author has the "cre" (creator/maintainer) role + if (!is.null(authors) && length(authors) > 0) { + has_maintainer <- any(sapply(authors, function(author) { + "cre" %in% author$roles + })) + + if (!has_maintainer) { + # Automatically assign "cre" role to the first author + if (length(authors) > 0) { + authors[[1]]$roles <- unique(c(authors[[1]]$roles, "cre")) + if (interactive) { + cli::cli_alert_info("Added 'creator/maintainer' role to first author (required for R packages)") + } + } + } + } + # License cli::cli_h3("License") @@ -423,19 +457,16 @@ collect_metadata <- function( cli::cli_alert_success("Metadata collection complete!") - # Show summary - if (interactive) { - show_summary <- prompt_confirm("\nShow metadata summary?", default = TRUE) - if (show_summary) { - cli::cli_h3("Metadata Summary") - cli::cli_text("Title: {metadata$package$title}") - cli::cli_text("Authors: {length(metadata$authors)}") - cli::cli_text("License: {metadata$license$id}") - if (!is.null(metadata$publication$keywords)) { - cli::cli_text( - "Keywords: {paste(metadata$publication$keywords, collapse = ', ')}" - ) - } + # Always show summary + if (verbose) { + cli::cli_h3("Metadata Summary") + cli::cli_text("Title: {metadata$package$title}") + cli::cli_text("Authors: {length(metadata$authors)}") + cli::cli_text("License: {metadata$license$id}") + if (!is.null(metadata$publication$keywords)) { + cli::cli_text( + "Keywords: {paste(metadata$publication$keywords, collapse = ', ')}" + ) } } @@ -694,17 +725,12 @@ get_metadata <- function(base_path = NULL) { language = safe_get("Language") ) - # Extract github_user from URL if present - urls <- d$get_urls() - if (length(urls) > 0) { - github_pattern <- "https://github.com/([^/]+)/" - if (grepl(github_pattern, urls[1])) { - metadata$package$github_user <- sub( - paste0(github_pattern, ".*"), - "\\1", - urls[1] - ) - } + # Extract github_user from custom field + github_user <- safe_get("github_user") + if (!is.null(github_user)) { + metadata$package$github_user <- github_user + } else { + cli::cli_alert_warning("No 'github_user' field found in DESCRIPTION. Website URL may be incomplete.") } # Authors diff --git a/R/generate_dictionary.R b/R/generate_dictionary.R index cfa4b41..f64aa96 100644 --- a/R/generate_dictionary.R +++ b/R/generate_dictionary.R @@ -46,7 +46,7 @@ generate_dictionary <- function( } # Collect variable information using the utility function - datasets_info <- collect_dataset_info(base_path) + datasets_info <- .collect_dataset_info(base_path) if (is.null(datasets_info)) { cli::cli_alert_warning("No .rda files found in {.path data/}") @@ -176,3 +176,54 @@ generate_dictionary <- function( return(invisible(dictionary)) } + +#' Collect dataset information from .rda files +#' +#' Scans data directory for .rda files and collects variable information +#' +#' @param base_path Base path for the project +#' @return Data frame with dataset information +.collect_dataset_info <- function(base_path = NULL) { + base_path <- get_base_path(base_path) + + # Check data directory + data_dir <- file.path(base_path, "data") + if (!fs::dir_exists(data_dir)) { + return(NULL) + } + + # Find all .rda files + rda_files <- list.files(data_dir, pattern = "\\.rda$", full.names = TRUE) + + if (length(rda_files) == 0) { + return(NULL) + } + + # Collect dataset information + datasets <- list() + + for (rda_file in rda_files) { + # Load data + temp_env <- new.env() + load(rda_file, envir = temp_env) + data_name <- ls(envir = temp_env)[1] + data <- get(data_name, envir = temp_env) + + # Create dataset info + datasets[[data_name]] <- list( + rows = nrow(data), + cols = ncol(data), + variables = list( + names = names(data), + types = vapply( + data, + function(x) class(x)[1], + character(1), + USE.NAMES = FALSE + ) + ) + ) + } + + return(datasets) +} diff --git a/R/process_data.R b/R/process_data.R index 49fe86a..0d0b3cb 100644 --- a/R/process_data.R +++ b/R/process_data.R @@ -4,7 +4,7 @@ #' Processes all files in the raw data directory and exports them as .rda and CSV. #' #' @param raw_dir Directory containing raw data files (default: "data_raw") -#' @param auto_clean Whether to automatically clean data (default: TRUE) +#' @param auto_clean Whether to run clean_data (default: TRUE) #' @param overwrite Whether to overwrite existing files (default: TRUE) #' @param base_path Base path for the project (default: uses get_base_path()) #' @param verbose Whether to show detailed messages (default: TRUE) @@ -71,12 +71,12 @@ process_data <- function( # Clean if requested if (auto_clean) { - data <- clean_data(data, verbose = FALSE) + data <- process_clean(data, verbose = FALSE) } # Export to both formats - export_rda(data, file_name, base_path, overwrite, verbose = FALSE) - export_csv(data, file_name, base_path, overwrite, verbose = FALSE) + .export_rda(data, file_name, base_path, overwrite, verbose = FALSE) + .export_csv(data, file_name, base_path, overwrite, verbose = FALSE) processed_files[[file_name]] <- list( source = file_path, @@ -141,15 +141,15 @@ process_data <- function( #' @examples #' \dontrun{ #' # Basic cleaning -#' clean_data(my_data) +#' process_clean(my_data) #' #' # Keep original column names -#' clean_data(my_data, clean_names = FALSE) +#' process_clean(my_data, clean_names = FALSE) #' #' # Custom null values -#' clean_data(my_data, string_nulls = c("N/A", "missing", "")) +#' process_clean(my_data, string_nulls = c("N/A", "missing", "")) #' } -clean_data <- function( +process_clean <- function( data, clean_names = TRUE, string_nulls = c("null", "NA", ""), @@ -210,8 +210,7 @@ clean_data <- function( #' @param overwrite Whether to overwrite existing file (default: TRUE) #' @param verbose Whether to show messages (default: TRUE) #' @return Path to the created file -#' @export -export_rda <- function( +.export_rda <- function( data, name, base_path = NULL, @@ -258,8 +257,7 @@ export_rda <- function( #' @param overwrite Whether to overwrite existing file (default: TRUE) #' @param verbose Whether to show messages (default: TRUE) #' @return Path to the created file -#' @export -export_csv <- function( +.export_csv <- function( data, name, base_path = NULL, diff --git a/R/setup_package.R b/R/setup_package.R index 5300ebc..337ed42 100644 --- a/R/setup_package.R +++ b/R/setup_package.R @@ -47,8 +47,14 @@ setup_package <- function( ) { # Create basic package structure # run usethis::create_package with usethis.allow_nested_project = TRUE + # When overwrite=TRUE, suppress prompts by setting usethis.quiet = TRUE + options_list <- list(usethis.allow_nested_project = TRUE) + if (overwrite) { + options_list$usethis.quiet <- TRUE + } + withr::with_options( - list(usethis.allow_nested_project = TRUE), + options_list, usethis::create_package( path = base_path, fields = list(), @@ -61,14 +67,14 @@ setup_package <- function( } # Create all necessary directories - dirs_created <- create_directories( + dirs_created <- .create_directories( dirs = c(raw_dir, "data", "inst/extdata"), base_path = base_path, verbose = verbose ) # Move data files to data_raw - files_moved <- move_data_files( + files_moved <- .move_data_files( raw_dir = raw_dir, base_path = base_path, verbose = verbose @@ -76,7 +82,7 @@ setup_package <- function( # Setup gitignore if requested if (gitignore) { - setup_gitignore( + .setup_gitignore( raw_dir = raw_dir, base_path = base_path, verbose = verbose @@ -105,8 +111,7 @@ setup_package <- function( #' @param base_path Base path for the project #' @param verbose Whether to show messages #' @return Character vector of created directories -#' @export -create_directories <- function( +.create_directories <- function( dirs = c("data_raw", "data", "inst/extdata"), base_path = NULL, verbose = TRUE @@ -138,8 +143,7 @@ create_directories <- function( #' @param base_path Base path for the project #' @param verbose Whether to show messages #' @return Character vector of moved files -#' @export -move_data_files <- function( +.move_data_files <- function( raw_dir = "data_raw", base_path = NULL, verbose = TRUE @@ -194,8 +198,7 @@ move_data_files <- function( #' @param base_path Base path for the project #' @param verbose Whether to show messages #' @return Logical indicating success -#' @export -setup_gitignore <- function( +.setup_gitignore <- function( raw_dir = NULL, base_path = NULL, verbose = TRUE diff --git a/R/utils.R b/R/utils.R index 1949533..fe19195 100644 --- a/R/utils.R +++ b/R/utils.R @@ -319,82 +319,555 @@ use_template <- function( return(invisible(output_path)) } -#' Update metadata in DESCRIPTION file +#' Validation system for fairenough pipeline steps +#' +#' These functions validate actual completion status using comprehensive checklists. +#' Each validation returns detailed results about what's complete and what's missing. #' -#' Simple wrapper around write_metadata_to_desc for updating a single key. -#' Creates a metadata structure with just the specified key and writes it. -#' -#' @param key Top-level key (e.g., "datasets", "package") -#' @param data Data to add/update for the key -#' @param base_path Base path for the project -#' @param verbose Whether to show messages -#' @return NULL (invisibly) -#' @export -update_metadata <- function(key, data, base_path = NULL, verbose = TRUE) { - # Create metadata structure with just this key - metadata <- list() - metadata[[key]] <- data - - # Write to DESCRIPTION (without overwriting other fields) - write_metadata_to_desc( - metadata, - base_path, - overwrite = FALSE, - create = TRUE, - verbose = verbose - ) - invisible(NULL) +# Simple validation helper functions for setup +check_description_exists <- function(base_path) { + file.exists(file.path(base_path, "DESCRIPTION")) } -#' Collect dataset information from .rda files -#' -#' Scans data directory for .rda files and collects variable information -#' -#' @param base_path Base path for the project -#' @return Data frame with dataset information -#' @export -collect_dataset_info <- function(base_path = NULL) { - base_path <- get_base_path(base_path) +check_rproj_exists <- function(base_path) { + length(list.files(base_path, pattern = "\\.Rproj$")) > 0 +} + +check_dirs_exist <- function(base_path) { + required_dirs <- c("data", "data_raw", "inst/extdata") + all(dir.exists(file.path(base_path, required_dirs))) +} + +check_gitignore_configured <- function(base_path) { + gitignore_path <- file.path(base_path, ".gitignore") + if (!file.exists(gitignore_path)) return(FALSE) + + gitignore_content <- readLines(gitignore_path) + required_entries <- c("data_raw/", ".Rhistory", ".RData") + all(sapply(required_entries, function(entry) any(grepl(entry, gitignore_content, fixed = TRUE)))) +} - # Check data directory +# Validation helpers for data processing +check_raw_data_files <- function(base_path) { + raw_dir <- file.path(base_path, get_raw_dir()) + if (!dir.exists(raw_dir)) return(FALSE) + + all_files <- list.files(raw_dir, full.names = TRUE) + data_files <- filter_supported_files(all_files) + length(data_files) > 0 +} + +check_rda_files <- function(base_path) { data_dir <- file.path(base_path, "data") - if (!fs::dir_exists(data_dir)) { - return(NULL) - } + if (!dir.exists(data_dir)) return(FALSE) + + rda_files <- list.files(data_dir, pattern = "\\.rda$") + length(rda_files) > 0 +} - # Find all .rda files - rda_files <- list.files(data_dir, pattern = "\\.rda$", full.names = TRUE) +check_csv_files <- function(base_path) { + extdata_dir <- file.path(base_path, "inst", "extdata") + if (!dir.exists(extdata_dir)) return(FALSE) + + csv_files <- list.files(extdata_dir, pattern = "\\.csv$") + length(csv_files) > 0 +} - if (length(rda_files) == 0) { - return(NULL) - } +check_file_consistency <- function(base_path) { + raw_dir <- file.path(base_path, get_raw_dir()) + data_dir <- file.path(base_path, "data") + extdata_dir <- file.path(base_path, "inst", "extdata") + + if (!all(dir.exists(c(raw_dir, data_dir, extdata_dir)))) return(FALSE) + + raw_files <- filter_supported_files(list.files(raw_dir, full.names = TRUE)) + if (length(raw_files) == 0) return(TRUE) # No raw files yet + + rda_files <- list.files(data_dir, pattern = "\\.rda$") + # Exclude dictionary.csv from consistency check + csv_files <- list.files(extdata_dir, pattern = "\\.csv$") + csv_files <- csv_files[csv_files != "dictionary.csv"] + + raw_names <- tools::file_path_sans_ext(basename(raw_files)) + rda_names <- tools::file_path_sans_ext(rda_files) + csv_names <- tools::file_path_sans_ext(csv_files) + + length(raw_names) == length(rda_names) && + length(raw_names) == length(csv_names) && + all(sort(raw_names) == sort(rda_names)) && + all(sort(raw_names) == sort(csv_names)) +} - # Collect dataset information - datasets <- list() +# Validation helpers for metadata +check_package_name <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + if (!file.exists(desc_path)) return(FALSE) + + tryCatch({ + d <- desc::desc(file = desc_path) + pkg_name <- d$get("Package")[[1]] + !is.null(pkg_name) && pkg_name != "placeholder" && nchar(pkg_name) > 0 + }, error = function(e) FALSE) +} + +check_package_title <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + if (!file.exists(desc_path)) return(FALSE) + + tryCatch({ + d <- desc::desc(file = desc_path) + title <- d$get("Title")[[1]] + !is.null(title) && !grepl("Placeholder|What the Package Does", title, ignore.case = TRUE) && nchar(title) > 0 + }, error = function(e) FALSE) +} + +check_package_description <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + if (!file.exists(desc_path)) return(FALSE) + + tryCatch({ + d <- desc::desc(file = desc_path) + description <- d$get("Description")[[1]] + !is.null(description) && !grepl("Placeholder|What the package does", description, ignore.case = TRUE) && nchar(description) > 0 + }, error = function(e) FALSE) +} + +check_package_authors <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + if (!file.exists(desc_path)) return(FALSE) + + tryCatch({ + d <- desc::desc(file = desc_path) + authors <- d$get_authors() + + if (length(authors) == 0) return(FALSE) + + has_maintainer <- any(sapply(authors, function(author) "cre" %in% author$role)) + meaningful_authors <- any(sapply(authors, function(author) { + !is.null(author$given) && !is.null(author$family) && + !grepl("First|Last", paste(author$given, author$family), ignore.case = TRUE) + })) + + has_maintainer && meaningful_authors + }, error = function(e) FALSE) +} + +check_package_license <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + if (!file.exists(desc_path)) return(FALSE) + + tryCatch({ + d <- desc::desc(file = desc_path) + license <- d$get("License")[[1]] + !is.null(license) && !grepl("use_.*_license|pick a license", license, ignore.case = TRUE) && nchar(license) > 0 + }, error = function(e) FALSE) +} +check_package_urls <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + if (!file.exists(desc_path)) return(FALSE) + + tryCatch({ + d <- desc::desc(file = desc_path) + urls <- d$get_urls() + + github_user <- tryCatch(d$get("github_user")[[1]], error = function(e) NULL) + if (is.null(github_user) || github_user == "") return(TRUE) # URLs optional if no github_user + + length(urls) > 0 + }, error = function(e) FALSE) +} + +# Validation helpers for dictionary +check_dictionary_file <- function(base_path) { + file.exists(file.path(base_path, "inst", "extdata", "dictionary.csv")) +} + +check_variables_documented <- function(base_path) { + dict_path <- file.path(base_path, "inst", "extdata", "dictionary.csv") + if (!file.exists(dict_path)) return(FALSE) + + data_dir <- file.path(base_path, "data") + if (!dir.exists(data_dir)) return(TRUE) # No data files yet + + rda_files <- list.files(data_dir, pattern = "\\.rda$", full.names = TRUE) + if (length(rda_files) == 0) return(TRUE) # No data files yet + + all_vars <- character(0) for (rda_file in rda_files) { - # Load data temp_env <- new.env() - load(rda_file, envir = temp_env) - data_name <- ls(envir = temp_env)[1] - data <- get(data_name, envir = temp_env) - - # Create dataset info - datasets[[data_name]] <- list( - rows = nrow(data), - cols = ncol(data), - variables = list( - names = names(data), - types = vapply( - data, - function(x) class(x)[1], - character(1), - USE.NAMES = FALSE - ) - ) + tryCatch({ + load(rda_file, envir = temp_env) + data_name <- ls(envir = temp_env)[1] + data_obj <- get(data_name, envir = temp_env) + all_vars <- c(all_vars, names(data_obj)) + }, error = function(e) NULL) + } + + dict <- utils::read.csv(dict_path) + dict_vars <- dict$variable_name + length(setdiff(all_vars, dict_vars)) == 0 +} + +check_descriptions_filled <- function(base_path) { + dict_path <- file.path(base_path, "inst", "extdata", "dictionary.csv") + if (!file.exists(dict_path)) return(FALSE) + + dict <- utils::read.csv(dict_path) + if (nrow(dict) == 0) return(TRUE) + + !any(is.na(dict$description) | dict$description == "" | trimws(dict$description) == "") +} + +check_dictionary_structure <- function(base_path) { + dict_path <- file.path(base_path, "inst", "extdata", "dictionary.csv") + if (!file.exists(dict_path)) return(FALSE) + + dict <- utils::read.csv(dict_path) + required_cols <- c("directory", "file_name", "variable_name", "variable_type", "description") + all(required_cols %in% names(dict)) +} + +# Validation helpers for build +check_license_file <- function(base_path) { + license_files <- c("LICENSE", "LICENSE.md") + license_paths <- file.path(base_path, license_files) + any(file.exists(license_paths)) +} + +check_citation_files <- function(base_path) { + citation_cff <- file.path(base_path, "CITATION.cff") + citation_inst <- file.path(base_path, "inst", "CITATION") + file.exists(citation_cff) && file.exists(citation_inst) +} + +check_readme_file <- function(base_path) { + file.exists(file.path(base_path, "README.md")) +} + +check_documentation <- function(base_path) { + man_dir <- file.path(base_path, "man") + if (!dir.exists(man_dir)) return(FALSE) + + rd_files <- list.files(man_dir, pattern = "\\.Rd$") + length(rd_files) > 0 +} + +check_website <- function(base_path) { + docs_dir <- file.path(base_path, "docs") + if (!dir.exists(docs_dir)) return(FALSE) + + index_file <- file.path(docs_dir, "index.html") + file.exists(index_file) +} + +check_package_installable <- function(base_path) { + desc_path <- file.path(base_path, "DESCRIPTION") + namespace_path <- file.path(base_path, "NAMESPACE") + r_dir <- file.path(base_path, "R") + + file.exists(desc_path) && file.exists(namespace_path) && dir.exists(r_dir) +} + +#' Process checklist into structured results +#' @param checklist List of check items with name, description, check, required fields +#' @return Formatted checklist results +format_checklist_results <- function(checklist) { + results <- list() + passed <- 0 + total <- length(checklist) + + for (i in seq_along(checklist)) { + item <- checklist[[i]] + error_msg <- NULL + + check_passed <- tryCatch( + item$check, + error = function(e) { + error_msg <- e$message + FALSE + } + ) + + results[[i]] <- list( + name = item$name, + description = item$description, + passed = check_passed, + required = if (is.null(item$required)) TRUE else item$required, + details = if (!check_passed && !is.null(item$details)) item$details else NULL, + error = if (!is.null(error_msg)) error_msg else NULL ) + + if (check_passed) passed <- passed + 1 + } + + list( + all_passed = passed == total, + all_required_passed = all(sapply(results, function(x) !x$required || x$passed)), + total_checks = total, + passed_checks = passed, + failed_checks = total - passed, + items = results + ) +} + +#' Display formatted checklist to user +#' @param validation Validation results from format_checklist_results +#' @param title Title for the checklist display +#' @param verbose Whether to show detailed output +show_checklist <- function(validation, title, verbose = TRUE) { + if (!verbose) return(invisible(NULL)) + + # Show summary + status <- if (validation$all_required_passed) "✅" else "❌" + cli::cli_h3("{status} {title}: {validation$passed_checks}/{validation$total_checks} checks passed") + + # Show individual items + for (item in validation$items) { + icon <- if (item$passed) "✅" else "❌" + + cli::cli_text("{icon} {item$name}: {item$description}") + + if (!item$passed && !is.null(item$details)) { + cli::cli_alert_info(" → {item$details}") + } + + if (!item$passed && !is.null(item$error)) { + cli::cli_alert_warning(" → Error: {item$error}") + } } + + invisible(validation) +} - return(datasets) +#' Get summary string for validation results +#' @param validation Validation results +#' @return Character string with summary +checklist_summary <- function(validation) { + paste0(validation$passed_checks, "/", validation$total_checks, " checks passed") } + +#' Validate setup completion status +#' @param base_path Base path for the project +#' @return Formatted checklist results +#' @export +validate_setup_completed <- function(base_path = NULL) { + base_path <- get_base_path(base_path) + + checklist <- list( + list( + name = "R package structure", + description = "DESCRIPTION file exists", + check = check_description_exists(base_path), + required = TRUE, + details = "Run setup() to create R package structure" + ), + list( + name = "RStudio project", + description = ".Rproj file exists", + check = check_rproj_exists(base_path), + required = TRUE, + details = "Run setup() to create RStudio project file" + ), + list( + name = "Data directories", + description = "Required directories exist (data/, data_raw/, inst/extdata/)", + check = check_dirs_exist(base_path), + required = TRUE, + details = "Run setup() to create required directory structure" + ), + list( + name = "Git configuration", + description = ".gitignore configured properly", + check = check_gitignore_configured(base_path), + required = FALSE, + details = "Run setup() to configure .gitignore properly" + ) + ) + + format_checklist_results(checklist) +} + +validate_processing_completed <- function(base_path = NULL) { + base_path <- get_base_path(base_path) + + checklist <- list( + list( + name = "Raw data files", + description = "Data files found in data_raw/ directory", + check = check_raw_data_files(base_path), + required = TRUE, + details = "Place CSV/Excel files in data_raw/ directory" + ), + list( + name = "Processed RDA files", + description = ".rda files exist in data/ directory", + check = check_rda_files(base_path), + required = TRUE, + details = "Run process() to convert raw data to .rda format" + ), + list( + name = "CSV exports", + description = ".csv files exist in inst/extdata/ directory", + check = check_csv_files(base_path), + required = TRUE, + details = "Run process() to export CSV files to inst/extdata/" + ), + list( + name = "File consistency", + description = "Raw, RDA, and CSV files match in count and naming", + check = check_file_consistency(base_path), + required = FALSE, + details = "Run process() to ensure consistent file processing" + ) + ) + + format_checklist_results(checklist) +} + +validate_metadata_collected <- function(base_path = NULL) { + base_path <- get_base_path(base_path) + + checklist <- list( + list( + name = "DESCRIPTION file", + description = "DESCRIPTION file exists", + check = check_description_exists(base_path), + required = TRUE, + details = "Run setup() first to create DESCRIPTION file" + ), + list( + name = "Package name", + description = "Package field in DESCRIPTION is meaningful", + check = check_package_name(base_path), + required = TRUE, + details = "Run collect() to set proper package name" + ), + list( + name = "Package title", + description = "Title field in DESCRIPTION is meaningful", + check = check_package_title(base_path), + required = TRUE, + details = "Run collect() to set meaningful package title" + ), + list( + name = "Package description", + description = "Description field in DESCRIPTION is meaningful", + check = check_package_description(base_path), + required = TRUE, + details = "Run collect() to set meaningful package description" + ), + list( + name = "Authors", + description = "Authors@R field with maintainer (cre role)", + check = check_package_authors(base_path), + required = TRUE, + details = "Run collect() to set proper authors with maintainer" + ), + list( + name = "License", + description = "License field is properly set", + check = check_package_license(base_path), + required = TRUE, + details = "Run collect() to set proper license" + ), + list( + name = "URLs", + description = "URL fields configured (if github_user provided)", + check = check_package_urls(base_path), + required = FALSE, + details = "URLs will be set automatically if github_user is provided" + ) + ) + + format_checklist_results(checklist) +} + +validate_dictionary_completed <- function(base_path = NULL) { + base_path <- get_base_path(base_path) + + checklist <- list( + list( + name = "Dictionary file", + description = "dictionary.csv exists in inst/extdata/", + check = check_dictionary_file(base_path), + required = TRUE, + details = "Run generate() to create dictionary file" + ), + list( + name = "Variables documented", + description = "All variables from data files are in dictionary", + check = check_variables_documented(base_path), + required = TRUE, + details = "Run generate() to document all variables" + ), + list( + name = "Descriptions filled", + description = "All variable descriptions are complete (not empty or NA)", + check = check_descriptions_filled(base_path), + required = TRUE, + details = "Run generate() with a chat object or fill descriptions manually" + ), + list( + name = "Dictionary structure", + description = "Dictionary has proper structure and required columns", + check = check_dictionary_structure(base_path), + required = TRUE, + details = "Run generate() to create properly structured dictionary" + ) + ) + + format_checklist_results(checklist) +} + +validate_build_completed <- function(base_path = NULL) { + base_path <- get_base_path(base_path) + + checklist <- list( + list( + name = "LICENSE file", + description = "LICENSE or LICENSE.md file exists", + check = check_license_file(base_path), + required = TRUE, + details = "Run build() to create LICENSE file" + ), + list( + name = "CITATION files", + description = "Citation files exist (CITATION.cff and inst/CITATION)", + check = check_citation_files(base_path), + required = TRUE, + details = "Run build() to create citation files" + ), + list( + name = "README file", + description = "README.md file exists", + check = check_readme_file(base_path), + required = TRUE, + details = "Run build() to generate README.md" + ), + list( + name = "Documentation", + description = "man/ directory with .Rd files exists", + check = check_documentation(base_path), + required = TRUE, + details = "Run build() to generate roxygen documentation" + ), + list( + name = "Package website", + description = "Website built in docs/ directory", + check = check_website(base_path), + required = FALSE, + details = "Run build() to generate package website" + ), + list( + name = "Package installable", + description = "Package structure is valid and installable", + check = check_package_installable(base_path), + required = TRUE, + details = "Run build() to ensure package is properly structured" + ) + ) + + format_checklist_results(checklist) +} \ No newline at end of file diff --git a/R/wrappers.R b/R/wrappers.R index 6ee6af1..fe4b760 100644 --- a/R/wrappers.R +++ b/R/wrappers.R @@ -19,6 +19,23 @@ setup <- function( ) { base_path <- get_base_path(base_path) + # Check if setup is already completed + if (!overwrite) { + validation <- validate_setup_completed(base_path) + + if (validation$all_required_passed) { + if (verbose) { + show_checklist(validation, "Setup already completed", verbose) + cli::cli_alert_info("Use {.code overwrite = TRUE} to force setup") + } + return(invisible(list( + base_path = base_path, + skipped = TRUE, + validation = validation + ))) + } + } + if (verbose) { cli::cli_h1("Setting up fairenough project") } @@ -36,6 +53,12 @@ setup <- function( overwrite = overwrite ) + # Show final validation + if (verbose) { + final_validation <- validate_setup_completed(base_path) + show_checklist(final_validation, "Setup completed", verbose) + } + if (verbose) { cli::cli_alert_success("Project setup completed!") } @@ -64,6 +87,19 @@ process <- function( ) { base_path <- get_base_path(base_path) + # Check if processing is already completed + if (!overwrite) { + validation <- validate_processing_completed(base_path) + + if (validation$all_required_passed) { + if (verbose) { + show_checklist(validation, "Data processing already completed", verbose) + cli::cli_alert_info("Use {.code overwrite = TRUE} to force processing") + } + return(invisible(list(skipped = TRUE, validation = validation))) + } + } + if (verbose) { cli::cli_h1("Processing all data files") } @@ -81,6 +117,12 @@ process <- function( verbose = verbose ) + # Show final validation + if (verbose) { + final_validation <- validate_processing_completed(base_path) + show_checklist(final_validation, "Data processing completed", verbose) + } + if (verbose) { cli::cli_alert_success("Data processing completed!") } @@ -113,6 +155,25 @@ collect <- function( ) { base_path <- get_base_path(base_path) + # Check if metadata collection is already completed + if (!overwrite) { + validation <- validate_metadata_collected(base_path) + + if (validation$all_required_passed) { + if (verbose) { + show_checklist( + validation, + "Metadata collection already completed", + verbose + ) + cli::cli_alert_info("Use {.code overwrite = TRUE} to force collection") + } + # Return existing metadata + existing_meta <- get_metadata(base_path) + return(invisible(existing_meta)) + } + } + if (verbose) { cli::cli_h1("Collecting package metadata") } @@ -131,6 +192,12 @@ collect <- function( ... ) + # Show final validation + if (verbose) { + final_validation <- validate_metadata_collected(base_path) + show_checklist(final_validation, "Metadata collection completed", verbose) + } + if (verbose) { cli::cli_alert_success("Metadata collection completed!") } @@ -161,6 +228,29 @@ generate <- function( ) { base_path <- get_base_path(base_path) + # Check if dictionary generation is already completed (descriptions exist) + if (!overwrite) { + validation <- validate_dictionary_completed(base_path) + + if (validation$all_required_passed) { + if (verbose) { + show_checklist( + validation, + "Dictionary generation already completed", + verbose + ) + cli::cli_alert_info("Use {.code overwrite = TRUE} to force generation") + } + # Return existing dictionary if it exists + dict_path <- file.path(base_path, "inst", "extdata", "dictionary.csv") + if (file.exists(dict_path)) { + existing_dict <- utils::read.csv(dict_path) + return(invisible(existing_dict)) + } + return(invisible(NULL)) + } + } + if (verbose) { cli::cli_h1("Generating data dictionary") } @@ -179,6 +269,12 @@ generate <- function( ... ) + # Show final validation + if (verbose) { + final_validation <- validate_dictionary_completed(base_path) + show_checklist(final_validation, "Dictionary generation completed", verbose) + } + if (verbose) { cli::cli_alert_success("Data dictionary generation completed!") } @@ -197,6 +293,7 @@ generate <- function( #' @param overwrite Whether to overwrite existing files (default: TRUE) #' @param validate Whether to validate the CITATION file (default: TRUE) #' @param preview Whether to preview the site after building (default: TRUE) +#' @param quarto Whether to use Quarto to build readme (default: FALSE) #' @return List with results from each build step #' @export build <- function( @@ -205,10 +302,24 @@ build <- function( overwrite = TRUE, good_practice = FALSE, validate = TRUE, - preview = TRUE + preview = TRUE, + quarto = FALSE ) { base_path <- get_base_path(base_path) + # Check if build is already completed + if (!overwrite) { + validation <- validate_build_completed(base_path) + + if (validation$all_required_passed) { + if (verbose) { + show_checklist(validation, "Build already completed", verbose) + cli::cli_alert_info("Use {.code overwrite = TRUE} to force build") + } + return(invisible(list(skipped = TRUE, validation = validation))) + } + } + if (verbose) { cli::cli_h1("Building all package components") } @@ -253,7 +364,8 @@ build <- function( results$readme <- build_readme( base_path = base_path, verbose = verbose, - overwrite = overwrite + overwrite = overwrite, + quarto = quarto ) # 5. Build site @@ -267,6 +379,12 @@ build <- function( install = TRUE ) + # Show final validation + if (verbose) { + final_validation <- validate_build_completed(base_path) + show_checklist(final_validation, "Build completed", verbose) + } + if (verbose) { cli::cli_alert_success("All build steps completed!") } @@ -304,7 +422,9 @@ fairenough <- function( results <- list() - # Run complete pipeline + # Run complete pipeline with smart overwrite behavior + # Each step checks its own completion state and skips if already done (unless overwrite=TRUE) + results$setup <- setup( verbose = verbose, overwrite = overwrite, diff --git a/README.Rmd b/README.Rmd new file mode 100644 index 0000000..7dbea97 --- /dev/null +++ b/README.Rmd @@ -0,0 +1,172 @@ +--- +pagetitle: "fairenough" +format: gfm +--- + +# fairenough + + + + +Convert tidy data into R packages with documentation websites and intelligent AI descriptions. **fairenough** prepares your data for publication in one click. + +**See it in action:** [View example output →](https://openwashdata.github.io/palmerpenguins/) + +## Why fairenough? + +Creating R data packages traditionally requires extensive manual work: + +- Writing data documentation by hand + +- Setting up package structure and files + +- Configuring websites and citations + +- Managing dependencies and validation + +**fairenough automates this entire workflow** and optionally allows for AI-powered documentation generation. + + + + +## Installation + +**Prerequisites:** R ≥ 4.1.0 and an API key for your preferred LLM provider + +```r +# Install from GitHub +devtools::install_github("openwashdata/fairenough") +``` + +## Quick Start + +```r +library(fairenough) + +# 1. Set up your LLM chat object (see options below) +Sys.setenv(OPENAI_API_KEY = "your-api-key") +chat <- elmer::chat_openai(model = "gpt-4o-mini", api_args = list(temperature = 0.3)) + +# 2. Place your CSV/Excel files in an empty directory and run +fairenough(chat) +``` + +**That's it!** You'll get a complete R package with: + +- Documented datasets and variables + +- Professional package website + +- Citation files and README + +- Proper R package structure + +### LLM Provider Options + +fairenough works with any [ellmer](https://ellmer.tidyverse.org/) chat object. Popular options: + +```r +# OpenAI (recommended for quality) +chat <- elmer::chat_openai(model = "gpt-4o-mini") + +# Anthropic Claude (excellent for R code) +chat <- elmer::chat_anthropic(model = "claude-3-5-sonnet-20241022") + +# Google Gemini (generous free tier) +chat <- elmer::chat_google_gemini() + +# Local models via Ollama (private, free) +chat <- elmer::chat_ollama(model = "llama3.1") +``` + +[See all supported providers →](https://ellmer.tidyverse.org/reference/index.html) + +## Step-by-Step Usage + +For more control over the process, use individual functions: + +```r +# Step 1: Initialize R package structure +setup() + +# Step 2: Process your data files +process(auto_clean = TRUE) # Optional: basic data cleaning + +# Step 3: Collect package metadata interactively +collect(extended = TRUE) # Optional: comprehensive documentation + +# Step 4: Generate AI-powered documentation +generate(chat, context = "DESCRIBE YOUR DATA") + +# Step 5: Build complete package +build(overwrite = TRUE) # Optional: update existing files +``` + +## Features + +| Function | Purpose | Key Options | +|----------|---------|-------------| +| `fairenough()` | **Complete pipeline** | Accepts all wrapper function arguments | +| `setup()` | Initialize R package structure | Creates directories, .gitignore, etc. | +| `process()` | Validate and process data files | `auto_clean = TRUE` for basic tidying | +| `collect()` | Interactive metadata collection | `extended = TRUE` for detailed docs | +| `generate()` | AI-powered documentation | `context = "..."` for custom descriptions | +| `build()` | Build package infrastructure | `overwrite = TRUE` to update existing | + +**Global options:** All functions support `verbose = TRUE` and `overwrite = TRUE` + +**Supported formats:** CSV, Excel (.xlsx, .xls), with automatic format detection and validation + +## Example Output + +fairenough transforms this: +``` +my-data/ +└── penguins.csv +``` + +Into this complete R package: + +- **Documentation:** AI-generated variable descriptions and data dictionaries + +- **Website:** Professional [pkgdown site](https://openwashdata.github.io/palmerpenguins/) ready for deployment + +- **Citations:** Properly formatted citation files with DOI support + +- **Validation:** Data structure checks and format consistency + +- **Integration:** Full R package that others can install and use + +## Getting Help + +- **Issues & bugs:** [GitHub Issues](https://github.com/openwashdata/fairenough/issues) + +- **Questions:** [GitHub Discussions](https://github.com/openwashdata/fairenough/discussions) + +## Contributing + +We welcome contributions! Please see our [contributing guidelines](CONTRIBUTING.md) and note that this project follows [conventional commits](https://www.conventionalcommits.org/). + +**Development workflow:** +```r +# Test new functions +roxygen2::roxygenise(clean = TRUE) +devtools::load_all() +``` + +**Architecture:** Feature functions maintain consistency in supported formats and path handling. See [R/utils.R](https://github.com/openwashdata/fairenough/blob/main/R/utils.R) for implementation details. + +## License + +[MIT](LICENSE.md) + +--- + +**Citation:** If you use fairenough in your research, please cite with: +```{r citation, echo=FALSE, message=FALSE, warning=FALSE} +tryCatch({ + citation(desc::desc_get_field("Package")) +}, error = function(e) { + cat("Citation information not available\n") +}) +``` \ No newline at end of file diff --git a/README.md b/README.md index 43d8778..739fd94 100644 --- a/README.md +++ b/README.md @@ -1,163 +1,197 @@ - # fairenough + + + + Convert tidy data into R packages with documentation websites and -intelligent AI descriptions. +intelligent AI descriptions. **fairenough** prepares your data for +publication in one click. -## Installation +**See it in action:** [View example output +→](https://openwashdata.github.io/palmerpenguins/) -``` r -# install.packages("devtools") -devtools::install_github("openwashdata/fairenough") -``` +## Why fairenough? -## Usage +Creating R data packages traditionally requires extensive manual work: -### One-Click Pipeline +- Writing data documentation by hand -For the simplest experience, move your datasets in an empty directory, -then run the main `fairenough()` function: +- Setting up package structure and files -``` r -library(fairenough) +- Configuring websites and citations -# Set up your LLM chat object -Sys.setenv(OPENAI_API_KEY = "YOUR_API_TOKEN_HERE") -chat <- elmer::chat_openai(model = "gpt-4o-mini", api_args = list(temperature = 0.3)) +- Managing dependencies and validation -# Run the complete pipeline with one command -fairenough(chat) -``` +**fairenough automates this entire workflow** and optionally allows for +AI-powered documentation generation. -This automatically: - Sets up your R package structure - Processes all -CSV/Excel files in the directory - Collects package metadata through -interactive prompts - Builds documentation, citation files, README, and -website - Generates intelligent data documentation using LLMs - Prepares -your package for publication + -### Granular Control + -For step-by-step control, use individual wrapper functions: +## Installation -``` r -library(fairenough) +**Prerequisites:** R ≥ 4.1.0 and an API key for your preferred LLM +provider -# Step 1: Initialize project structure -setup() +``` r +# Install from GitHub +devtools::install_github("openwashdata/fairenough") +``` -# Step 2: Process your data files -process() +## Quick Start -# Step 3: Collect package metadata -collect() +``` r +library(fairenough) -# Step 4: Generate LLM-powered documentation +# 1. Set up your LLM chat object (see options below) +Sys.setenv(OPENAI_API_KEY = "your-api-key") chat <- elmer::chat_openai(model = "gpt-4o-mini", api_args = list(temperature = 0.3)) -generate(chat) -# Step 5: Build all package components -build() +# 2. Place your CSV/Excel files in an empty directory and run +fairenough(chat) ``` -## Features +**That’s it!** You’ll get a complete R package with: -fairenough provides a complete pipeline for R data package creation, -following these logical steps: +- Documented datasets and variables -**`fairenough()` - One-Click Pipeline** +- Professional package website -- Complete R data package creation with a single `fairenough(chat)` call +- Citation files and README -- Automated workflow from tidy data to finished package +- Proper R package structure -- Args: Supports all flags that can be passed to the individual wrapper - functions +### LLM Provider Options -**Granular Control Options** +fairenough works with any [ellmer](https://ellmer.tidyverse.org/) chat +object. Popular options: -- Individual wrapper functions: `setup()`, `process()`, `collect()`, - `generate()`, `build()` +``` r +# OpenAI (recommended for quality) +chat <- elmer::chat_openai(model = "gpt-4o-mini") + +# Anthropic Claude (excellent for R code) +chat <- elmer::chat_anthropic(model = "claude-3-5-sonnet-20241022") -- Global support for args: `overwrite = TRUE` and `verbose = TRUE` +# Google Gemini (generous free tier) +chat <- elmer::chat_google_gemini() -**1. `setup()` - R Project Setup** +# Local models via Ollama (private, free) +chat <- elmer::chat_ollama(model = "llama3.1") +``` -- R package structure initialization with `usethis` +[See all supported providers +→](https://ellmer.tidyverse.org/reference/index.html) -- Directory and files organization (data_raw, .gitignore, etc.) +## Step-by-Step Usage -**2. `process()` - Automated Data Processing** +For more control over the process, use individual functions: -- Processes all your tidy data with `readr`, `readxl` +``` r +# Step 1: Initialize R package structure +setup() -- Validates data structure and formats +# Step 2: Process your data files +process(auto_clean = TRUE) # Optional: basic data cleaning -- Arg: `auto_clean = TRUE` for automated minimal data cleaning and - tidying +# Step 3: Collect package metadata interactively +collect(extended = TRUE) # Optional: comprehensive documentation -**3. `collect()` - Interactive Metadata Collection** +# Step 4: Generate AI-powered documentation +generate(chat, context = "DESCRIBE YOUR DATA") -- Guided prompts for package metadata (title, description, authors, - etc.) using `cli` +# Step 5: Build complete package +build(overwrite = TRUE) # Optional: update existing files +``` -- Saves directly to DESCRIPTION file with `desc` +## Features -- Arg: `extended = TRUE` for comprehensive documentation +| Function | Purpose | Key Options | +|----|----|----| +| `fairenough()` | **Complete pipeline** | Accepts all wrapper function arguments | +| `setup()` | Initialize R package structure | Creates directories, .gitignore, etc. | +| `process()` | Validate and process data files | `auto_clean = TRUE` for basic tidying | +| `collect()` | Interactive metadata collection | `extended = TRUE` for detailed docs | +| `generate()` | AI-powered documentation | `context = "..."` for custom descriptions | +| `build()` | Build package infrastructure | `overwrite = TRUE` to update existing | -**4. `generate()` - LLM-Powered Documentation** +**Global options:** All functions support `verbose = TRUE` and +`overwrite = TRUE` -- Data dictionary generation using `elmer` chat/LLM integration +**Supported formats:** CSV, Excel (.xlsx, .xls), with automatic format +detection and validation -- Variable descriptions uses the package’s description as context + - actual data samples +## Example Output -- Arg: `contex = "YOUR DATASETS CONTEXT"` +fairenough transforms this: -**5. `build()` - Complete Package Infrastructure** + my-data/ + └── penguins.csv -- Roxygen documentation generation with `roxygen2` +Into this complete R package: -- Citation file creation with validation using `cffr` +- **Documentation:** AI-generated variable descriptions and data + dictionaries -- README generation with `rmarkdown` +- **Website:** Professional [pkgdown + site](https://openwashdata.github.io/palmerpenguins/) ready for + deployment -- Package website building ready for deployment +- **Citations:** Properly formatted citation files with DOI support -## License +- **Validation:** Data structure checks and format consistency -[MIT](LICENSE.md) +- **Integration:** Full R package that others can install and use -## References +## Getting Help -*Horst AM, Hill AP, Gorman KB (2020). palmerpenguins: Palmer Archipelago -(Antarctica) penguin data. R package version 0.1.0. -. doi: -[10.5281/zenodo.3960218](10.5281/zenodo.3960218).* +- **Issues & bugs:** [GitHub + Issues](https://github.com/openwashdata/fairenough/issues) -## Contributions +- **Questions:** [GitHub + Discussions](https://github.com/openwashdata/fairenough/discussions) -Welcome! +## Contributing -**Philosophy** +We welcome contributions! Please see our [contributing +guidelines](CONTRIBUTING.md) and note that this project follows +[conventional commits](https://www.conventionalcommits.org/). -- Conventional commits! . +**Development workflow:** -- Feature functions must maintain architectural consistency. This means - that aspects like supported formats and path handling should be - uniform across all functions. For more details, refer to - [R/utils.R](https://github.com/openwashdata/fairenough/blob/main/R/utils.R). +``` r +# Test new functions +roxygen2::roxygenise(clean = TRUE) +devtools::load_all() +``` -- To test new functions: +**Architecture:** Feature functions maintain consistency in supported +formats and path handling. See +[R/utils.R](https://github.com/openwashdata/fairenough/blob/main/R/utils.R) +for implementation details. - +## License - roxygen2::roxygenise() - devtools::load_all() +[MIT](LICENSE.md) -- Due to their utility outside of {fairenough}, - [`gendict.R`](https://github.com/openwashdata/fairenough/blob/main/R/gendict.R), - [`build_license.R`](https://github.com/openwashdata/fairenough/blob/main/R/build_license.R) - and - [`promptit.R`](https://github.com/openwashdata/fairenough/blob/main/R/promptit.R) - have been kept general and not tied to the package’s architecture. +------------------------------------------------------------------------ + +**Citation:** If you use fairenough in your research, please cite with: + + ## To cite package 'fairenough' in publications use: + ## + ## Massari N, Zhong M, Götschmann M, Walder C, Schöbitz L (2025). "fairenough: fairenough." . + ## + ## A BibTeX entry for LaTeX users is + ## + ## @Misc{massari_etall:2025, + ## title = {fairenough: fairenough}, + ## author = {Nicolo Massari and Mian Zhong and Margaux Götschmann and Colin Walder and Lars Schöbitz}, + ## year = {2025}, + ## url = {https://github.com/openwashdata/fairenough}, + ## abstract = {Convert tidy data into R packages with documentation websites and intelligent AI descriptions.}, + ## version = {0.1.0}, + ## } diff --git a/README.qmd b/README.qmd deleted file mode 100644 index e6a05e4..0000000 --- a/README.qmd +++ /dev/null @@ -1,143 +0,0 @@ ---- -pagetitle: "fairenough" -format: gfm ---- - -# fairenough - -Convert tidy data into R packages with documentation websites and intelligent AI descriptions. - -## Installation - -``` r -# install.packages("devtools") -devtools::install_github("openwashdata/fairenough") -``` - -## Usage - -### One-Click Pipeline - -For the simplest experience, move your datasets in an empty directory, then run the main `fairenough()` function: - -``` r -library(fairenough) - -# Set up your LLM chat object -Sys.setenv(OPENAI_API_KEY = "YOUR_API_TOKEN_HERE") -chat <- elmer::chat_openai(model = "gpt-4o-mini", api_args = list(temperature = 0.3)) - -# Run the complete pipeline with one command -fairenough(chat) -``` - -This automatically: - Sets up your R package structure - Processes all CSV/Excel files in the directory - Collects package metadata through interactive prompts - Builds documentation, citation files, README, and website - Generates intelligent data documentation using LLMs - Prepares your package for publication - -### Granular Control - -For step-by-step control, use individual wrapper functions: - -``` r -library(fairenough) - -# Step 1: Initialize project structure -setup() - -# Step 2: Process your data files -process() - -# Step 3: Collect package metadata -collect() - -# Step 4: Generate LLM-powered documentation -chat <- elmer::chat_openai(model = "gpt-4o-mini", api_args = list(temperature = 0.3)) -generate(chat) - -# Step 5: Build all package components -build() -``` - -## Features - -fairenough provides a complete pipeline for R data package creation, following these logical steps: - -**`fairenough()` - One-Click Pipeline** - -- Complete R data package creation with a single `fairenough(chat)` call - -- Automated workflow from tidy data to finished package - -- Args: Supports all flags that can be passed to the individual wrapper functions - -**Granular Control Options** - -- Individual wrapper functions: `setup()`, `process()`, `collect()`, `generate()`, `build()` - -- Global support for args: `overwrite = TRUE` and `verbose = TRUE` - -**1. `setup()` - R Project Setup** - -- R package structure initialization with `usethis` - -- Directory and files organization (data_raw, .gitignore, etc.) - -**2. `process()` - Automated Data Processing** - -- Processes all your tidy data with `readr`, `readxl` - -- Validates data structure and formats - -- Arg: `auto_clean = TRUE` for automated minimal data cleaning and tidying - -**3. `collect()` - Interactive Metadata Collection** - -- Guided prompts for package metadata (title, description, authors, etc.) using `cli` - -- Saves directly to DESCRIPTION file with `desc` - -- Arg: `extended = TRUE` for comprehensive documentation - -**4. `generate()` - LLM-Powered Documentation** - -- Data dictionary generation using `elmer` chat/LLM integration - -- Variable descriptions uses the package's description as context + actual data samples - -- Arg: `contex = "YOUR DATASETS CONTEXT"` - -**5. `build()` - Complete Package Infrastructure** - -- Roxygen documentation generation with `roxygen2` - -- Citation file creation with validation using `cffr` - -- README generation with `rmarkdown` - -- Package website building ready for deployment - -## License - -[MIT](LICENSE.md) - -## References - -*Horst AM, Hill AP, Gorman KB (2020). palmerpenguins: Palmer Archipelago (Antarctica) penguin data. R package version 0.1.0. . doi: [10.5281/zenodo.3960218](10.5281/zenodo.3960218).* - -## Contributions - -Welcome! - -**Philosophy** - -- Conventional commits! . - -- Feature functions must maintain architectural consistency. This means that aspects like supported formats and path handling should be uniform across all functions. For more details, refer to [R/utils.R](https://github.com/openwashdata/fairenough/blob/main/R/utils.R). - -- To test new functions: - -``` -roxygen2::roxygenise() -devtools::load_all() -``` - -- Due to their utility outside of {fairenough}, [`gendict.R`](https://github.com/openwashdata/fairenough/blob/main/R/gendict.R), [`build_license.R`](https://github.com/openwashdata/fairenough/blob/main/R/build_license.R) and [`promptit.R`](https://github.com/openwashdata/fairenough/blob/main/R/promptit.R) have been kept general and not tied to the package's architecture. \ No newline at end of file diff --git a/inst/CITATION b/inst/CITATION new file mode 100644 index 0000000..2fec19f --- /dev/null +++ b/inst/CITATION @@ -0,0 +1,28 @@ + +bibentry(bibtype = "Misc", + key = "massari_etall:2025", + title = "fairenough: fairenough", + author = c(person(given = "Nicolo", + family = "Massari", + email = "nmassari@ethz.ch", + comment = c(ORCID = "0009-0006-8421-930X")), + person(given = "Mian", + family = "Zhong", + email = "mzhong@ethz.ch", + comment = c(ORCID = "0009-0009-4546-7214")), + person(given = "Margaux", + family = "Götschmann", + email = "margauxg@ethz.ch", + comment = c(ORCID = "0009-0002-2567-3343")), + person(given = "Colin", + family = "Walder", + email = "cwalder@ethz.ch", + comment = c(ORCID = "0009-0006-0969-1954")), + person(given = "Lars", + family = "Schöbitz", + email = "lschoebitz@ethz.ch", + comment = c(ORCID = "0000-0003-2196-5015"))), + year = "2025", + url = "https://github.com/openwashdata/fairenough", + abstract = "Convert tidy data into R packages with documentation websites and intelligent AI descriptions.", + version = "0.1.0") diff --git a/inst/templates/README.qmd b/inst/templates/README.qmd new file mode 100644 index 0000000..379dfc2 --- /dev/null +++ b/inst/templates/README.qmd @@ -0,0 +1,356 @@ +--- +pagetitle: index +prefer-html: true +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + fig.path = "man/figures/README-", + out.width = "100%", + message = FALSE, + warning = FALSE, + fig.retina = 2, + fig.align = 'center' +) + +# Load required packages with better error handling +required_packages <- c("desc", "dplyr", "readr", "gt", + "fontawesome", "stringr", "fairenough") + +for (pkg in required_packages) { + if (!requireNamespace(pkg, quietly = TRUE)) { + stop(paste("Package", pkg, "is required but not installed.", + "Please install it with: install.packages('", pkg, "')", sep = "")) + } + suppressPackageStartupMessages(library(pkg, character.only = TRUE)) +} + +# Configuration +browser_favicon_colour <- "lightblue" +fontawesome::fa_html_dependency() +``` + +```{r load-dictionary, include = FALSE} +#' Load and validate dictionary +#' @return data.frame or NULL +load_dictionary <- function() { + base_path <- fairenough::get_base_path() + dict_path <- file.path(base_path, "inst", "extdata", "dictionary.csv") + + if (!file.exists(dict_path)) { + warning("Dictionary file not found at: ", dict_path) + return(NULL) + } + + tryCatch({ + dict_data <- fairenough::read_data(dict_path, show_messages = FALSE) + + # Ensure it's a data frame + if (!is.data.frame(dict_data)) { + warning("Dictionary is not a data frame: ", class(dict_data)) + return(NULL) + } + + # Check required columns + required_cols <- c("file_name") + if (!all(required_cols %in% names(dict_data))) { + warning("Dictionary missing required columns. Has: ", + paste(names(dict_data), collapse = ", ")) + return(NULL) + } + + return(dict_data) + }, error = function(e) { + warning("Could not read dictionary file: ", e$message) + return(NULL) + }) +} + +# Load dictionary +dictionary <- load_dictionary() + +# Extract dataset names +datasets <- if (!is.null(dictionary)) { + # Remove .rda extension and get unique names + unique(sub("\\.rda$", "", dictionary[["file_name"]])) +} else { + character(0) +} + +# Debug output +if (length(datasets) > 0) { + message("Found datasets: ", paste(datasets, collapse = ", ")) +} else { + warning("No datasets found in dictionary") +} + +# Check optional packages +optional_packages <- c("gt", "fontawesome") +missing_packages <- optional_packages[!vapply(optional_packages, requireNamespace, logical(1), quietly = TRUE)] +``` + +```{r helper-functions, include = FALSE} +#' Load dataset by name +#' @param dataset_name Name of the dataset (without extension) +#' @return data.frame or NULL +load_dataset <- function(dataset_name) { + base_path <- fairenough::get_base_path() + csv_path <- file.path(base_path, "inst", "extdata", paste0(dataset_name, ".csv")) + + if (!file.exists(csv_path)) { + return(NULL) + } + + tryCatch({ + data <- fairenough::read_data(csv_path, show_messages = FALSE) + if (!is.data.frame(data)) { + return(NULL) + } + return(data) + }, error = function(e) { + warning(paste("Could not read dataset", dataset_name, ":", e$message)) + return(NULL) + }) +} + +#' Get dictionary entries for a specific dataset +#' @param dataset_name Name of the dataset +#' @param dictionary The full dictionary data frame +#' @return Filtered dictionary data frame +get_dataset_dictionary <- function(dataset_name, dict_df) { # Renamed parameter + if (is.null(dict_df) || !is.data.frame(dict_df)) { + cat("DEBUG: dict_df is null or not a data frame\n") + return(NULL) + } + + # Extra safety check + if (!("file_name" %in% names(dict_df))) { + cat("DEBUG: file_name column missing from dict_df\n") + return(NULL) + } + + # Use base R to be safe + file_names <- dict_df[["file_name"]] # Use [[ instead of $ + matching_rows <- file_names == dataset_name | + file_names == paste0(dataset_name, ".rda") + + dict_subset <- dict_df[matching_rows, , drop = FALSE] + + # Select display columns if they exist + display_cols <- intersect(names(dict_subset), + c("variable_name", "variable_type", "description")) + + if (length(display_cols) > 0) { + dict_subset <- dict_subset[, display_cols, drop = FALSE] + } + + return(if (nrow(dict_subset) > 0) dict_subset else NULL) +} + +#' Create summary text for data types +#' @param data The dataset +#' @return Character string with type summary +summarize_data_types <- function(data) { + type_summary <- vapply(data, function(x) class(x)[1], character(1)) |> + table() |> + as.data.frame() |> + setNames(c("Type", "Count")) + + if (nrow(type_summary) > 0) { + paste(paste0(type_summary$Count, " ", type_summary$Type), collapse = ", ") + } else { + "" + } +} + +#' Display dataset preview +#' @param data The dataset +#' @param max_cols Maximum columns to display +display_data_preview <- function(data, max_cols = 10) { + display_cols <- min(ncol(data), max_cols) + + display_data <- data |> + head(3) |> + (\(x) if (ncol(x) > display_cols) dplyr::select(x, 1:display_cols) else x)() |> + dplyr::mutate( + dplyr::across(dplyr::where(is.character), + ~ stringr::str_trunc(., width = 50, ellipsis = "...")) + ) + + # Try gt first, fall back to kable + if (requireNamespace("gt", quietly = TRUE)) { + print(display_data |> gt::gt() |> gt::as_raw_html()) + } else { + print(knitr::kable(display_data)) + } + + # Add note if columns were truncated + if (ncol(data) > max_cols) { + cat(paste0("(showing first ", display_cols, " of ", ncol(data), " columns)\n\n")) + } +} + +#' Display dictionary table +#' @param dict_table Dictionary subset for a dataset +display_dictionary_table <- function(dict_table) { + if (is.null(dict_table) || nrow(dict_table) == 0) { + cat("No dictionary entry found for this dataset.\n\n") + return() + } + + if (requireNamespace("gt", quietly = TRUE)) { + print(dict_table |> gt::gt() |> gt::as_raw_html()) + } else { + print(knitr::kable(dict_table, booktabs = TRUE)) + } +} +``` + +# `r desc::desc_get_field("Package")` + +***`r desc::desc_get_field("Title")`*** + + +[![License: CC BY 4.0](https://img.shields.io/badge/License-CC_BY_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/) +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15554776.svg)](https://zenodo.org/doi/10.5281/zenodo.15554776) + + +----- + +## Installation + +You can install the development version of `r desc::desc_get_field("Package")` from GitHub `r fontawesome::fa("github")` with: + +```r +devtools::install_github("`r desc::desc_get_field("github_user")`/`r desc::desc_get_field("Package")`", dependencies = TRUE) +``` + +`r if (length(missing_packages) > 0) paste("**Note:** For enhanced README formatting, consider installing:", paste(missing_packages, collapse = ", "))` + +----- + +### Download as CSV Files + +If you prefer to work with the data outside of R, you can download individual datasets as CSV files. + +1. **Right-click** on the "Download CSV" link for the dataset you want. +2. Select **"Save Link As"** [`r fontawesome::fa("chrome", fill = browser_favicon_colour)`](https://www.google.com/chrome/) [`r fontawesome::fa("edge", fill = browser_favicon_colour)`](https://www.microsoft.com/edge/) [`r fontawesome::fa("firefox", fill = browser_favicon_colour)`](https://www.mozilla.org/firefox/) or **"Download Linked File"** [`r fontawesome::fa("safari", fill = browser_favicon_colour)`](https://www.apple.com/safari/). +3. Choose where you'd like to save the file on your computer. + +```{r download-links, echo=FALSE, message=FALSE, warning=FALSE} +# Generate download links table +if (!is.null(dictionary) && is.data.frame(dictionary)) { + # Configure base URL + package_base_url <- Sys.getenv("PACKAGE_BASE_URL") + if (package_base_url == "") { + github_user <- desc::desc_get_field("github_user") + package_name <- desc::desc_get_field("Package") + package_base_url <- paste0("https://github.com/", github_user, "/", + package_name, "/raw/main/") + } + extdata_path <- paste0(package_base_url, "inst/extdata/") + + tryCatch({ + dictionary |> + dplyr::distinct(file_name) |> + dplyr::mutate(file_name = stringr::str_remove(file_name, "\\.rda$")) |> + dplyr::rename(dataset = file_name) |> + dplyr::mutate( + CSV = paste0("[Download CSV](", extdata_path, dataset, ".csv)") + ) |> + knitr::kable() + }, error = function(e) { + cat("Error generating download table:", e$message, "\n") + }) +} else { + cat("No datasets available for download.\n") +} +``` + +## Data + +```r +library(`r desc::desc_get_field("Package")`) +``` + +```{r display-datasets, echo=FALSE, results='asis', message=FALSE, warning=FALSE} +# Main loop to display all datasets +if (length(datasets) > 0) { + for (dataset_name in datasets) { + cat("\n---\n\n") # Section separator + + # Load the dataset + current_data <- load_dataset(dataset_name) + + # Check if data was loaded successfully + if (is.null(current_data)) { + cat(paste0("### ", dataset_name, "\n\n")) + cat(paste0("**Error:** Could not load dataset '", dataset_name, "'\n\n")) + next + } + + # Check if data is empty + if (nrow(current_data) == 0) { + cat(paste0("### ", dataset_name, "\n\n")) + cat("**Warning:** This dataset is empty.\n\n") + next + } + + # Dataset header and basic info + cat(paste0("### ", dataset_name, "\n\n")) + cat(paste0("The dataset `", dataset_name, "` has `", nrow(current_data), + "` observations and `", ncol(current_data), "` variables.\n\n")) + + # Data types summary + type_summary <- summarize_data_types(current_data) + if (nzchar(type_summary)) { + cat(paste0("**Variable Types:** ", type_summary, "\n\n")) + } + + # Show R code for accessing the data + cat("```r\n") + cat(paste0("get(\"", dataset_name, "\") |> \n")) + cat(" head(3)") + if (ncol(current_data) > 10) { + cat(" |> \n select(1:10)") + } + cat(" |> \n gt::gt() |> \n gt::as_raw_html()\n") + cat("```\n\n") + + # Display data preview + tryCatch({ + display_data_preview(current_data, max_cols = 10) + }, error = function(e) { + cat("Error displaying data preview:", e$message, "\n\n") + }) + + # Dictionary section + cat("For an overview of the variable names, see the following table.\n\n") + + tryCatch({ + dict_subset <- get_dataset_dictionary(dataset_name, dictionary) + display_dictionary_table(dict_subset) + }, error = function(e) { + cat("Error loading dictionary information:", e$message, "\n\n") + }) + } +} else { + cat("No datasets found in dictionary.\n\n") +} +``` + +## License + +Data are available as [CC-BY](https://github.com/`r desc::desc_get_field("github_user")`/`r desc::desc_get_field("Package")`/blob/main/LICENSE.md). + +## Citation + +```{r citation, echo=FALSE, message=FALSE, warning=FALSE} +tryCatch({ + citation(desc::desc_get_field("Package")) +}, error = function(e) { + cat("Citation information not available\n") +}) +``` diff --git a/man/build.Rd b/man/build.Rd index 2023139..a14c5d1 100644 --- a/man/build.Rd +++ b/man/build.Rd @@ -10,7 +10,8 @@ build( overwrite = TRUE, good_practice = FALSE, validate = TRUE, - preview = TRUE + preview = TRUE, + quarto = FALSE ) } \arguments{ @@ -23,6 +24,8 @@ build( \item{validate}{Whether to validate the CITATION file (default: TRUE)} \item{preview}{Whether to preview the site after building (default: TRUE)} + +\item{quarto}{Whether to use Quarto to build readme (default: FALSE)} } \value{ List with results from each build step diff --git a/man/build_readme.Rd b/man/build_readme.Rd index fe180b4..37a0f46 100644 --- a/man/build_readme.Rd +++ b/man/build_readme.Rd @@ -2,20 +2,25 @@ % Please edit documentation in R/build_package.R \name{build_readme} \alias{build_readme} -\title{Build README from inst/templates/README.Rmd} +\title{Build README from inst/templates/README.qmd} \usage{ -build_readme(base_path = NULL, verbose = TRUE, overwrite = TRUE) +build_readme( + base_path = NULL, + verbose = TRUE, + overwrite = TRUE, + quarto = FALSE +) } \arguments{ \item{base_path}{Base path for the project} \item{verbose}{Whether to show messages} -\item{overwrite}{Whether to overwrite README.Rmd found at base_path} +\item{overwrite}{Whether to overwrite README.qmd found at base_path} } \value{ Path to generated README } \description{ -Build README.md from the README.Rmd template, incorporating package metadata. +Build README.md from the README.qmd template, incorporating package metadata. } diff --git a/man/check_description_exists.Rd b/man/check_description_exists.Rd new file mode 100644 index 0000000..3498545 --- /dev/null +++ b/man/check_description_exists.Rd @@ -0,0 +1,12 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{check_description_exists} +\alias{check_description_exists} +\title{Validation system for fairenough pipeline steps} +\usage{ +check_description_exists(base_path) +} +\description{ +These functions validate actual completion status using comprehensive checklists. +Each validation returns detailed results about what's complete and what's missing. +} diff --git a/man/checklist_summary.Rd b/man/checklist_summary.Rd new file mode 100644 index 0000000..53f087c --- /dev/null +++ b/man/checklist_summary.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{checklist_summary} +\alias{checklist_summary} +\title{Get summary string for validation results} +\usage{ +checklist_summary(validation) +} +\arguments{ +\item{validation}{Validation results} +} +\value{ +Character string with summary +} +\description{ +Get summary string for validation results +} diff --git a/man/collect_metadata.Rd b/man/collect_metadata.Rd index 908cd59..b53b43e 100644 --- a/man/collect_metadata.Rd +++ b/man/collect_metadata.Rd @@ -26,7 +26,8 @@ collect_metadata( interactive = TRUE, save_to_desc = TRUE, base_path = NULL, - overwrite = FALSE + overwrite = FALSE, + verbose = TRUE ) } \arguments{ @@ -73,6 +74,8 @@ collect_metadata( \item{base_path}{Base path for the project} \item{overwrite}{Whether to overwrite existing metadata (default: FALSE)} + +\item{verbose}{Whether to show detailed messages (default: TRUE)} } \value{ List containing all metadata organized by category diff --git a/man/collect_dataset_info.Rd b/man/dot-collect_dataset_info.Rd similarity index 65% rename from man/collect_dataset_info.Rd rename to man/dot-collect_dataset_info.Rd index 862934f..d40f67f 100644 --- a/man/collect_dataset_info.Rd +++ b/man/dot-collect_dataset_info.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R -\name{collect_dataset_info} -\alias{collect_dataset_info} +% Please edit documentation in R/generate_dictionary.R +\name{.collect_dataset_info} +\alias{.collect_dataset_info} \title{Collect dataset information from .rda files} \usage{ -collect_dataset_info(base_path = NULL) +.collect_dataset_info(base_path = NULL) } \arguments{ \item{base_path}{Base path for the project} diff --git a/man/create_directories.Rd b/man/dot-create_directories.Rd similarity index 87% rename from man/create_directories.Rd rename to man/dot-create_directories.Rd index 609f8cf..07d4abb 100644 --- a/man/create_directories.Rd +++ b/man/dot-create_directories.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/setup_package.R -\name{create_directories} -\alias{create_directories} +\name{.create_directories} +\alias{.create_directories} \title{Create project directories} \usage{ -create_directories( +.create_directories( dirs = c("data_raw", "data", "inst/extdata"), base_path = NULL, verbose = TRUE diff --git a/man/export_csv.Rd b/man/dot-export_csv.Rd similarity index 81% rename from man/export_csv.Rd rename to man/dot-export_csv.Rd index de33377..60ebe84 100644 --- a/man/export_csv.Rd +++ b/man/dot-export_csv.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/process_data.R -\name{export_csv} -\alias{export_csv} +\name{.export_csv} +\alias{.export_csv} \title{Export data as CSV file} \usage{ -export_csv(data, name, base_path = NULL, overwrite = TRUE, verbose = TRUE) +.export_csv(data, name, base_path = NULL, overwrite = TRUE, verbose = TRUE) } \arguments{ \item{data}{Data frame to export} diff --git a/man/export_rda.Rd b/man/dot-export_rda.Rd similarity index 82% rename from man/export_rda.Rd rename to man/dot-export_rda.Rd index 48b38ae..ea68979 100644 --- a/man/export_rda.Rd +++ b/man/dot-export_rda.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/process_data.R -\name{export_rda} -\alias{export_rda} +\name{.export_rda} +\alias{.export_rda} \title{Export data as RDA file} \usage{ -export_rda(data, name, base_path = NULL, overwrite = TRUE, verbose = TRUE) +.export_rda(data, name, base_path = NULL, overwrite = TRUE, verbose = TRUE) } \arguments{ \item{data}{Data frame to export} diff --git a/man/move_data_files.Rd b/man/dot-move_data_files.Rd similarity index 77% rename from man/move_data_files.Rd rename to man/dot-move_data_files.Rd index b960f10..2385319 100644 --- a/man/move_data_files.Rd +++ b/man/dot-move_data_files.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/setup_package.R -\name{move_data_files} -\alias{move_data_files} +\name{.move_data_files} +\alias{.move_data_files} \title{Move data files to raw data directory} \usage{ -move_data_files(raw_dir = "data_raw", base_path = NULL, verbose = TRUE) +.move_data_files(raw_dir = "data_raw", base_path = NULL, verbose = TRUE) } \arguments{ \item{raw_dir}{Name of the raw data directory} diff --git a/man/run_checks.Rd b/man/dot-run_checks.Rd similarity index 79% rename from man/run_checks.Rd rename to man/dot-run_checks.Rd index 4862a4a..4f1689c 100644 --- a/man/run_checks.Rd +++ b/man/dot-run_checks.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/build_package.R -\name{run_checks} -\alias{run_checks} +\name{.run_checks} +\alias{.run_checks} \title{Run package checks} \usage{ -run_checks(base_path = NULL, verbose = TRUE) +.run_checks(base_path = NULL, verbose = TRUE) } \arguments{ \item{base_path}{Base path for the project} diff --git a/man/setup_gitignore.Rd b/man/dot-setup_gitignore.Rd similarity index 81% rename from man/setup_gitignore.Rd rename to man/dot-setup_gitignore.Rd index 11da6fd..11c4335 100644 --- a/man/setup_gitignore.Rd +++ b/man/dot-setup_gitignore.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/setup_package.R -\name{setup_gitignore} -\alias{setup_gitignore} +\name{.setup_gitignore} +\alias{.setup_gitignore} \title{Setup gitignore for data directory and R files} \usage{ -setup_gitignore(raw_dir = NULL, base_path = NULL, verbose = TRUE) +.setup_gitignore(raw_dir = NULL, base_path = NULL, verbose = TRUE) } \arguments{ \item{raw_dir}{Name of the directory to ignore (default handled by get_raw_dir())} diff --git a/man/validate_package.Rd b/man/dot-validate_package.Rd similarity index 90% rename from man/validate_package.Rd rename to man/dot-validate_package.Rd index 9dbe8c7..4b166c5 100644 --- a/man/validate_package.Rd +++ b/man/dot-validate_package.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/build_package.R -\name{validate_package} -\alias{validate_package} +\name{.validate_package} +\alias{.validate_package} \title{Validate package with modern tools} \usage{ -validate_package( +.validate_package( base_path = NULL, verbose = TRUE, spell_check = TRUE, diff --git a/man/format_checklist_results.Rd b/man/format_checklist_results.Rd new file mode 100644 index 0000000..a319da6 --- /dev/null +++ b/man/format_checklist_results.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{format_checklist_results} +\alias{format_checklist_results} +\title{Process checklist into structured results} +\usage{ +format_checklist_results(checklist) +} +\arguments{ +\item{checklist}{List of check items with name, description, check, required fields} +} +\value{ +Formatted checklist results +} +\description{ +Process checklist into structured results +} diff --git a/man/clean_data.Rd b/man/process_clean.Rd similarity index 82% rename from man/clean_data.Rd rename to man/process_clean.Rd index 3136823..59b8ef5 100644 --- a/man/clean_data.Rd +++ b/man/process_clean.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/process_data.R -\name{clean_data} -\alias{clean_data} +\name{process_clean} +\alias{process_clean} \title{Clean data with standard transformations} \usage{ -clean_data( +process_clean( data, clean_names = TRUE, string_nulls = c("null", "NA", ""), @@ -37,12 +37,12 @@ Applies standard cleaning operations to a data frame: \examples{ \dontrun{ # Basic cleaning -clean_data(my_data) +process_clean(my_data) # Keep original column names -clean_data(my_data, clean_names = FALSE) +process_clean(my_data, clean_names = FALSE) # Custom null values -clean_data(my_data, string_nulls = c("N/A", "missing", "")) +process_clean(my_data, string_nulls = c("N/A", "missing", "")) } } diff --git a/man/process_data.Rd b/man/process_data.Rd index 245ec2b..d326392 100644 --- a/man/process_data.Rd +++ b/man/process_data.Rd @@ -15,7 +15,7 @@ process_data( \arguments{ \item{raw_dir}{Directory containing raw data files (default: "data_raw")} -\item{auto_clean}{Whether to automatically clean data (default: TRUE)} +\item{auto_clean}{Whether to run clean_data (default: TRUE)} \item{overwrite}{Whether to overwrite existing files (default: TRUE)} diff --git a/man/show_checklist.Rd b/man/show_checklist.Rd new file mode 100644 index 0000000..a7ee042 --- /dev/null +++ b/man/show_checklist.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{show_checklist} +\alias{show_checklist} +\title{Display formatted checklist to user} +\usage{ +show_checklist(validation, title, verbose = TRUE) +} +\arguments{ +\item{validation}{Validation results from format_checklist_results} + +\item{title}{Title for the checklist display} + +\item{verbose}{Whether to show detailed output} +} +\description{ +Display formatted checklist to user +} diff --git a/man/update_metadata.Rd b/man/update_metadata.Rd deleted file mode 100644 index 22724f4..0000000 --- a/man/update_metadata.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R -\name{update_metadata} -\alias{update_metadata} -\title{Update metadata in DESCRIPTION file} -\usage{ -update_metadata(key, data, base_path = NULL, verbose = TRUE) -} -\arguments{ -\item{key}{Top-level key (e.g., "datasets", "package")} - -\item{data}{Data to add/update for the key} - -\item{base_path}{Base path for the project} - -\item{verbose}{Whether to show messages} -} -\value{ -NULL (invisibly) -} -\description{ -Simple wrapper around write_metadata_to_desc for updating a single key. -Creates a metadata structure with just the specified key and writes it. -} diff --git a/man/validate_setup_completed.Rd b/man/validate_setup_completed.Rd new file mode 100644 index 0000000..191214c --- /dev/null +++ b/man/validate_setup_completed.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{validate_setup_completed} +\alias{validate_setup_completed} +\title{Validate setup completion status} +\usage{ +validate_setup_completed(base_path = NULL) +} +\arguments{ +\item{base_path}{Base path for the project} +} +\value{ +Formatted checklist results +} +\description{ +Validate setup completion status +} diff --git a/renv.lock b/renv.lock deleted file mode 100644 index 3a8aae6..0000000 --- a/renv.lock +++ /dev/null @@ -1,5089 +0,0 @@ -{ - "R": { - "Version": "4.5.1", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://cran.rstudio.com" - } - ] - }, - "Packages": { - "R6": { - "Package": "R6", - "Version": "2.6.1", - "Source": "Repository", - "Title": "Encapsulated Classes with Reference Semantics", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Creates classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the classes are defined in different packages.", - "License": "MIT + file LICENSE", - "URL": "https://r6.r-lib.org, https://github.com/r-lib/R6", - "BugReports": "https://github.com/r-lib/R6/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Suggests": [ - "lobstr", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate, ggplot2, microbenchmark, scales", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-3", - "Source": "Repository", - "Date": "2022-04-03", - "Title": "ColorBrewer Palettes", - "Authors@R": "c(person(given = \"Erich\", family = \"Neuwirth\", role = c(\"aut\", \"cre\"), email = \"erich.neuwirth@univie.ac.at\"))", - "Author": "Erich Neuwirth [aut, cre]", - "Maintainer": "Erich Neuwirth ", - "Depends": [ - "R (>= 2.0.0)" - ], - "Description": "Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org.", - "License": "Apache License 2.0", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.14", - "Source": "Repository", - "Title": "Seamless R and C++ Integration", - "Date": "2025-01-11", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Romain\", \"Francois\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"JJ\", \"Allaire\", role = \"aut\", comment = c(ORCID = \"0000-0003-0174-9868\")), person(\"Kevin\", \"Ushey\", role = \"aut\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Qiang\", \"Kou\", role = \"aut\", comment = c(ORCID = \"0000-0001-6786-5453\")), person(\"Nathan\", \"Russell\", role = \"aut\"), person(\"Iñaki\", \"Ucar\", role = \"aut\", comment = c(ORCID = \"0000-0001-6403-5550\")), person(\"Doug\", \"Bates\", role = \"aut\", comment = c(ORCID = \"0000-0001-8316-9503\")), person(\"John\", \"Chambers\", role = \"aut\"))", - "Description": "The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at , the paper by Eddelbuettel and Francois (2011, ), the book by Eddelbuettel (2013, ) and the paper by Eddelbuettel and Balamuta (2018, ); see 'citation(\"Rcpp\")' for details.", - "Imports": [ - "methods", - "utils" - ], - "Suggests": [ - "tinytest", - "inline", - "rbenchmark", - "pkgKitten (>= 0.1.2)" - ], - "URL": "https://www.rcpp.org, https://dirk.eddelbuettel.com/code/rcpp.html, https://github.com/RcppCore/Rcpp", - "License": "GPL (>= 2)", - "BugReports": "https://github.com/RcppCore/Rcpp/issues", - "MailingList": "rcpp-devel@lists.r-forge.r-project.org", - "RoxygenNote": "6.1.1", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Dirk Eddelbuettel [aut, cre] (), Romain Francois [aut] (), JJ Allaire [aut] (), Kevin Ushey [aut] (), Qiang Kou [aut] (), Nathan Russell [aut], Iñaki Ucar [aut] (), Doug Bates [aut] (), John Chambers [aut]", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "S7": { - "Package": "S7", - "Version": "0.2.0", - "Source": "Repository", - "Title": "An Object Oriented System Meant to Become a Successor to S3 and S4", - "Authors@R": "c( person(\"Object-Oriented Programming Working Group\", role = \"cph\"), person(\"Davis\", \"Vaughan\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Tomasz\", \"Kalinowski\", role = \"aut\"), person(\"Will\", \"Landau\", role = \"aut\"), person(\"Michael\", \"Lawrence\", role = \"aut\"), person(\"Martin\", \"Maechler\", role = \"aut\", comment = c(ORCID = \"0000-0002-8685-9910\")), person(\"Luke\", \"Tierney\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")) )", - "Description": "A new object oriented programming system designed to be a successor to S3 and S4. It includes formal class, generic, and method specification, and a limited form of multiple dispatch. It has been designed and implemented collaboratively by the R Consortium Object-Oriented Programming Working Group, which includes representatives from R-Core, 'Bioconductor', 'Posit'/'tidyverse', and the wider R community.", - "License": "MIT + file LICENSE", - "URL": "https://rconsortium.github.io/S7/, https://github.com/RConsortium/S7", - "BugReports": "https://github.com/RConsortium/S7/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "bench", - "callr", - "covr", - "knitr", - "methods", - "rmarkdown", - "testthat (>= 3.2.0)", - "tibble" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "sloop", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "external-generic", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Object-Oriented Programming Working Group [cph], Davis Vaughan [aut], Jim Hester [aut] (), Tomasz Kalinowski [aut], Will Landau [aut], Michael Lawrence [aut], Martin Maechler [aut] (), Luke Tierney [aut], Hadley Wickham [aut, cre] ()", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "V8": { - "Package": "V8", - "Version": "6.0.4", - "Source": "Repository", - "Type": "Package", - "Title": "Embedded JavaScript and WebAssembly Engine for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Jan Marvin\", \"Garbuszus\", role = \"ctb\"))", - "Description": "An R interface to V8 : Google's open source JavaScript and WebAssembly engine. This package can be compiled either with V8 version 6 and up or NodeJS when built as a shared library.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/V8", - "BugReports": "https://github.com/jeroen/v8/issues", - "SystemRequirements": "V8 engine version 6+ is needed for ES6 and WASM support. On Linux you can build against libv8-dev (Debian) or v8-devel (Fedora). We also provide static libv8 binaries for most platforms, see the README for details.", - "NeedsCompilation": "yes", - "VignetteBuilder": "knitr", - "Imports": [ - "Rcpp (>= 0.12.12)", - "jsonlite (>= 1.0)", - "curl (>= 1.0)", - "utils" - ], - "LinkingTo": [ - "Rcpp" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown" - ], - "RoxygenNote": "7.3.1", - "Language": "en-US", - "Encoding": "UTF-8", - "Biarch": "true", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Jan Marvin Garbuszus [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "askpass": { - "Package": "askpass", - "Version": "1.2.1", - "Source": "Repository", - "Type": "Package", - "Title": "Password Entry Utilities for R, Git, and SSH", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Cross-platform utilities for prompting the user for credentials or a passphrase, for example to authenticate with a server or read a protected key. Includes native programs for MacOS and Windows, hence no 'tcltk' is required. Password entry can be invoked in two different ways: directly from R via the askpass() function, or indirectly as password-entry back-end for 'ssh-agent' or 'git-credential' via the SSH_ASKPASS and GIT_ASKPASS environment variables. Thereby the user can be prompted for credentials or a passphrase if needed when R calls out to git or ssh.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.r-universe.dev/askpass", - "BugReports": "https://github.com/r-lib/askpass/issues", - "Encoding": "UTF-8", - "Imports": [ - "sys (>= 2.1)" - ], - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat" - ], - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Title": "Tools for base64 encoding", - "Author": "Simon Urbanek ", - "Maintainer": "Simon Urbanek ", - "Depends": [ - "R (>= 2.9.0)" - ], - "Enhances": [ - "png" - ], - "Description": "This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.", - "License": "GPL-2 | GPL-3", - "URL": "http://www.rforge.net/base64enc", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "bigD": { - "Package": "bigD", - "Version": "0.3.1", - "Source": "Repository", - "Type": "Package", - "Title": "Flexibly Format Dates and Times to a Given Locale", - "Description": "Format dates and times flexibly and to whichever locales make sense. Parses dates, times, and date-times in various formats (including string-based ISO 8601 constructions). The formatting syntax gives the user many options for formatting the date and time output in a precise manner. Time zones in the input can be expressed in multiple ways and there are many options for formatting time zones in the output as well. Several of the provided helper functions allow for automatic generation of locale-aware formatting patterns based on date/time skeleton formats and standardized date/time formats with varying specificity.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Olivier\", \"Roy\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bigD/, https://github.com/rstudio/bigD", - "BugReports": "https://github.com/rstudio/bigD/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "testthat (>= 3.0.0)", - "vctrs (>= 0.5.0)" - ], - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Olivier Roy [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "bit": { - "Package": "bit", - "Version": "4.6.0", - "Source": "Repository", - "Title": "Classes and Methods for Fast Memory-Efficient Boolean Selections", - "Authors@R": "c( person(\"Michael\", \"Chirico\", email = \"MichaelChirico4@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role = \"aut\"), person(\"Brian\", \"Ripley\", role = \"ctb\") )", - "Depends": [ - "R (>= 3.4.0)" - ], - "Suggests": [ - "testthat (>= 3.0.0)", - "roxygen2", - "knitr", - "markdown", - "rmarkdown", - "microbenchmark", - "bit64 (>= 4.0.0)", - "ff (>= 4.0.0)" - ], - "Description": "Provided are classes for boolean and skewed boolean vectors, fast boolean methods, fast unique and non-unique integer sorting, fast set operations on sorted and unsorted sets of integers, and foundations for ff (range index, compression, chunked processing).", - "License": "GPL-2 | GPL-3", - "LazyLoad": "yes", - "ByteCompile": "yes", - "Encoding": "UTF-8", - "URL": "https://github.com/r-lib/bit", - "VignetteBuilder": "knitr, rmarkdown", - "RoxygenNote": "7.3.2", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Brian Ripley [ctb]", - "Maintainer": "Michael Chirico ", - "Repository": "CRAN" - }, - "bit64": { - "Package": "bit64", - "Version": "4.6.0-1", - "Source": "Repository", - "Title": "A S3 Class for Vectors of 64bit Integers", - "Authors@R": "c( person(\"Michael\", \"Chirico\", email = \"michaelchirico4@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jens\", \"Oehlschlägel\", role = \"aut\"), person(\"Leonardo\", \"Silvestri\", role = \"ctb\"), person(\"Ofek\", \"Shilon\", role = \"ctb\") )", - "Depends": [ - "R (>= 3.4.0)", - "bit (>= 4.0.0)" - ], - "Description": "Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. These are useful for handling database keys and exact counting in +-2^63. WARNING: do not use them as replacement for 32bit integers, integer64 are not supported for subscripting by R-core and they have different semantics when combined with double, e.g. integer64 + double => integer64. Class integer64 can be used in vectors, matrices, arrays and data.frames. Methods are available for coercion from and to logicals, integers, doubles, characters and factors as well as many elementwise and summary functions. Many fast algorithmic operations such as 'match' and 'order' support inter- active data exploration and manipulation and optionally leverage caching.", - "License": "GPL-2 | GPL-3", - "LazyLoad": "yes", - "ByteCompile": "yes", - "URL": "https://github.com/r-lib/bit64", - "Encoding": "UTF-8", - "Imports": [ - "graphics", - "methods", - "stats", - "utils" - ], - "Suggests": [ - "testthat (>= 3.0.3)", - "withr" - ], - "Config/testthat/edition": "3", - "Config/needs/development": "testthat", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Michael Chirico [aut, cre], Jens Oehlschlägel [aut], Leonardo Silvestri [ctb], Ofek Shilon [ctb]", - "Maintainer": "Michael Chirico ", - "Repository": "CRAN" - }, - "bitops": { - "Package": "bitops", - "Version": "1.0-9", - "Source": "Repository", - "Date": "2024-10-03", - "Authors@R": "c( person(\"Steve\", \"Dutky\", role = \"aut\", email = \"sdutky@terpalum.umd.edu\", comment = \"S original; then (after MM's port) revised and modified\"), person(\"Martin\", \"Maechler\", role = c(\"cre\", \"aut\"), email = \"maechler@stat.math.ethz.ch\", comment = c(\"Initial R port; tweaks\", ORCID = \"0000-0002-8685-9910\")))", - "Title": "Bitwise Operations", - "Description": "Functions for bitwise operations on integer vectors.", - "License": "GPL (>= 2)", - "URL": "https://github.com/mmaechler/R-bitops", - "BugReports": "https://github.com/mmaechler/R-bitops/issues", - "NeedsCompilation": "yes", - "Author": "Steve Dutky [aut] (S original; then (after MM's port) revised and modified), Martin Maechler [cre, aut] (Initial R port; tweaks, )", - "Maintainer": "Martin Maechler ", - "Repository": "CRAN" - }, - "brew": { - "Package": "brew", - "Version": "1.0-10", - "Source": "Repository", - "Type": "Package", - "Title": "Templating Framework for Report Generation", - "Authors@R": "c( person(\"Jeffrey\", \"Horner\", role = c(\"aut\", \"cph\")), person(\"Greg\", \"Hunt\", , \"greg@firmansyah.com\", role = c(\"aut\", \"cre\", \"cph\")) )", - "Description": "Implements a templating framework for mixing text and R code for report generation. brew template syntax is similar to PHP, Ruby's erb module, Java Server Pages, and Python's psp module.", - "License": "GPL (>= 2)", - "URL": "https://github.com/gregfrog/brew", - "BugReports": "https://github.com/gregfrog/brew/issues", - "Suggests": [ - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Author": "Jeffrey Horner [aut, cph], Greg Hunt [aut, cre, cph]", - "Maintainer": "Greg Hunt " - }, - "brio": { - "Package": "brio", - "Version": "1.1.5", - "Source": "Repository", - "Title": "Basic R Input Output", - "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\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://brio.r-lib.org, https://github.com/r-lib/brio", - "BugReports": "https://github.com/r-lib/brio/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (), Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "bslib": { - "Package": "bslib", - "Version": "0.9.0", - "Source": "Repository", - "Title": "Custom 'Bootstrap' 'Sass' Themes for 'shiny' and 'rmarkdown'", - "Authors@R": "c( person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Garrick\", \"Aden-Buie\", , \"garrick@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7111-0077\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Javi\", \"Aguilar\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap colorpicker library\"), person(\"Thomas\", \"Park\", role = c(\"ctb\", \"cph\"), comment = \"Bootswatch library\"), person(, \"PayPal\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap accessibility plugin\") )", - "Description": "Simplifies custom 'CSS' styling of both 'shiny' and 'rmarkdown' via 'Bootstrap' 'Sass'. Supports 'Bootstrap' 3, 4 and 5 as well as their various 'Bootswatch' themes. An interactive widget is also provided for previewing themes in real time.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/bslib/, https://github.com/rstudio/bslib", - "BugReports": "https://github.com/rstudio/bslib/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Imports": [ - "base64enc", - "cachem", - "fastmap (>= 1.1.1)", - "grDevices", - "htmltools (>= 0.5.8)", - "jquerylib (>= 0.1.3)", - "jsonlite", - "lifecycle", - "memoise (>= 2.0.1)", - "mime", - "rlang", - "sass (>= 0.4.9)" - ], - "Suggests": [ - "bsicons", - "curl", - "fontawesome", - "future", - "ggplot2", - "knitr", - "magrittr", - "rappdirs", - "rmarkdown (>= 2.7)", - "shiny (> 1.8.1)", - "testthat", - "thematic", - "tools", - "utils", - "withr", - "yaml" - ], - "Config/Needs/deploy": "BH, chiflights22, colourpicker, commonmark, cpp11, cpsievert/chiflights22, cpsievert/histoslider, dplyr, DT, ggplot2, ggridges, gt, hexbin, histoslider, htmlwidgets, lattice, leaflet, lubridate, markdown, modelr, plotly, reactable, reshape2, rprojroot, rsconnect, rstudio/shiny, scales, styler, tibble", - "Config/Needs/routine": "chromote, desc, renv", - "Config/Needs/website": "brio, crosstalk, dplyr, DT, ggplot2, glue, htmlwidgets, leaflet, lorem, palmerpenguins, plotly, purrr, rprojroot, rstudio/htmltools, scales, stringr, tidyr, webshot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "zzzz-bs-sass, fonts, zzz-precompile, theme-*, rmd-*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "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'", - "NeedsCompilation": "no", - "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)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "cachem": { - "Package": "cachem", - "Version": "1.1.0", - "Source": "Repository", - "Title": "Cache R Objects with Automatic Pruning", - "Description": "Key-value stores with automatic pruning. Caches can limit either their total size or the age of the oldest object (or both), automatically pruning objects to maintain the constraints.", - "Authors@R": "c( person(\"Winston\", \"Chang\", , \"winston@posit.co\", c(\"aut\", \"cre\")), person(family = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")))", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "ByteCompile": "true", - "URL": "https://cachem.r-lib.org/, https://github.com/r-lib/cachem", - "Imports": [ - "rlang", - "fastmap (>= 1.2.0)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "7.2.3", - "Config/Needs/routine": "lobstr", - "Config/Needs/website": "pkgdown", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "callr": { - "Package": "callr", - "Version": "3.7.6", - "Source": "Repository", - "Title": "Call R from R", - "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\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://callr.r-lib.org, https://github.com/r-lib/callr", - "BugReports": "https://github.com/r-lib/callr/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "processx (>= 3.6.1)", - "R6", - "utils" - ], - "Suggests": [ - "asciicast (>= 2.3.1)", - "cli (>= 1.1.0)", - "mockery", - "ps", - "rprojroot", - "spelling", - "testthat (>= 3.2.0)", - "withr (>= 2.3.0)" - ], - "Config/Needs/website": "r-lib/asciicast, glue, htmlwidgets, igraph, tibble, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Title": "Translate Spreadsheet Cell Ranges to Rows and Columns", - "Authors@R": "c( person(\"Jennifer\", \"Bryan\", , \"jenny@stat.ubc.ca\", c(\"cre\", \"aut\")), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", \"ctb\") )", - "Description": "Helper functions to work with spreadsheets and the \"A1:D10\" style of cell range specification.", - "Depends": [ - "R (>= 3.0.0)" - ], - "License": "MIT + file LICENSE", - "LazyData": "true", - "URL": "https://github.com/rsheets/cellranger", - "BugReports": "https://github.com/rsheets/cellranger/issues", - "Suggests": [ - "covr", - "testthat (>= 1.0.0)", - "knitr", - "rmarkdown" - ], - "RoxygenNote": "5.0.1.9000", - "VignetteBuilder": "knitr", - "Imports": [ - "rematch", - "tibble" - ], - "NeedsCompilation": "no", - "Author": "Jennifer Bryan [cre, aut], Hadley Wickham [ctb]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "cffr": { - "Package": "cffr", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Generate Citation File Format ('cff') Metadata for R Packages", - "Authors@R": "c( person(\"Diego\", \"Hernangómez\", , \"diego.hernangomezherrero@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0001-8457-4658\")), person(\"João\", \"Martins\", role = \"rev\", comment = c(ORCID = \"0000-0001-7961-4280\")), person(\"Scott\", \"Chamberlain\", role = \"rev\", comment = c(ORCID = \"0000-0003-1444-9135\")) )", - "Description": "The Citation File Format version 1.2.0 is a human and machine readable file format which provides citation metadata for software. This package provides core utilities to generate and validate this metadata.", - "License": "GPL (>= 3)", - "URL": "https://docs.ropensci.org/cffr/, https://github.com/ropensci/cffr", - "BugReports": "https://github.com/ropensci/cffr/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "cli (>= 2.0.0)", - "desc (>= 1.3.0)", - "jsonlite (>= 1.7.2)", - "jsonvalidate (>= 1.1.0)", - "yaml (>= 2.2.1)" - ], - "Suggests": [ - "bibtex (>= 0.5.0)", - "knitr", - "lifecycle", - "rmarkdown", - "testthat (>= 3.0.0)", - "usethis" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "devtools", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.2", - "X-schema.org-isPartOf": "https://ropensci.org", - "X-schema.org-keywords": "attribution, citation, credit, citation-files, cff, metadata, citation-file-format, cran, r, r-package, ropensci, rstats, r-cran", - "NeedsCompilation": "no", - "Author": "Diego Hernangómez [aut, cre, cph] (), João Martins [rev] (), Scott Chamberlain [rev] ()", - "Maintainer": "Diego Hernangómez ", - "Repository": "CRAN" - }, - "cli": { - "Package": "cli", - "Version": "3.6.5", - "Source": "Repository", - "Title": "Helpers for Developing Command Line Interfaces", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"gabor@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Kirill\", \"Müller\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", , \"salim-b@pm.me\", role = \"ctb\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A suite of tools to build attractive command line interfaces ('CLIs'), from semantic elements: headings, lists, alerts, paragraphs, etc. Supports custom themes via a 'CSS'-like language. It also contains a number of lower level 'CLI' elements: rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives. It support ANSI colors and text styles as well.", - "License": "MIT + file LICENSE", - "URL": "https://cli.r-lib.org, https://github.com/r-lib/cli", - "BugReports": "https://github.com/r-lib/cli/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "callr", - "covr", - "crayon", - "digest", - "glue (>= 1.6.0)", - "grDevices", - "htmltools", - "htmlwidgets", - "knitr", - "methods", - "processx", - "ps (>= 1.3.4.9000)", - "rlang (>= 1.0.2.9003)", - "rmarkdown", - "rprojroot", - "rstudioapi", - "testthat (>= 3.2.0)", - "tibble", - "whoami", - "withr" - ], - "Config/Needs/website": "r-lib/asciicast, bench, brio, cpp11, decor, desc, fansi, prettyunits, sessioninfo, tidyverse/tidytemplate, usethis, vctrs", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Hadley Wickham [ctb], Kirill Müller [ctb], Salim Brüggemann [ctb] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Type": "Package", - "Title": "Read and Write from the System Clipboard", - "Authors@R": "c( person(\"Matthew\", \"Lincoln\", , \"matthew.d.lincoln@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4387-3384\")), person(\"Louis\", \"Maddox\", role = \"ctb\"), person(\"Steve\", \"Simpson\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\") )", - "Description": "Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.", - "License": "GPL-3", - "URL": "https://github.com/mdlincoln/clipr, http://matthewlincoln.net/clipr/", - "BugReports": "https://github.com/mdlincoln/clipr/issues", - "Imports": [ - "utils" - ], - "Suggests": [ - "covr", - "knitr", - "rmarkdown", - "rstudioapi (>= 0.5)", - "testthat (>= 2.0.0)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.1.2", - "SystemRequirements": "xclip (https://github.com/astrand/xclip) or xsel (http://www.vergenet.net/~conrad/software/xsel/) for accessing the X11 clipboard, or wl-clipboard (https://github.com/bugaevc/wl-clipboard) for systems using Wayland.", - "NeedsCompilation": "no", - "Author": "Matthew Lincoln [aut, cre] (), Louis Maddox [ctb], Steve Simpson [ctb], Jennifer Bryan [ctb]", - "Maintainer": "Matthew Lincoln ", - "Repository": "CRAN" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.9.5", - "Source": "Repository", - "Type": "Package", - "Title": "High Performance CommonMark and Github Markdown Rendering in R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", ,\"jeroenooms@gmail.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"John MacFarlane\", role = \"cph\", comment = \"Author of cmark\"))", - "Description": "The CommonMark specification defines a rationalized version of markdown syntax. This package uses the 'cmark' reference implementation for converting markdown text into various formats including html, latex and groff man. In addition it exposes the markdown parse tree in xml format. Also includes opt-in support for GFM extensions including tables, autolinks, and strikethrough text.", - "License": "BSD_2_clause + file LICENSE", - "URL": "https://docs.ropensci.org/commonmark/ https://ropensci.r-universe.dev/commonmark", - "BugReports": "https://github.com/r-lib/commonmark/issues", - "Suggests": [ - "curl", - "testthat", - "xml2" - ], - "RoxygenNote": "7.3.2", - "Language": "en-US", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), John MacFarlane [cph] (Author of cmark)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "coro": { - "Package": "coro", - "Version": "1.1.0", - "Source": "Repository", - "Title": "'Coroutines' for R", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides 'coroutines' for R, a family of functions that can be suspended and resumed later on. This includes 'async' functions (which await) and generators (which yield). 'Async' functions are based on the concurrency framework of the 'promises' package. Generators are based on a dependency free iteration protocol defined in 'coro' and are compatible with iterators from the 'reticulate' package.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/coro, https://coro.r-lib.org/", - "BugReports": "https://github.com/r-lib/coro/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "rlang (>= 0.4.12)" - ], - "Suggests": [ - "knitr", - "later (>= 1.1.0)", - "magrittr (>= 2.0.0)", - "promises", - "reticulate", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Lionel Henry [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.5.2", - "Source": "Repository", - "Title": "A C++11 Interface for R's C Interface", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", email = \"davis@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Jim\",\"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Benjamin\", \"Kietzman\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a header only, C++11 interface to R's C interface. Compared to other approaches 'cpp11' strives to be safe against long jumps from the C API as well as C++ exceptions, conform to normal R function semantics and supports interaction with 'ALTREP' vectors.", - "License": "MIT + file LICENSE", - "URL": "https://cpp11.r-lib.org, https://github.com/r-lib/cpp11", - "BugReports": "https://github.com/r-lib/cpp11/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "bench", - "brio", - "callr", - "cli", - "covr", - "decor", - "desc", - "ggplot2", - "glue", - "knitr", - "lobstr", - "mockery", - "progress", - "rmarkdown", - "scales", - "Rcpp", - "testthat (>= 3.2.0)", - "tibble", - "utils", - "vctrs", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/Needs/cpp11/cpp_register": "brio, cli, decor, desc, glue, tibble, vctrs", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Davis Vaughan [aut, cre] (), Jim Hester [aut] (), Romain François [aut] (), Benjamin Kietzman [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.3", - "Source": "Repository", - "Title": "Colored Terminal Output", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Brodie\", \"Gaslam\", , \"brodie.gaslam@yahoo.com\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The crayon package is now superseded. Please use the 'cli' package for new projects. Colored terminal output on terminals that support 'ANSI' color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI' color support is automatically detected. Colors and highlighting can be combined and nested. New styles can also be created easily. This package was inspired by the 'chalk' 'JavaScript' project.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.github.io/crayon/, https://github.com/r-lib/crayon", - "BugReports": "https://github.com/r-lib/crayon/issues", - "Imports": [ - "grDevices", - "methods", - "utils" - ], - "Suggests": [ - "mockery", - "rstudioapi", - "testthat", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'aaa-rstudio-detect.R' 'aaaa-rematch2.R' 'aab-num-ansi-colors.R' 'aac-num-ansi-colors.R' 'ansi-256.R' 'ansi-palette.R' 'combine.R' 'string.R' 'utils.R' 'crayon-package.R' 'disposable.R' 'enc-utils.R' 'has_ansi.R' 'has_color.R' 'link.R' 'styles.R' 'machinery.R' 'parts.R' 'print.R' 'style-var.R' 'show.R' 'string_operations.R'", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Brodie Gaslam [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "credentials": { - "Package": "credentials", - "Version": "2.0.2", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for Managing SSH and Git Credentials", - "Authors@R": "person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\"))", - "Description": "Setup and retrieve HTTPS and SSH credentials for use with 'git' and other services. For HTTPS remotes the package interfaces the 'git-credential' utility which 'git' uses to store HTTP usernames and passwords. For SSH remotes we provide convenient functions to find or generate appropriate SSH keys. The package both helps the user to setup a local git installation, and also provides a back-end for git/ssh client libraries to authenticate with existing user credentials.", - "License": "MIT + file LICENSE", - "SystemRequirements": "git (optional)", - "Encoding": "UTF-8", - "Imports": [ - "openssl (>= 1.3)", - "sys (>= 2.1)", - "curl", - "jsonlite", - "askpass" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown" - ], - "RoxygenNote": "7.2.1", - "VignetteBuilder": "knitr", - "Language": "en-US", - "URL": "https://docs.ropensci.org/credentials/ https://r-lib.r-universe.dev/credentials", - "BugReports": "https://github.com/r-lib/credentials/issues", - "NeedsCompilation": "no", - "Author": "Jeroen Ooms [aut, cre] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "curl": { - "Package": "curl", - "Version": "6.4.0", - "Source": "Repository", - "Type": "Package", - "Title": "A Modern and Flexible Web Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Posit Software, PBC\", role = \"cph\"))", - "Description": "Bindings to 'libcurl' for performing fully configurable HTTP/FTP requests where responses can be processed in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of 'libcurl' is recommended; for a more-user-friendly web client see the 'httr2' package which builds on this package with http specific tools and logic.", - "License": "MIT + file LICENSE", - "SystemRequirements": "libcurl (>= 7.73): libcurl-devel (rpm) or libcurl4-openssl-dev (deb)", - "URL": "https://jeroen.r-universe.dev/curl", - "BugReports": "https://github.com/jeroen/curl/issues", - "Suggests": [ - "spelling", - "testthat (>= 1.0.0)", - "knitr", - "jsonlite", - "later", - "rmarkdown", - "httpuv (>= 1.4.4)", - "webutils" - ], - "VignetteBuilder": "knitr", - "Depends": [ - "R (>= 3.0.0)" - ], - "RoxygenNote": "7.3.2.9000", - "Encoding": "UTF-8", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Hadley Wickham [ctb], Posit Software, PBC [cph]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "desc": { - "Package": "desc", - "Version": "1.4.3", - "Source": "Repository", - "Title": "Manipulate DESCRIPTION Files", - "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\")) )", - "Maintainer": "Gábor Csárdi ", - "Description": "Tools to read, write, create, and manipulate DESCRIPTION files. It is intended for packages that create or manipulate other packages.", - "License": "MIT + file LICENSE", - "URL": "https://desc.r-lib.org/, https://github.com/r-lib/desc", - "BugReports": "https://github.com/r-lib/desc/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli", - "R6", - "utils" - ], - "Suggests": [ - "callr", - "covr", - "gh", - "spelling", - "testthat", - "whoami", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "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'", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Kirill Müller [aut], Jim Hester [aut], Maëlle Salmon [ctb] (), Posit Software, PBC [cph, fnd]", - "Repository": "CRAN" - }, - "devtools": { - "Package": "devtools", - "Version": "2.4.5", - "Source": "Repository", - "Title": "Tools to Make Developing R Packages Easier", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", , \"jenny@rstudio.com\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Collection of package development tools.", - "License": "MIT + file LICENSE", - "URL": "https://devtools.r-lib.org/, https://github.com/r-lib/devtools", - "BugReports": "https://github.com/r-lib/devtools/issues", - "Depends": [ - "R (>= 3.0.2)", - "usethis (>= 2.1.6)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "desc (>= 1.4.1)", - "ellipsis (>= 0.3.2)", - "fs (>= 1.5.2)", - "lifecycle (>= 1.0.1)", - "memoise (>= 2.0.1)", - "miniUI (>= 0.1.1.1)", - "pkgbuild (>= 1.3.1)", - "pkgdown (>= 2.0.6)", - "pkgload (>= 1.3.0)", - "profvis (>= 0.3.7)", - "rcmdcheck (>= 1.4.0)", - "remotes (>= 2.4.2)", - "rlang (>= 1.0.4)", - "roxygen2 (>= 7.2.1)", - "rversions (>= 2.1.1)", - "sessioninfo (>= 1.2.2)", - "stats", - "testthat (>= 3.1.5)", - "tools", - "urlchecker (>= 1.0.1)", - "utils", - "withr (>= 2.5.0)" - ], - "Suggests": [ - "BiocManager (>= 1.30.18)", - "callr (>= 3.7.1)", - "covr (>= 3.5.1)", - "curl (>= 4.3.2)", - "digest (>= 0.6.29)", - "DT (>= 0.23)", - "foghorn (>= 1.4.2)", - "gh (>= 1.3.0)", - "gmailr (>= 1.0.1)", - "httr (>= 1.4.3)", - "knitr (>= 1.39)", - "lintr (>= 3.0.0)", - "MASS", - "mockery (>= 0.4.3)", - "pingr (>= 2.0.1)", - "rhub (>= 1.1.1)", - "rmarkdown (>= 2.14)", - "rstudioapi (>= 0.13)", - "spelling (>= 2.2)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut], Jennifer Bryan [aut, cre] (), RStudio [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.6", - "Source": "Repository", - "Type": "Package", - "Title": "Diffs for R Objects", - "Description": "Generate a colorized diff of two R objects for an intuitive visualization of their differences.", - "Authors@R": "c( person( \"Brodie\", \"Gaslam\", email=\"brodie.gaslam@yahoo.com\", role=c(\"aut\", \"cre\")), person( \"Michael B.\", \"Allen\", email=\"ioplex@gmail.com\", role=c(\"ctb\", \"cph\"), comment=\"Original C implementation of Myers Diff Algorithm\"))", - "Depends": [ - "R (>= 3.1.0)" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/brodieG/diffobj", - "BugReports": "https://github.com/brodieG/diffobj/issues", - "RoxygenNote": "7.2.3", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Suggests": [ - "knitr", - "rmarkdown" - ], - "Collate": "'capt.R' 'options.R' 'pager.R' 'check.R' 'finalizer.R' 'misc.R' 'html.R' 'styles.R' 's4.R' 'core.R' 'diff.R' 'get.R' 'guides.R' 'hunks.R' 'layout.R' 'myerssimple.R' 'rdiff.R' 'rds.R' 'set.R' 'subset.R' 'summmary.R' 'system.R' 'text.R' 'tochar.R' 'trim.R' 'word.R'", - "Imports": [ - "crayon (>= 1.3.2)", - "tools", - "methods", - "utils", - "stats" - ], - "NeedsCompilation": "yes", - "Author": "Brodie Gaslam [aut, cre], Michael B. Allen [ctb, cph] (Original C implementation of Myers Diff Algorithm)", - "Maintainer": "Brodie Gaslam ", - "Repository": "CRAN" - }, - "digest": { - "Package": "digest", - "Version": "0.6.37", - "Source": "Repository", - "Authors@R": "c(person(\"Dirk\", \"Eddelbuettel\", role = c(\"aut\", \"cre\"), email = \"edd@debian.org\", comment = c(ORCID = \"0000-0001-6419-907X\")), person(\"Antoine\", \"Lucas\", role=\"ctb\"), 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\"))", - "Date": "2024-08-19", - "Title": "Create Compact Hash Digests of R Objects", - "Description": "Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the 'md5', 'sha-1', 'sha-256', 'crc32', 'xxhash', 'murmurhash', 'spookyhash', 'blake3', 'crc32c', 'xxh3_64', and 'xxh3_128' algorithms) permitting easy comparison of R language objects, as well as functions such as'hmac()' to create hash-based message authentication code. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as 'OpenSSL' should be used.", - "URL": "https://github.com/eddelbuettel/digest, https://dirk.eddelbuettel.com/code/digest.html", - "BugReports": "https://github.com/eddelbuettel/digest/issues", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "utils" - ], - "License": "GPL (>= 2)", - "Suggests": [ - "tinytest", - "simplermarkdown" - ], - "VignetteBuilder": "simplermarkdown", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "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]", - "Maintainer": "Dirk Eddelbuettel ", - "Repository": "CRAN" - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.4", - "Source": "Repository", - "Title": "Syntax Highlighting and Automatic Linking", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://downlit.r-lib.org/, https://github.com/r-lib/downlit", - "BugReports": "https://github.com/r-lib/downlit/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "withr", - "yaml" - ], - "Suggests": [ - "covr", - "htmltools", - "jsonlite", - "MASS", - "MassSpecWavelet", - "pkgload", - "rmarkdown", - "testthat (>= 3.0.0)", - "xml2" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.4", - "Source": "Repository", - "Type": "Package", - "Title": "A Grammar of Data Manipulation", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Romain\", \"François\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Lionel\", \"Henry\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4777-038X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A fast, consistent tool for working with data frame like objects, both in memory and out of memory.", - "License": "MIT + file LICENSE", - "URL": "https://dplyr.tidyverse.org, https://github.com/tidyverse/dplyr", - "BugReports": "https://github.com/tidyverse/dplyr/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "generics", - "glue (>= 1.3.2)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 1.5)", - "methods", - "pillar (>= 1.9.0)", - "R6", - "rlang (>= 1.1.0)", - "tibble (>= 3.2.0)", - "tidyselect (>= 1.2.0)", - "utils", - "vctrs (>= 0.6.4)" - ], - "Suggests": [ - "bench", - "broom", - "callr", - "covr", - "DBI", - "dbplyr (>= 2.2.1)", - "ggplot2", - "knitr", - "Lahman", - "lobstr", - "microbenchmark", - "nycflights13", - "purrr", - "rmarkdown", - "RMySQL", - "RPostgreSQL", - "RSQLite", - "stringi (>= 1.7.6)", - "testthat (>= 3.1.5)", - "tidyr (>= 1.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse, shiny, pkgdown, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (), Romain François [aut] (), Lionel Henry [aut], Kirill Müller [aut] (), Davis Vaughan [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Title": "Tools for Working with ...", - "Description": "The ellipsis is a powerful tool for extending functions. Unfortunately this power comes at a cost: misspelled arguments will be silently ignored. The ellipsis package provides a collection of functions to catch problems and alert the user.", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = c(\"aut\", \"cre\")), person(\"RStudio\", role = \"cph\") )", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "URL": "https://ellipsis.r-lib.org, https://github.com/r-lib/ellipsis", - "BugReports": "https://github.com/r-lib/ellipsis/issues", - "Depends": [ - "R (>= 3.2)" - ], - "Imports": [ - "rlang (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "testthat" - ], - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], RStudio [cph]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ellmer": { - "Package": "ellmer", - "Version": "0.2.1", - "Source": "Repository", - "Title": "Chat with Large Language Models", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Joe\", \"Cheng\", role = \"aut\"), person(\"Aaron\", \"Jacobs\", 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\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Chat with large language models from a range of providers including 'Claude' , 'OpenAI' , and more. Supports streaming, asynchronous calls, tool calling, and structured data extraction.", - "License": "MIT + file LICENSE", - "URL": "https://ellmer.tidyverse.org, https://github.com/tidyverse/ellmer", - "BugReports": "https://github.com/tidyverse/ellmer/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli", - "coro (>= 1.1.0)", - "glue", - "httr2 (>= 1.1.1)", - "jsonlite", - "later (>= 1.4.0)", - "lifecycle", - "promises (>= 1.3.1)", - "R6", - "rlang (>= 1.1.0)", - "S7 (>= 0.2.0)" - ], - "Suggests": [ - "base64enc", - "connectcreds", - "curl (>= 6.0.1)", - "gargle", - "gitcreds", - "knitr", - "magick", - "openssl", - "paws.common", - "rmarkdown", - "shiny", - "shinychat (>= 0.2.0)", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, rmarkdown", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "test-provider-*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Collate": "'utils-S7.R' 'types.R' 'tools-def.R' 'content.R' 'provider.R' 'as-json.R' 'batch-chat.R' 'chat-parallel.R' 'chat-structured.R' 'utils-coro.R' 'chat.R' 'content-image.R' 'content-pdf.R' 'turns.R' 'content-tools.R' 'deprecated.R' 'ellmer-package.R' 'httr2.R' 'import-standalone-obj-type.R' 'import-standalone-purrr.R' 'import-standalone-types-check.R' 'interpolate.R' 'params.R' 'provider-openai.R' 'provider-azure.R' 'provider-bedrock.R' 'provider-claude.R' 'provider-gemini.R' 'provider-cloudflare.R' 'provider-cortex.R' 'provider-databricks.R' 'provider-deepseek.R' 'provider-gemini-upload.R' 'provider-github.R' 'provider-groq.R' 'provider-huggingface.r' 'provider-mistral.R' 'provider-ollama.R' 'provider-openrouter.R' 'provider-perplexity.R' 'provider-portkey.R' 'provider-snowflake.R' 'provider-vllm.R' 'shiny.R' 'tokens.R' 'tools-def-auto.R' 'utils-callbacks.R' 'utils-cat.R' 'utils-merge.R' 'utils-prettytime.R' 'utils.R' 'zzz.R'", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Joe Cheng [aut], Aaron Jacobs [aut], Garrick Aden-Buie [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "evaluate": { - "Package": "evaluate", - "Version": "1.0.4", - "Source": "Repository", - "Type": "Package", - "Title": "Parsing and Evaluation Tools that Provide More Details than the Default", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Yihui\", \"Xie\", role = \"aut\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Michael\", \"Lawrence\", role = \"ctb\"), person(\"Thomas\", \"Kluyver\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Adam\", \"Ryczkowski\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Michel\", \"Lang\", role = \"ctb\"), person(\"Karolis\", \"Koncevičius\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.", - "License": "MIT + file LICENSE", - "URL": "https://evaluate.r-lib.org/, https://github.com/r-lib/evaluate", - "BugReports": "https://github.com/r-lib/evaluate/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Suggests": [ - "callr", - "covr", - "ggplot2 (>= 3.3.6)", - "lattice", - "methods", - "pkgload", - "ragg (>= 1.4.0)", - "rlang (>= 1.1.5)", - "knitr", - "testthat (>= 3.0.0)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Yihui Xie [aut] (ORCID: ), Michael Lawrence [ctb], Thomas Kluyver [ctb], Jeroen Ooms [ctb], Barret Schloerke [ctb], Adam Ryczkowski [ctb], Hiroaki Yutani [ctb], Michel Lang [ctb], Karolis Koncevičius [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.6", - "Source": "Repository", - "Title": "ANSI Control Sequence Aware String Functions", - "Description": "Counterparts to R string manipulation functions that account for the effects of ANSI text formatting control sequences.", - "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\" ))", - "Depends": [ - "R (>= 3.1.0)" - ], - "License": "GPL-2 | GPL-3", - "URL": "https://github.com/brodieG/fansi", - "BugReports": "https://github.com/brodieG/fansi/issues", - "VignetteBuilder": "knitr", - "Suggests": [ - "unitizer", - "knitr", - "rmarkdown" - ], - "Imports": [ - "grDevices", - "utils" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "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'", - "NeedsCompilation": "yes", - "Author": "Brodie Gaslam [aut, cre], Elliott Sales De Andrade [ctb], R Core Team [cph] (UTF8 byte length calcs from src/util.c)", - "Maintainer": "Brodie Gaslam ", - "Repository": "CRAN" - }, - "farver": { - "Package": "farver", - "Version": "2.1.2", - "Source": "Repository", - "Type": "Package", - "Title": "High Performance Colour Space Manipulation", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Berendea\", \"Nicolae\", role = \"aut\", comment = \"Author of the ColorSpace C++ library\"), person(\"Romain\", \"François\", , \"romain@purrple.cat\", role = \"aut\", comment = c(ORCID = \"0000-0002-2444-4226\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The encoding of colour can be handled in many different ways, using different colour spaces. As different colour spaces have different uses, efficient conversion between these representations are important. The 'farver' package provides a set of functions that gives access to very fast colour space conversion and comparisons implemented in C++, and offers speed improvements over the 'convertColor' function in the 'grDevices' package.", - "License": "MIT + file LICENSE", - "URL": "https://farver.data-imaginist.com, https://github.com/thomasp85/farver", - "BugReports": "https://github.com/thomasp85/farver/issues", - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (), Berendea Nicolae [aut] (Author of the ColorSpace C++ library), Romain François [aut] (), Posit, PBC [cph, fnd]", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Fast Data Structures", - "Authors@R": "c( person(\"Winston\", \"Chang\", email = \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(given = \"Tessil\", role = \"cph\", comment = \"hopscotch_map library\") )", - "Description": "Fast implementation of data structures, including a key-value store, stack, and queue. Environments are commonly used as key-value stores in R, but every time a new key is used, it is added to R's global symbol table, causing a small amount of memory leakage. This can be problematic in cases where many different keys are used. Fastmap avoids this memory leak issue by implementing the map using data structures in C++.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Suggests": [ - "testthat (>= 2.1.1)" - ], - "URL": "https://r-lib.github.io/fastmap/, https://github.com/r-lib/fastmap", - "BugReports": "https://github.com/r-lib/fastmap/issues", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Posit Software, PBC [cph, fnd], Tessil [cph] (hopscotch_map library)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.3", - "Source": "Repository", - "Type": "Package", - "Title": "Easily Work with 'Font Awesome' Icons", - "Description": "Easily and flexibly insert 'Font Awesome' icons into 'R Markdown' documents and 'Shiny' apps. These icons can be inserted into HTML content through inline 'SVG' tags or 'i' tags. There is also a utility function for exporting 'Font Awesome' icons as 'PNG' images for those situations where raster graphics are needed.", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"ctb\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome font\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/fontawesome, https://rstudio.github.io/fontawesome/", - "BugReports": "https://github.com/rstudio/fontawesome/issues", - "Encoding": "UTF-8", - "ByteCompile": "true", - "RoxygenNote": "7.3.2", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "rlang (>= 1.0.6)", - "htmltools (>= 0.5.1.1)" - ], - "Suggests": [ - "covr", - "dplyr (>= 1.0.8)", - "gt (>= 0.9.0)", - "knitr (>= 1.31)", - "testthat (>= 3.0.0)", - "rsvg" - ], - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Christophe Dervieux [ctb] (), Winston Chang [ctb], Dave Gandy [ctb, cph] (Font-Awesome font), Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "fs": { - "Package": "fs", - "Version": "1.6.6", - "Source": "Repository", - "Title": "Cross-Platform File System Operations Based on 'libuv'", - "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\")) )", - "Description": "A cross-platform interface to file system operations, built on top of the 'libuv' C library.", - "License": "MIT + file LICENSE", - "URL": "https://fs.r-lib.org, https://github.com/r-lib/fs", - "BugReports": "https://github.com/r-lib/fs/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "covr", - "crayon", - "knitr", - "pillar (>= 1.0.0)", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "tibble (>= 1.1.0)", - "vctrs (>= 0.3.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "SystemRequirements": "GNU make", - "NeedsCompilation": "yes", - "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]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "generics": { - "Package": "generics", - "Version": "0.1.4", - "Source": "Repository", - "Title": "Common S3 Generics not Provided by Base R Methods Related to Model Fitting", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Max\", \"Kuhn\", , \"max@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "In order to reduce potential package dependencies and conflicts, generics provides a number of commonly used S3 generics.", - "License": "MIT + file LICENSE", - "URL": "https://generics.r-lib.org, https://github.com/r-lib/generics", - "BugReports": "https://github.com/r-lib/generics/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "covr", - "pkgload", - "testthat (>= 3.0.0)", - "tibble", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Max Kuhn [aut], Davis Vaughan [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "gert": { - "Package": "gert", - "Version": "2.1.5", - "Source": "Repository", - "Type": "Package", - "Title": "Simple Git Client for R", - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Jennifer\", \"Bryan\", role = \"ctb\", email = \"jenny@posit.co\", comment = c(ORCID = \"0000-0002-6983-2759\")))", - "Description": "Simple git client for R based on 'libgit2' with support for SSH and HTTPS remotes. All functions in 'gert' use basic R data types (such as vectors and data-frames) for their arguments and return values. User credentials are shared with command line 'git' through the git-credential store and ssh keys stored on disk or ssh-agent.", - "License": "MIT + file LICENSE", - "URL": "https://docs.ropensci.org/gert/, https://ropensci.r-universe.dev/gert", - "BugReports": "https://github.com/r-lib/gert/issues", - "Imports": [ - "askpass", - "credentials (>= 1.2.1)", - "openssl (>= 2.0.3)", - "rstudioapi (>= 0.11)", - "sys", - "zip (>= 2.1.0)" - ], - "Suggests": [ - "spelling", - "knitr", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "SystemRequirements": "libgit2 (>= 1.0): libgit2-devel (rpm) or libgit2-dev (deb)", - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Jennifer Bryan [ctb] ()", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "gh": { - "Package": "gh", - "Version": "1.5.0", - "Source": "Repository", - "Title": "'GitHub' 'API'", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"cre\", \"ctb\")), person(\"Jennifer\", \"Bryan\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Minimal client to access the 'GitHub' 'API'.", - "License": "MIT + file LICENSE", - "URL": "https://gh.r-lib.org/, https://github.com/r-lib/gh#readme", - "BugReports": "https://github.com/r-lib/gh/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli (>= 3.0.1)", - "gitcreds", - "glue", - "httr2 (>= 1.0.6)", - "ini", - "jsonlite", - "lifecycle", - "rlang (>= 1.0.0)" - ], - "Suggests": [ - "connectcreds", - "covr", - "knitr", - "rmarkdown", - "rprojroot", - "spelling", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-29", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [cre, ctb], Jennifer Bryan [aut], Hadley Wickham [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.2", - "Source": "Repository", - "Title": "Query 'git' Credentials from 'R'", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Query, set, delete credentials from the 'git' credential store. Manage 'GitHub' tokens and other 'git' credentials. This package is to be used by other packages that need to authenticate to 'GitHub' and/or other 'git' repositories.", - "License": "MIT + file LICENSE", - "URL": "https://gitcreds.r-lib.org/, https://github.com/r-lib/gitcreds", - "BugReports": "https://github.com/r-lib/gitcreds/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Suggests": [ - "codetools", - "covr", - "knitr", - "mockery", - "oskeyring", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1.9000", - "SystemRequirements": "git", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], RStudio [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "glue": { - "Package": "glue", - "Version": "1.8.0", - "Source": "Repository", - "Title": "Interpreted String Literals", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "An implementation of interpreted string literals, inspired by Python's Literal String Interpolation and Docstrings and Julia's Triple-Quoted String Literals .", - "License": "MIT + file LICENSE", - "URL": "https://glue.tidyverse.org/, https://github.com/tidyverse/glue", - "BugReports": "https://github.com/tidyverse/glue/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "methods" - ], - "Suggests": [ - "crayon", - "DBI (>= 1.2.0)", - "dplyr", - "knitr", - "magrittr", - "rlang", - "rmarkdown", - "RSQLite", - "testthat (>= 3.2.0)", - "vctrs (>= 0.3.0)", - "waldo (>= 0.5.3)", - "withr" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/Needs/website": "bench, forcats, ggbeeswarm, ggplot2, R.utils, rprintf, tidyr, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (), Jennifer Bryan [aut, cre] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "gt": { - "Package": "gt", - "Version": "1.0.0", - "Source": "Repository", - "Type": "Package", - "Title": "Easily Create Presentation-Ready Display Tables", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Ellis\", \"Hughes\", , \"ellis.h.hughes@gsk.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0637-4436\")), person(\"Alexandra\", \"Lauer\", , \"alexandralauer1@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4191-6301\")), person(\"JooYoung\", \"Seo\", , \"jseo1005@illinois.edu\", role = \"aut\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Ken\", \"Brevoort\", , \"ken@brevoort.com\", role = \"aut\", comment = c(ORCID = \"0000-0002-4001-8358\")), person(\"Olivier\", \"Roy\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Build display tables from tabular data with an easy-to-use set of functions. With its progressive approach, we can construct display tables with a cohesive set of table parts. Table values can be formatted using any of the included formatting functions. Footnotes and cell styles can be precisely added through a location targeting system. The way in which 'gt' handles things for you means that you don't often have to worry about the fine details.", - "License": "MIT + file LICENSE", - "URL": "https://gt.rstudio.com, https://github.com/rstudio/gt", - "BugReports": "https://github.com/rstudio/gt/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "base64enc (>= 0.1-3)", - "bigD (>= 0.2)", - "bitops (>= 1.0-7)", - "cli (>= 3.6.3)", - "commonmark (>= 1.9.1)", - "dplyr (>= 1.1.4)", - "fs (>= 1.6.4)", - "glue (>= 1.8.0)", - "htmltools (>= 0.5.8.1)", - "htmlwidgets (>= 1.6.4)", - "juicyjuice (>= 0.1.0)", - "magrittr (>= 2.0.3)", - "markdown (>= 1.13)", - "reactable (>= 0.4.4)", - "rlang (>= 1.1.4)", - "sass (>= 0.4.9)", - "scales (>= 1.3.0)", - "tidyselect (>= 1.2.1)", - "vctrs", - "xml2 (>= 1.3.6)" - ], - "Suggests": [ - "fontawesome (>= 0.5.2)", - "ggplot2", - "grid", - "gtable (>= 0.3.6)", - "katex (>= 1.4.1)", - "knitr", - "lubridate", - "magick", - "paletteer", - "RColorBrewer", - "rmarkdown (>= 2.20)", - "rsvg", - "rvest", - "shiny (>= 1.9.1)", - "testthat (>= 3.1.9)", - "tidyr (>= 1.0.0)", - "webshot2 (>= 0.1.0)", - "withr" - ], - "Config/Needs/coverage": "officer", - "Config/Needs/website": "quarto", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre] (), Joe Cheng [aut], Barret Schloerke [aut] (), Ellis Hughes [aut] (), Alexandra Lauer [aut] (), JooYoung Seo [aut] (), Ken Brevoort [aut] (), Olivier Roy [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "here": { - "Package": "here", - "Version": "1.0.1", - "Source": "Repository", - "Title": "A Simpler Way to Find Your Files", - "Date": "2020-12-13", - "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"krlmlr+r@mailbox.org\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Jennifer\", family = \"Bryan\", role = \"ctb\", email = \"jenny@rstudio.com\", comment = c(ORCID = \"0000-0002-6983-2759\")))", - "Description": "Constructs paths to your project's files. Declare the relative path of a file within your project with 'i_am()'. Use the 'here()' function as a drop-in replacement for 'file.path()', it will always locate the files relative to your project root.", - "License": "MIT + file LICENSE", - "URL": "https://here.r-lib.org/, https://github.com/r-lib/here", - "BugReports": "https://github.com/r-lib/here/issues", - "Imports": [ - "rprojroot (>= 2.0.2)" - ], - "Suggests": [ - "conflicted", - "covr", - "fs", - "knitr", - "palmerpenguins", - "plyr", - "readr", - "rlang", - "rmarkdown", - "testthat", - "uuid", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.1.1.9000", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (), Jennifer Bryan [ctb] ()", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "highr": { - "Package": "highr", - "Version": "0.11", - "Source": "Repository", - "Type": "Package", - "Title": "Syntax Highlighting for R Source Code", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Yixuan\", \"Qiu\", role = \"aut\"), person(\"Christopher\", \"Gandrud\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\") )", - "Description": "Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package ().", - "Depends": [ - "R (>= 3.3.0)" - ], - "Imports": [ - "xfun (>= 0.18)" - ], - "Suggests": [ - "knitr", - "markdown", - "testit" - ], - "License": "GPL", - "URL": "https://github.com/yihui/highr", - "BugReports": "https://github.com/yihui/highr/issues", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), Yixuan Qiu [aut], Christopher Gandrud [ctb], Qiang Li [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "hms": { - "Package": "hms", - "Version": "1.1.3", - "Source": "Repository", - "Title": "Pretty Time of Day", - "Date": "2023-03-21", - "Authors@R": "c( person(\"Kirill\", \"Müller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(\"R Consortium\", role = \"fnd\"), person(\"RStudio\", role = \"fnd\") )", - "Description": "Implements an S3 class for storing and formatting time-of-day values, based on the 'difftime' class.", - "Imports": [ - "lifecycle", - "methods", - "pkgconfig", - "rlang (>= 1.0.2)", - "vctrs (>= 0.3.8)" - ], - "Suggests": [ - "crayon", - "lubridate", - "pillar (>= 1.1.0)", - "testthat (>= 3.0.0)" - ], - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "URL": "https://hms.tidyverse.org/, https://github.com/tidyverse/hms", - "BugReports": "https://github.com/tidyverse/hms/issues", - "RoxygenNote": "7.2.3", - "Config/testthat/edition": "3", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (), R Consortium [fnd], RStudio [fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.8.1", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for HTML", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", , \"barret@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Yihui\", \"Xie\", , \"yihui@posit.co\", role = \"aut\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools for HTML generation and output.", - "License": "GPL (>= 2)", - "URL": "https://github.com/rstudio/htmltools, https://rstudio.github.io/htmltools/", - "BugReports": "https://github.com/rstudio/htmltools/issues", - "Depends": [ - "R (>= 2.14.1)" - ], - "Imports": [ - "base64enc", - "digest", - "fastmap (>= 1.1.0)", - "grDevices", - "rlang (>= 1.0.0)", - "utils" - ], - "Suggests": [ - "Cairo", - "markdown", - "ragg", - "shiny", - "testthat", - "withr" - ], - "Enhances": [ - "knitr" - ], - "Config/Needs/check": "knitr", - "Config/Needs/website": "rstudio/quillt, bench", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "Collate": "'colors.R' 'fill.R' 'html_dependency.R' 'html_escape.R' 'html_print.R' 'htmltools-package.R' 'images.R' 'known_tags.R' 'selector.R' 'staticimports.R' 'tag_query.R' 'utils.R' 'tags.R' 'template.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Carson Sievert [aut, cre] (), Barret Schloerke [aut] (), Winston Chang [aut] (), Yihui Xie [aut], Jeff Allen [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.4", - "Source": "Repository", - "Type": "Package", - "Title": "HTML Widgets for R", - "Authors@R": "c( person(\"Ramnath\", \"Vaidyanathan\", role = c(\"aut\", \"cph\")), person(\"Yihui\", \"Xie\", role = \"aut\"), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Carson\", \"Sievert\", , \"carson@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Kenton\", \"Russell\", role = c(\"aut\", \"cph\")), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/ramnathv/htmlwidgets", - "BugReports": "https://github.com/ramnathv/htmlwidgets/issues", - "Imports": [ - "grDevices", - "htmltools (>= 0.5.7)", - "jsonlite (>= 0.9.16)", - "knitr (>= 1.8)", - "rmarkdown", - "yaml" - ], - "Suggests": [ - "testthat" - ], - "Enhances": [ - "shiny (>= 1.1)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Ramnath Vaidyanathan [aut, cph], Yihui Xie [aut], JJ Allaire [aut], Joe Cheng [aut], Carson Sievert [aut, cre] (), Kenton Russell [aut, cph], Ellis Hughes [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.16", - "Source": "Repository", - "Type": "Package", - "Title": "HTTP and WebSocket Server Library", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", \"fnd\", role = \"cph\"), person(\"Hector\", \"Corrada Bravo\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Andrzej\", \"Krzemienski\", role = \"cph\", comment = \"optional.hpp\"), person(\"libuv project contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file\"), person(\"Joyent, Inc. and other Node contributors\", role = \"cph\", comment = \"libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file\"), person(\"Niels\", \"Provos\", role = \"cph\", comment = \"libuv subcomponent: tree.h\"), person(\"Internet Systems Consortium, Inc.\", role = \"cph\", comment = \"libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c\"), person(\"Alexander\", \"Chemeris\", role = \"cph\", comment = \"libuv subcomponent: stdint-msvc2008.h (from msinttypes)\"), person(\"Google, Inc.\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Sony Mobile Communcations AB\", role = \"cph\", comment = \"libuv subcomponent: pthread-fixes.c\"), person(\"Berkeley Software Design Inc.\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Kenneth\", \"MacKay\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016)\", role = \"cph\", comment = \"libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c\"), person(\"Steve\", \"Reid\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"James\", \"Brown\", role = \"aut\", comment = \"SHA-1 implementation\"), person(\"Bob\", \"Trower\", role = \"aut\", comment = \"base64 implementation\"), person(\"Alexander\", \"Peslyak\", role = \"aut\", comment = \"MD5 implementation\"), person(\"Trantor Standard Systems\", role = \"cph\", comment = \"base64 implementation\"), person(\"Igor\", \"Sysoev\", role = \"cph\", comment = \"http-parser\") )", - "Description": "Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http-parser license information.)", - "License": "GPL (>= 2) | file LICENSE", - "URL": "https://github.com/rstudio/httpuv", - "BugReports": "https://github.com/rstudio/httpuv/issues", - "Depends": [ - "R (>= 2.15.1)" - ], - "Imports": [ - "later (>= 0.8.0)", - "promises", - "R6", - "Rcpp (>= 1.0.7)", - "utils" - ], - "Suggests": [ - "callr", - "curl", - "jsonlite", - "testthat", - "websocket" - ], - "LinkingTo": [ - "later", - "Rcpp" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "GNU make, zlib", - "Collate": "'RcppExports.R' 'httpuv.R' 'random_port.R' 'server.R' 'staticServer.R' 'static_paths.R' 'utils.R'", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Winston Chang [aut, cre], Posit, PBC fnd [cph], Hector Corrada Bravo [ctb], Jeroen Ooms [ctb], Andrzej Krzemienski [cph] (optional.hpp), libuv project contributors [cph] (libuv library, see src/libuv/AUTHORS file), Joyent, Inc. and other Node contributors [cph] (libuv library, see src/libuv/AUTHORS file; and http-parser library, see src/http-parser/AUTHORS file), Niels Provos [cph] (libuv subcomponent: tree.h), Internet Systems Consortium, Inc. [cph] (libuv subcomponent: inet_pton and inet_ntop, contained in src/libuv/src/inet.c), Alexander Chemeris [cph] (libuv subcomponent: stdint-msvc2008.h (from msinttypes)), Google, Inc. [cph] (libuv subcomponent: pthread-fixes.c), Sony Mobile Communcations AB [cph] (libuv subcomponent: pthread-fixes.c), Berkeley Software Design Inc. [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Kenneth MacKay [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Emergya (Cloud4all, FP7/2007-2013, grant agreement no 289016) [cph] (libuv subcomponent: android-ifaddrs.h, android-ifaddrs.c), Steve Reid [aut] (SHA-1 implementation), James Brown [aut] (SHA-1 implementation), Bob Trower [aut] (base64 implementation), Alexander Peslyak [aut] (MD5 implementation), Trantor Standard Systems [cph] (base64 implementation), Igor Sysoev [cph] (http-parser)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "httr": { - "Package": "httr", - "Version": "1.4.7", - "Source": "Repository", - "Title": "Tools for Working with URLs and HTTP", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).", - "License": "MIT + file LICENSE", - "URL": "https://httr.r-lib.org/, https://github.com/r-lib/httr", - "BugReports": "https://github.com/r-lib/httr/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "curl (>= 5.0.2)", - "jsonlite", - "mime", - "openssl (>= 0.8)", - "R6" - ], - "Suggests": [ - "covr", - "httpuv", - "jpeg", - "knitr", - "png", - "readr", - "rmarkdown", - "testthat (>= 0.8.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "httr2": { - "Package": "httr2", - "Version": "1.2.1", - "Source": "Repository", - "Title": "Perform HTTP Requests and Process the Responses", - "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\") )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://httr2.r-lib.org, https://github.com/r-lib/httr2", - "BugReports": "https://github.com/r-lib/httr2/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli (>= 3.0.0)", - "curl (>= 6.4.0)", - "glue", - "lifecycle", - "magrittr", - "openssl", - "R6", - "rappdirs", - "rlang (>= 1.1.0)", - "vctrs (>= 0.6.3)", - "withr" - ], - "Suggests": [ - "askpass", - "bench", - "clipr", - "covr", - "docopt", - "httpuv", - "jose", - "jsonlite", - "knitr", - "later (>= 1.4.0)", - "nanonext", - "paws.common", - "promises", - "rmarkdown", - "testthat (>= 3.1.8)", - "tibble", - "webfakes (>= 1.4.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "resp-stream, req-perform", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd], Maximilian Girlich [ctb]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Type": "Package", - "Title": "Read and Write '.ini' Files", - "Date": "2018-05-19", - "Author": "David Valentim Dias", - "Maintainer": "David Valentim Dias ", - "Description": "Parse simple '.ini' configuration files to an structured list. Users can manipulate this resulting list with lapply() functions. This same structured list can be used to write back to file after modifications.", - "License": "GPL-3", - "URL": "https://github.com/dvdscripter/ini", - "BugReports": "https://github.com/dvdscripter/ini/issues", - "LazyData": "FALSE", - "RoxygenNote": "6.0.1", - "Suggests": [ - "testthat" - ], - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "janitor": { - "Package": "janitor", - "Version": "2.2.1", - "Source": "Repository", - "Title": "Simple Tools for Examining and Cleaning Dirty Data", - "Authors@R": "c(person(\"Sam\", \"Firke\", email = \"samuel.firke@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Bill\", \"Denney\", email = \"wdenney@humanpredictions.com\", role = \"ctb\"), person(\"Chris\", \"Haid\", email = \"chrishaid@gmail.com\", role = \"ctb\"), person(\"Ryan\", \"Knight\", email = \"ryangknight@gmail.com\", role = \"ctb\"), person(\"Malte\", \"Grosser\", email = \"malte.grosser@gmail.com\", role = \"ctb\"), person(\"Jonathan\", \"Zadra\", email = \"jonathan.zadra@sorensonimpact.com\", role = \"ctb\"))", - "Description": "The main janitor functions can: perfectly format data.frame column names; provide quick counts of variable combinations (i.e., frequency tables and crosstabs); and explore duplicate records. Other janitor functions nicely format the tabulation results. These tabulate-and-report functions approximate popular features of SPSS and Microsoft Excel. This package follows the principles of the \"tidyverse\" and works well with the pipe function %>%. janitor was built with beginning-to-intermediate R users in mind and is optimized for user-friendliness.", - "URL": "https://github.com/sfirke/janitor, https://sfirke.github.io/janitor/", - "BugReports": "https://github.com/sfirke/janitor/issues", - "Depends": [ - "R (>= 3.1.2)" - ], - "Imports": [ - "dplyr (>= 1.0.0)", - "hms", - "lifecycle", - "lubridate", - "magrittr", - "purrr", - "rlang", - "stringi", - "stringr", - "snakecase (>= 0.9.2)", - "tidyselect (>= 1.0.0)", - "tidyr (>= 0.7.0)" - ], - "License": "MIT + file LICENSE", - "RoxygenNote": "7.2.3", - "Suggests": [ - "dbplyr", - "knitr", - "rmarkdown", - "RSQLite", - "sf", - "testthat (>= 3.0.0)", - "tibble", - "tidygraph" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Sam Firke [aut, cre], Bill Denney [ctb], Chris Haid [ctb], Ryan Knight [ctb], Malte Grosser [ctb], Jonathan Zadra [ctb]", - "Maintainer": "Sam Firke ", - "Repository": "CRAN" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Title": "Obtain 'jQuery' as an HTML Dependency Object", - "Authors@R": "c( person(\"Carson\", \"Sievert\", role = c(\"aut\", \"cre\"), email = \"carson@rstudio.com\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@rstudio.com\"), person(family = \"RStudio\", role = \"cph\"), person(family = \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library and jQuery UI library\"), person(family = \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt\") )", - "Description": "Obtain any major version of 'jQuery' () and use it in any webpage generated by 'htmltools' (e.g. 'shiny', 'htmlwidgets', and 'rmarkdown'). Most R users don't need to use this package directly, but other R packages (e.g. 'shiny', 'rmarkdown', etc.) depend on this package to avoid bundling redundant copies of 'jQuery'.", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "RoxygenNote": "7.0.2", - "Imports": [ - "htmltools" - ], - "Suggests": [ - "testthat" - ], - "NeedsCompilation": "no", - "Author": "Carson Sievert [aut, cre] (), Joe Cheng [aut], RStudio [cph], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/lib/jquery-AUTHORS.txt)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "2.0.0", - "Source": "Repository", - "Title": "A Simple and Robust JSON Parser and Generator for R", - "License": "MIT + file LICENSE", - "Depends": [ - "methods" - ], - "Authors@R": "c( person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Duncan\", \"Temple Lang\", role = \"ctb\"), person(\"Lloyd\", \"Hilaiel\", role = \"cph\", comment=\"author of bundled libyajl\"))", - "URL": "https://jeroen.r-universe.dev/jsonlite https://arxiv.org/abs/1403.2805", - "BugReports": "https://github.com/jeroen/jsonlite/issues", - "Maintainer": "Jeroen Ooms ", - "VignetteBuilder": "knitr, R.rsp", - "Description": "A reasonably fast JSON parser and generator, optimized for statistical data and the web. Offers simple, flexible tools for working with JSON in R, and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.", - "Suggests": [ - "httr", - "vctrs", - "testthat", - "knitr", - "rmarkdown", - "R.rsp", - "sf" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Duncan Temple Lang [ctb], Lloyd Hilaiel [cph] (author of bundled libyajl)", - "Repository": "CRAN" - }, - "jsonvalidate": { - "Package": "jsonvalidate", - "Version": "1.5.0", - "Source": "Repository", - "Title": "Validate 'JSON' Schema", - "Authors@R": "c(person(\"Rich\", \"FitzJohn\", role = c(\"aut\", \"cre\"), email = \"rich.fitzjohn@gmail.com\"), person(\"Rob\", \"Ashton\", role = \"aut\"), person(\"Alex\", \"Hill\", role = \"ctb\"), person(\"Alicia\", \"Schep\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Kara\", \"Woo\", role = \"ctb\"), person(\"Mathias\", \"Buus\", role = c(\"aut\", \"cph\"), comment = \"Author of bundled imjv library\"), person(\"Evgeny\", \"Poberezkin\", role = c(\"aut\", \"cph\"), comment = \"Author of bundled Ajv library\"))", - "Maintainer": "Rich FitzJohn ", - "Description": "Uses the node library 'is-my-json-valid' or 'ajv' to validate 'JSON' against a 'JSON' schema. Drafts 04, 06 and 07 of 'JSON' schema are supported.", - "License": "MIT + file LICENSE", - "URL": "https://docs.ropensci.org/jsonvalidate/, https://github.com/ropensci/jsonvalidate", - "BugReports": "https://github.com/ropensci/jsonvalidate/issues", - "Imports": [ - "R6", - "V8" - ], - "Suggests": [ - "knitr", - "jsonlite", - "rmarkdown", - "testthat", - "withr" - ], - "RoxygenNote": "7.3.2", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "Language": "en-GB", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Rich FitzJohn [aut, cre], Rob Ashton [aut], Alex Hill [ctb], Alicia Schep [ctb], Ian Lyttle [ctb], Kara Woo [ctb], Mathias Buus [aut, cph] (Author of bundled imjv library), Evgeny Poberezkin [aut, cph] (Author of bundled Ajv library)", - "Repository": "CRAN" - }, - "juicyjuice": { - "Package": "juicyjuice", - "Version": "0.1.0", - "Source": "Repository", - "Title": "Inline CSS Properties into HTML Tags Using 'juice'", - "Authors@R": "c( person(\"Richard\", \"Iannone\", , \"riannone@me.com\", c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Automattic\", role = c(\"cph\"), comment = \"juice library\"), person(\"juice contributors\", role = c(\"ctb\"), comment = \"juice library\") )", - "Description": "There are occasions where you need a piece of HTML with integrated styles. A prime example of this is HTML email. This transformation involves moving the CSS and associated formatting instructions from the style block in the head of your document into the body of the HTML. Many prominent email clients require integrated styles in HTML email; otherwise a received HTML email will be displayed without any styling. This package will quickly and precisely perform these CSS transformations when given HTML text and it does so by using the JavaScript 'juice' library.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/rich-iannone/juicyjuice", - "BugReports": "https://github.com/rich-iannone/juicyjuice/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "Imports": [ - "V8 (>= 4.2.0)" - ], - "Suggests": [ - "testthat (>= 3.0.0)" - ], - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Richard Iannone [aut, cre, cph] (), Automattic [cph] (juice library), juice contributors [ctb] (juice library)", - "Maintainer": "Richard Iannone ", - "Repository": "CRAN" - }, - "kableExtra": { - "Package": "kableExtra", - "Version": "1.4.0", - "Source": "Repository", - "Type": "Package", - "Title": "Construct Complex Table with 'kable' and Pipe Syntax", - "Authors@R": "c( person('Hao', 'Zhu', email = 'haozhu233@gmail.com', role = c('aut', 'cre'), comment = c(ORCID = '0000-0002-3386-6076')), person('Thomas', 'Travison', role = 'ctb'), person('Timothy', 'Tsai', role = 'ctb'), person('Will', 'Beasley', email = 'wibeasley@hotmail.com', role = 'ctb'), person('Yihui', 'Xie', email = 'xie@yihui.name', role = 'ctb'), person('GuangChuang', 'Yu', email = 'guangchuangyu@gmail.com', role = 'ctb'), person('Stéphane', 'Laurent', role = 'ctb'), person('Rob', 'Shepherd', role = 'ctb'), person('Yoni', 'Sidi', role = 'ctb'), person('Brian', 'Salzer', role = 'ctb'), person('George', 'Gui', role = 'ctb'), person('Yeliang', 'Fan', role = 'ctb'), person('Duncan', 'Murdoch', role = 'ctb'), person('Vincent', 'Arel-Bundock', role = 'ctb'), person('Bill', 'Evans', role = 'ctb') )", - "Description": "Build complex HTML or 'LaTeX' tables using 'kable()' from 'knitr' and the piping syntax from 'magrittr'. Function 'kable()' is a light weight table generator coming from 'knitr'. This package simplifies the way to manipulate the HTML or 'LaTeX' codes generated by 'kable()' and allows users to construct complex tables and customize styles using a readable syntax.", - "License": "MIT + file LICENSE", - "URL": "http://haozhu233.github.io/kableExtra/, https://github.com/haozhu233/kableExtra", - "BugReports": "https://github.com/haozhu233/kableExtra/issues", - "Depends": [ - "R (>= 3.1.0)" - ], - "Imports": [ - "knitr (>= 1.33)", - "magrittr", - "stringr (>= 1.0)", - "xml2 (>= 1.1.1)", - "rmarkdown (>= 1.6.0)", - "scales", - "viridisLite", - "stats", - "grDevices", - "htmltools", - "rstudioapi", - "tools", - "digest", - "graphics", - "svglite" - ], - "Suggests": [ - "testthat", - "magick", - "tinytex", - "formattable", - "sparkline", - "webshot2" - ], - "Config/testthat/edition": "3", - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "Language": "en-US", - "NeedsCompilation": "no", - "Author": "Hao Zhu [aut, cre] (), Thomas Travison [ctb], Timothy Tsai [ctb], Will Beasley [ctb], Yihui Xie [ctb], GuangChuang Yu [ctb], Stéphane Laurent [ctb], Rob Shepherd [ctb], Yoni Sidi [ctb], Brian Salzer [ctb], George Gui [ctb], Yeliang Fan [ctb], Duncan Murdoch [ctb], Vincent Arel-Bundock [ctb], Bill Evans [ctb]", - "Maintainer": "Hao Zhu ", - "Repository": "CRAN" - }, - "knitr": { - "Package": "knitr", - "Version": "1.50", - "Source": "Repository", - "Type": "Package", - "Title": "A General-Purpose Package for Dynamic Report Generation in R", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Abhraneel\", \"Sarma\", role = \"ctb\"), person(\"Adam\", \"Vogt\", role = \"ctb\"), person(\"Alastair\", \"Andrew\", role = \"ctb\"), person(\"Alex\", \"Zvoleff\", role = \"ctb\"), person(\"Amar\", \"Al-Zubaidi\", role = \"ctb\"), person(\"Andre\", \"Simon\", role = \"ctb\", comment = \"the CSS files under inst/themes/ were derived from the Highlight package http://www.andre-simon.de\"), person(\"Aron\", \"Atkins\", role = \"ctb\"), person(\"Aaron\", \"Wolen\", role = \"ctb\"), person(\"Ashley\", \"Manton\", role = \"ctb\"), person(\"Atsushi\", \"Yasumoto\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8335-495X\")), person(\"Ben\", \"Baumer\", role = \"ctb\"), person(\"Brian\", \"Diggs\", role = \"ctb\"), person(\"Brian\", \"Zhang\", role = \"ctb\"), person(\"Bulat\", \"Yapparov\", role = \"ctb\"), person(\"Cassio\", \"Pereira\", role = \"ctb\"), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person(\"David\", \"Hall\", role = \"ctb\"), person(\"David\", \"Hugh-Jones\", role = \"ctb\"), person(\"David\", \"Robinson\", role = \"ctb\"), person(\"Doug\", \"Hemken\", role = \"ctb\"), person(\"Duncan\", \"Murdoch\", role = \"ctb\"), person(\"Elio\", \"Campitelli\", role = \"ctb\"), person(\"Ellis\", \"Hughes\", role = \"ctb\"), person(\"Emily\", \"Riederer\", role = \"ctb\"), person(\"Fabian\", \"Hirschmann\", role = \"ctb\"), person(\"Fitch\", \"Simeon\", role = \"ctb\"), person(\"Forest\", \"Fang\", role = \"ctb\"), person(c(\"Frank\", \"E\", \"Harrell\", \"Jr\"), role = \"ctb\", comment = \"the Sweavel package at inst/misc/Sweavel.sty\"), person(\"Garrick\", \"Aden-Buie\", role = \"ctb\"), person(\"Gregoire\", \"Detrez\", role = \"ctb\"), person(\"Hadley\", \"Wickham\", role = \"ctb\"), person(\"Hao\", \"Zhu\", role = \"ctb\"), person(\"Heewon\", \"Jeon\", role = \"ctb\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Hiroaki\", \"Yutani\", role = \"ctb\"), person(\"Ian\", \"Lyttle\", role = \"ctb\"), person(\"Hodges\", \"Daniel\", role = \"ctb\"), person(\"Jacob\", \"Bien\", role = \"ctb\"), person(\"Jake\", \"Burkhead\", role = \"ctb\"), person(\"James\", \"Manton\", role = \"ctb\"), person(\"Jared\", \"Lander\", role = \"ctb\"), person(\"Jason\", \"Punyon\", role = \"ctb\"), person(\"Javier\", \"Luraschi\", role = \"ctb\"), person(\"Jeff\", \"Arnold\", role = \"ctb\"), person(\"Jenny\", \"Bryan\", role = \"ctb\"), person(\"Jeremy\", \"Ashkenas\", role = c(\"ctb\", \"cph\"), comment = \"the CSS file at inst/misc/docco-classic.css\"), person(\"Jeremy\", \"Stephens\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Johannes\", \"Ranke\", role = \"ctb\"), person(\"John\", \"Honaker\", role = \"ctb\"), person(\"John\", \"Muschelli\", role = \"ctb\"), person(\"Jonathan\", \"Keane\", role = \"ctb\"), person(\"JJ\", \"Allaire\", role = \"ctb\"), person(\"Johan\", \"Toloe\", role = \"ctb\"), person(\"Jonathan\", \"Sidi\", role = \"ctb\"), person(\"Joseph\", \"Larmarange\", role = \"ctb\"), person(\"Julien\", \"Barnier\", role = \"ctb\"), person(\"Kaiyin\", \"Zhong\", role = \"ctb\"), person(\"Kamil\", \"Slowikowski\", role = \"ctb\"), person(\"Karl\", \"Forner\", role = \"ctb\"), person(c(\"Kevin\", \"K.\"), \"Smith\", role = \"ctb\"), person(\"Kirill\", \"Mueller\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Lorenz\", \"Walthert\", role = \"ctb\"), person(\"Lucas\", \"Gallindo\", role = \"ctb\"), person(\"Marius\", \"Hofert\", role = \"ctb\"), person(\"Martin\", \"Modrák\", role = \"ctb\"), person(\"Michael\", \"Chirico\", role = \"ctb\"), person(\"Michael\", \"Friendly\", role = \"ctb\"), person(\"Michal\", \"Bojanowski\", role = \"ctb\"), person(\"Michel\", \"Kuhlmann\", role = \"ctb\"), person(\"Miller\", \"Patrick\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Nick\", \"Salkowski\", role = \"ctb\"), person(\"Niels Richard\", \"Hansen\", role = \"ctb\"), person(\"Noam\", \"Ross\", role = \"ctb\"), person(\"Obada\", \"Mahdi\", role = \"ctb\"), person(\"Pavel N.\", \"Krivitsky\", role = \"ctb\", comment=c(ORCID = \"0000-0002-9101-3362\")), person(\"Pedro\", \"Faria\", role = \"ctb\"), person(\"Qiang\", \"Li\", role = \"ctb\"), person(\"Ramnath\", \"Vaidyanathan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Robert\", \"Krzyzanowski\", role = \"ctb\"), person(\"Rodrigo\", \"Copetti\", role = \"ctb\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Ruaridh\", \"Williamson\", role = \"ctb\"), person(\"Sagiru\", \"Mati\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1413-3974\")), person(\"Scott\", \"Kostyshak\", role = \"ctb\"), person(\"Sebastian\", \"Meyer\", role = \"ctb\"), person(\"Sietse\", \"Brouwer\", role = \"ctb\"), person(c(\"Simon\", \"de\"), \"Bernard\", role = \"ctb\"), person(\"Sylvain\", \"Rousseau\", role = \"ctb\"), person(\"Taiyun\", \"Wei\", role = \"ctb\"), person(\"Thibaut\", \"Assus\", role = \"ctb\"), person(\"Thibaut\", \"Lamadon\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Tim\", \"Mastny\", role = \"ctb\"), person(\"Tom\", \"Torsney-Weir\", role = \"ctb\"), person(\"Trevor\", \"Davis\", role = \"ctb\"), person(\"Viktoras\", \"Veitas\", role = \"ctb\"), person(\"Weicheng\", \"Zhu\", role = \"ctb\"), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Zachary\", \"Foster\", role = \"ctb\"), person(\"Zhian N.\", \"Kamvar\", role = \"ctb\", comment = c(ORCID = \"0000-0003-1458-7108\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "evaluate (>= 0.15)", - "highr (>= 0.11)", - "methods", - "tools", - "xfun (>= 0.51)", - "yaml (>= 2.1.19)" - ], - "Suggests": [ - "bslib", - "codetools", - "DBI (>= 0.4-1)", - "digest", - "formatR", - "gifski", - "gridSVG", - "htmlwidgets (>= 0.7)", - "jpeg", - "JuliaCall (>= 0.11.1)", - "magick", - "litedown", - "markdown (>= 1.3)", - "png", - "ragg", - "reticulate (>= 1.4)", - "rgl (>= 0.95.1201)", - "rlang", - "rmarkdown", - "sass", - "showtext", - "styler (>= 1.2.0)", - "targets (>= 0.6.0)", - "testit", - "tibble", - "tikzDevice (>= 0.10)", - "tinytex (>= 0.56)", - "webshot", - "rstudioapi", - "svglite" - ], - "License": "GPL", - "URL": "https://yihui.org/knitr/", - "BugReports": "https://github.com/yihui/knitr/issues", - "Encoding": "UTF-8", - "VignetteBuilder": "litedown, knitr", - "SystemRequirements": "Package vignettes based on R Markdown v2 or reStructuredText require Pandoc (http://pandoc.org). The function rst2pdf() requires rst2pdf (https://github.com/rst2pdf/rst2pdf).", - "Collate": "'block.R' 'cache.R' 'citation.R' 'hooks-html.R' 'plot.R' 'utils.R' 'defaults.R' 'concordance.R' 'engine.R' 'highlight.R' 'themes.R' 'header.R' 'hooks-asciidoc.R' 'hooks-chunk.R' 'hooks-extra.R' 'hooks-latex.R' 'hooks-md.R' 'hooks-rst.R' 'hooks-textile.R' 'hooks.R' 'output.R' 'package.R' 'pandoc.R' 'params.R' 'parser.R' 'pattern.R' 'rocco.R' 'spin.R' 'table.R' 'template.R' 'utils-conversion.R' 'utils-rd2html.R' 'utils-string.R' 'utils-sweave.R' 'utils-upload.R' 'utils-vignettes.R' 'zzz.R'", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "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]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.3", - "Source": "Repository", - "Type": "Package", - "Title": "Axis Labeling", - "Date": "2023-08-29", - "Author": "Justin Talbot,", - "Maintainer": "Nuno Sempere ", - "Description": "Functions which provide a range of axis labeling algorithms.", - "License": "MIT + file LICENSE | Unlimited", - "Collate": "'labeling.R'", - "NeedsCompilation": "no", - "Imports": [ - "stats", - "graphics" - ], - "Repository": "CRAN" - }, - "later": { - "Package": "later", - "Version": "1.4.2", - "Source": "Repository", - "Type": "Package", - "Title": "Utilities for Scheduling Functions to Execute Later with Event Loops", - "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\"), person(\"Joe\", \"Cheng\", role = c(\"aut\"), email = \"joe@posit.co\"), person(\"Charlie\", \"Gao\", role = c(\"aut\"), email = \"charlie.gao@shikokuchuo.net\", comment = c(ORCID = \"0000-0002-0750-061X\")), person(family = \"Posit Software, PBC\", role = \"cph\"), person(\"Marcus\", \"Geelnard\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\"), person(\"Evan\", \"Nemerson\", role = c(\"ctb\", \"cph\"), comment = \"TinyCThread library, https://tinycthread.github.io/\") )", - "Description": "Executes arbitrary R or C functions some time after the current time, after the R execution stack has emptied. The functions are scheduled in an event loop.", - "URL": "https://r-lib.github.io/later/, https://github.com/r-lib/later", - "BugReports": "https://github.com/r-lib/later/issues", - "License": "MIT + file LICENSE", - "Imports": [ - "Rcpp (>= 0.12.9)", - "rlang" - ], - "LinkingTo": [ - "Rcpp" - ], - "RoxygenNote": "7.3.2", - "Suggests": [ - "knitr", - "nanonext", - "R6", - "rmarkdown", - "testthat (>= 2.1.0)" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Winston Chang [aut, cre], Joe Cheng [aut], Charlie Gao [aut] (), Posit Software, PBC [cph], Marcus Geelnard [ctb, cph] (TinyCThread library, https://tinycthread.github.io/), Evan Nemerson [ctb, cph] (TinyCThread library, https://tinycthread.github.io/)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.4", - "Source": "Repository", - "Title": "Manage the Life Cycle of your Package Functions", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Manage the life cycle of your exported functions with shared conventions, documentation badges, and user-friendly deprecation warnings.", - "License": "MIT + file LICENSE", - "URL": "https://lifecycle.r-lib.org/, https://github.com/r-lib/lifecycle", - "BugReports": "https://github.com/r-lib/lifecycle/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "glue", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "covr", - "crayon", - "knitr", - "lintr", - "rmarkdown", - "testthat (>= 3.0.1)", - "tibble", - "tidyverse", - "tools", - "vctrs", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, usethis", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "NeedsCompilation": "no", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "litedown": { - "Package": "litedown", - "Version": "0.7", - "Source": "Repository", - "Type": "Package", - "Title": "A Lightweight Version of R Markdown", - "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(\"Tim\", \"Taylor\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8587-7113\")), person() )", - "Description": "Render R Markdown to Markdown (without using 'knitr'), and Markdown to lightweight HTML or 'LaTeX' documents with the 'commonmark' package (instead of 'Pandoc'). Some missing Markdown features in 'commonmark' are also supported, such as raw HTML or 'LaTeX' blocks, 'LaTeX' math, superscripts, subscripts, footnotes, element attributes, and appendices, but not all 'Pandoc' Markdown features are (or will be) supported. With additional JavaScript and CSS, you can also create HTML slides and articles. This package can be viewed as a trimmed-down version of R Markdown and 'knitr'. It does not aim at rich Markdown features or a large variety of output formats (the primary formats are HTML and 'LaTeX'). Book and website projects of multiple input documents are also supported.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "utils", - "commonmark (>= 1.9.5)", - "xfun (>= 0.52)" - ], - "Suggests": [ - "rbibutils", - "rstudioapi", - "tinytex" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/litedown", - "BugReports": "https://github.com/yihui/litedown/issues", - "VignetteBuilder": "litedown", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Tim Taylor [ctb] ()", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.9.4", - "Source": "Repository", - "Type": "Package", - "Title": "Make Dealing with Dates a Little Easier", - "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\") )", - "Maintainer": "Vitalie Spinu ", - "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.", - "License": "GPL (>= 2)", - "URL": "https://lubridate.tidyverse.org, https://github.com/tidyverse/lubridate", - "BugReports": "https://github.com/tidyverse/lubridate/issues", - "Depends": [ - "methods", - "R (>= 3.2)" - ], - "Imports": [ - "generics", - "timechange (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "knitr", - "rmarkdown", - "testthat (>= 2.1.0)", - "vctrs (>= 0.6.5)" - ], - "Enhances": [ - "chron", - "data.table", - "timeDate", - "tis", - "zoo" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "SystemRequirements": "C++11, A system with zoneinfo data (e.g. /usr/share/zoneinfo). On Windows the zoneinfo included with R is used.", - "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'", - "NeedsCompilation": "yes", - "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]", - "Repository": "CRAN" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Type": "Package", - "Title": "A Forward-Pipe Operator for R", - "Authors@R": "c( person(\"Stefan Milton\", \"Bache\", , \"stefan@stefanbache.dk\", role = c(\"aut\", \"cph\"), comment = \"Original author and creator of magrittr\"), person(\"Hadley\", \"Wickham\", , \"hadley@rstudio.com\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@rstudio.com\", role = \"cre\"), person(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette. To quote Rene Magritte, \"Ceci n'est pas un pipe.\"", - "License": "MIT + file LICENSE", - "URL": "https://magrittr.tidyverse.org, https://github.com/tidyverse/magrittr", - "BugReports": "https://github.com/tidyverse/magrittr/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Suggests": [ - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "Yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "yes", - "Author": "Stefan Milton Bache [aut, cph] (Original author and creator of magrittr), Hadley Wickham [aut], Lionel Henry [cre], RStudio [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "markdown": { - "Package": "markdown", - "Version": "2.0", - "Source": "Repository", - "Type": "Package", - "Title": "Render Markdown with 'commonmark'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"JJ\", \"Allaire\", role = \"aut\"), person(\"Jeffrey\", \"Horner\", role = \"aut\"), person(\"Henrik\", \"Bengtsson\", role = \"ctb\"), person(\"Jim\", \"Hester\", role = \"ctb\"), person(\"Yixuan\", \"Qiu\", role = \"ctb\"), person(\"Kohske\", \"Takahashi\", role = \"ctb\"), person(\"Adam\", \"November\", role = \"ctb\"), person(\"Nacho\", \"Caballero\", role = \"ctb\"), person(\"Jeroen\", \"Ooms\", role = \"ctb\"), person(\"Thomas\", \"Leeper\", role = \"ctb\"), person(\"Joe\", \"Cheng\", role = \"ctb\"), person(\"Andrzej\", \"Oles\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Render Markdown to full and lightweight HTML/LaTeX documents with the 'commonmark' package. This package has been superseded by 'litedown'.", - "Depends": [ - "R (>= 2.11.1)" - ], - "Imports": [ - "utils", - "xfun", - "litedown (>= 0.6)" - ], - "Suggests": [ - "knitr", - "rmarkdown (>= 2.18)", - "yaml", - "RCurl" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/markdown", - "BugReports": "https://github.com/rstudio/markdown/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre] (), JJ Allaire [aut], Jeffrey Horner [aut], Henrik Bengtsson [ctb], Jim Hester [ctb], Yixuan Qiu [ctb], Kohske Takahashi [ctb], Adam November [ctb], Nacho Caballero [ctb], Jeroen Ooms [ctb], Thomas Leeper [ctb], Joe Cheng [ctb], Andrzej Oles [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Title": "'Memoisation' of Functions", - "Authors@R": "c(person(given = \"Hadley\", family = \"Wickham\", role = \"aut\", email = \"hadley@rstudio.com\"), person(given = \"Jim\", family = \"Hester\", role = \"aut\"), person(given = \"Winston\", family = \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@rstudio.com\"), person(given = \"Kirill\", family = \"Müller\", role = \"aut\", email = \"krlmlr+r@mailbox.org\"), person(given = \"Daniel\", family = \"Cook\", role = \"aut\", email = \"danielecook@gmail.com\"), person(given = \"Mark\", family = \"Edmondson\", role = \"ctb\", email = \"r@sunholo.com\"))", - "Description": "Cache the results of a function so that when you call it again with the same arguments it returns the previously computed value.", - "License": "MIT + file LICENSE", - "URL": "https://memoise.r-lib.org, https://github.com/r-lib/memoise", - "BugReports": "https://github.com/r-lib/memoise/issues", - "Imports": [ - "rlang (>= 0.4.10)", - "cachem" - ], - "Suggests": [ - "digest", - "aws.s3", - "covr", - "googleAuthR", - "googleCloudStorageR", - "httr", - "testthat" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Winston Chang [aut, cre], Kirill Müller [aut], Daniel Cook [aut], Mark Edmondson [ctb]", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "mime": { - "Package": "mime", - "Version": "0.13", - "Source": "Repository", - "Type": "Package", - "Title": "Map Filenames to MIME Types", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Jeffrey\", \"Horner\", role = \"ctb\"), person(\"Beilei\", \"Bian\", role = \"ctb\") )", - "Description": "Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.", - "Imports": [ - "tools" - ], - "License": "GPL", - "URL": "https://github.com/yihui/mime", - "BugReports": "https://github.com/yihui/mime/issues", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Yihui Xie [aut, cre] (, https://yihui.org), Jeffrey Horner [ctb], Beilei Bian [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "miniUI": { - "Package": "miniUI", - "Version": "0.1.2", - "Source": "Repository", - "Type": "Package", - "Title": "Shiny UI Widgets for Small Screens", - "Authors@R": "c( person(\"Joe\", \"Cheng\", role = c(\"cre\", \"aut\"), email = \"joe@posit.co\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides UI widget and layout functions for writing Shiny apps that work well on small screens.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/miniUI", - "BugReports": "https://github.com/rstudio/miniUI/issues", - "Imports": [ - "shiny (>= 0.13)", - "htmltools (>= 0.3)", - "utils" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Joe Cheng [cre, aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Joe Cheng ", - "Repository": "CRAN" - }, - "openssl": { - "Package": "openssl", - "Version": "2.3.3", - "Source": "Repository", - "Type": "Package", - "Title": "Toolkit for Encryption, Signatures and Certificates Based on OpenSSL", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Oliver\", \"Keyes\", role = \"ctb\"))", - "Description": "Bindings to OpenSSL libssl and libcrypto, plus custom SSH key parsers. Supports RSA, DSA and EC curves P-256, P-384, P-521, and curve25519. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/openssl", - "BugReports": "https://github.com/jeroen/openssl/issues", - "SystemRequirements": "OpenSSL >= 1.0.2", - "VignetteBuilder": "knitr", - "Imports": [ - "askpass" - ], - "Suggests": [ - "curl", - "testthat (>= 2.1.0)", - "digest", - "knitr", - "rmarkdown", - "jsonlite", - "jose", - "sodium" - ], - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (ORCID: ), Oliver Keyes [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "pillar": { - "Package": "pillar", - "Version": "1.11.0", - "Source": "Repository", - "Title": "Coloured Formatting for Columns", - "Authors@R": "c(person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Hadley\", family = \"Wickham\", role = \"aut\"), person(given = \"RStudio\", role = \"cph\"))", - "Description": "Provides 'pillar' and 'colonnade' generics designed for formatting columns of data using the full range of colours provided by modern terminals.", - "License": "MIT + file LICENSE", - "URL": "https://pillar.r-lib.org/, https://github.com/r-lib/pillar", - "BugReports": "https://github.com/r-lib/pillar/issues", - "Imports": [ - "cli (>= 2.3.0)", - "glue", - "lifecycle", - "rlang (>= 1.0.2)", - "utf8 (>= 1.1.0)", - "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bit64", - "DBI", - "debugme", - "DiagrammeR", - "dplyr", - "formattable", - "ggplot2", - "knitr", - "lubridate", - "nanotime", - "nycflights13", - "palmerpenguins", - "rmarkdown", - "scales", - "stringi", - "survival", - "testthat (>= 3.1.1)", - "tibble", - "units (>= 0.7.2)", - "vdiffr", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "format_multi_fuzz, format_multi_fuzz_2, format_multi, ctl_colonnade, ctl_colonnade_1, ctl_colonnade_2", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/gha/extra-packages": "units=?ignore-before-r=4.3.0", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], RStudio [cph]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.4.8", - "Source": "Repository", - "Title": "Find Tools Needed to Build R Packages", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides functions used to build R packages. Locates compilers needed to build R packages on various platforms and ensures the PATH is configured appropriately so R can use them.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/pkgbuild, https://pkgbuild.r-lib.org", - "BugReports": "https://github.com/r-lib/pkgbuild/issues", - "Depends": [ - "R (>= 3.5)" - ], - "Imports": [ - "callr (>= 3.2.0)", - "cli (>= 3.4.0)", - "desc", - "processx", - "R6" - ], - "Suggests": [ - "covr", - "cpp11", - "knitr", - "Rcpp", - "rmarkdown", - "testthat (>= 3.2.0)", - "withr (>= 2.3.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-30", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Title": "Private Configuration for 'R' Packages", - "Author": "Gábor Csárdi", - "Maintainer": "Gábor Csárdi ", - "Description": "Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "Imports": [ - "utils" - ], - "Suggests": [ - "covr", - "testthat", - "disposables (>= 1.0.3)" - ], - "URL": "https://github.com/r-lib/pkgconfig#readme", - "BugReports": "https://github.com/r-lib/pkgconfig/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.1.3", - "Source": "Repository", - "Title": "Make Static HTML Documentation for a Package", - "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\"), comment = c(ROR = \"03wc8by49\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://pkgdown.r-lib.org/, https://github.com/r-lib/pkgdown", - "BugReports": "https://github.com/r-lib/pkgdown/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Imports": [ - "bslib (>= 0.5.1)", - "callr (>= 3.7.3)", - "cli (>= 3.6.1)", - "desc (>= 1.4.0)", - "downlit (>= 0.4.4)", - "fontawesome", - "fs (>= 1.4.0)", - "httr2 (>= 1.0.2)", - "jsonlite", - "openssl", - "purrr (>= 1.0.0)", - "ragg (>= 1.4.0)", - "rlang (>= 1.1.4)", - "rmarkdown (>= 2.27)", - "tibble", - "whisker", - "withr (>= 2.4.3)", - "xml2 (>= 1.3.1)", - "yaml" - ], - "Suggests": [ - "covr", - "diffviewer", - "evaluate (>= 0.24.0)", - "gert", - "gt", - "htmltools", - "htmlwidgets", - "knitr (>= 1.50)", - "lifecycle", - "magick", - "methods", - "pkgload (>= 1.0.2)", - "quarto", - "rsconnect", - "rstudioapi", - "rticles", - "sass", - "testthat (>= 3.1.3)", - "tools" - ], - "VignetteBuilder": "knitr, quarto", - "Config/Needs/website": "usethis, servr", - "Config/potools/style": "explicit", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "build-article, build-quarto-article, build-reference", - "Encoding": "UTF-8", - "SystemRequirements": "pandoc", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Jay Hesselberth [aut] (ORCID: ), Maëlle Salmon [aut] (ORCID: ), Olivier Roy [aut], Salim Brüggemann [aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Simulate Package Installation and Attach", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Core team\", role = \"ctb\", comment = \"Some namespace and vignette code extracted from base R\") )", - "Description": "Simulates the process of installing a package and then attaching it. This is a key part of the 'devtools' package as it allows you to rapidly iterate while developing a package.", - "License": "GPL-3", - "URL": "https://github.com/r-lib/pkgload, https://pkgload.r-lib.org", - "BugReports": "https://github.com/r-lib/pkgload/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "desc", - "fs", - "glue", - "lifecycle", - "methods", - "pkgbuild", - "processx", - "rlang (>= 1.1.1)", - "rprojroot", - "utils", - "withr (>= 2.4.3)" - ], - "Suggests": [ - "bitops", - "jsonlite", - "mathjaxr", - "pak", - "Rcpp", - "remotes", - "rstudioapi", - "testthat (>= 3.2.1.1)", - "usethis" - ], - "Config/Needs/website": "tidyverse/tidytemplate, ggplot2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "dll", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Winston Chang [aut], Jim Hester [aut], Lionel Henry [aut, cre], Posit Software, PBC [cph, fnd], R Core team [ctb] (Some namespace and vignette code extracted from base R)", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Title": "Praise Users", - "Author": "Gabor Csardi, Sindre Sorhus", - "Maintainer": "Gabor Csardi ", - "Description": "Build friendly R packages that praise their users if they have done something good, or they just need it to feel better.", - "License": "MIT + file LICENSE", - "LazyData": "true", - "URL": "https://github.com/gaborcsardi/praise", - "BugReports": "https://github.com/gaborcsardi/praise/issues", - "Suggests": [ - "testthat" - ], - "Collate": "'adjective.R' 'adverb.R' 'exclamation.R' 'verb.R' 'rpackage.R' 'package.R'", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.2.0", - "Source": "Repository", - "Title": "Pretty, Human Readable Formatting of Quantities", - "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\")) )", - "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'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/prettyunits", - "BugReports": "https://github.com/r-lib/prettyunits/issues", - "Depends": [ - "R(>= 2.10)" - ], - "Suggests": [ - "codetools", - "covr", - "testthat" - ], - "RoxygenNote": "7.2.3", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Gabor Csardi [aut, cre], Bill Denney [ctb] (), Christophe Regouby [ctb]", - "Maintainer": "Gabor Csardi ", - "Repository": "CRAN" - }, - "processx": { - "Package": "processx", - "Version": "3.8.6", - "Source": "Repository", - "Title": "Execute and Control System Processes", - "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\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://processx.r-lib.org, https://github.com/r-lib/processx", - "BugReports": "https://github.com/r-lib/processx/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "ps (>= 1.2.0)", - "R6", - "utils" - ], - "Suggests": [ - "callr (>= 3.7.3)", - "cli (>= 3.3.0)", - "codetools", - "covr", - "curl", - "debugme", - "parallel", - "rlang (>= 1.0.2)", - "testthat (>= 3.0.0)", - "webfakes", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre, cph] (), Winston Chang [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "profvis": { - "Package": "profvis", - "Version": "0.4.0", - "Source": "Repository", - "Title": "Interactive Visualizations for Profiling R Code", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Timothy\", \"Mastny\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery Foundation\", role = \"cph\", comment = \"jQuery library\"), person(, \"jQuery contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery library; authors listed in inst/htmlwidgets/lib/jquery/AUTHORS.txt\"), person(\"Mike\", \"Bostock\", role = c(\"ctb\", \"cph\"), comment = \"D3 library\"), person(, \"D3 contributors\", role = \"ctb\", comment = \"D3 library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\") )", - "Description": "Interactive visualizations for profiling R code.", - "License": "MIT + file LICENSE", - "URL": "https://profvis.r-lib.org, https://github.com/r-lib/profvis", - "BugReports": "https://github.com/r-lib/profvis/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "htmlwidgets (>= 0.3.2)", - "rlang (>= 1.1.0)", - "vctrs" - ], - "Suggests": [ - "htmltools", - "knitr", - "rmarkdown", - "shiny", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Winston Chang [aut], Javier Luraschi [aut], Timothy Mastny [aut], Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/htmlwidgets/lib/jquery/AUTHORS.txt), Mike Bostock [ctb, cph] (D3 library), D3 contributors [ctb] (D3 library), Ivan Sagalaev [ctb, cph] (highlight.js library)", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "progress": { - "Package": "progress", - "Version": "1.2.3", - "Source": "Repository", - "Title": "Terminal Progress Bars", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Rich\", \"FitzJohn\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Configurable Progress bars, they may include percentage, elapsed time, and/or the estimated completion time. They work in terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works with or without 'Rcpp'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/progress#readme, http://r-lib.github.io/progress/", - "BugReports": "https://github.com/r-lib/progress/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "crayon", - "hms", - "prettyunits", - "R6" - ], - "Suggests": [ - "Rcpp", - "testthat (>= 3.0.0)", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Rich FitzJohn [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "promises": { - "Package": "promises", - "Version": "1.3.3", - "Source": "Repository", - "Type": "Package", - "Title": "Abstractions for Promise-Based Asynchronous Programming", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Provides fundamental abstractions for doing asynchronous programming in R using promises. Asynchronous programming is useful for allowing a single R process to orchestrate multiple tasks in the background while also attending to something else. Semantics are similar to 'JavaScript' promises, but with a syntax that is idiomatic R.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/promises/, https://github.com/rstudio/promises", - "BugReports": "https://github.com/rstudio/promises/issues", - "Imports": [ - "fastmap (>= 1.1.0)", - "later", - "magrittr (>= 1.5)", - "R6", - "Rcpp", - "rlang", - "stats" - ], - "Suggests": [ - "future (>= 1.21.0)", - "knitr", - "purrr", - "rmarkdown", - "spelling", - "testthat (>= 3.0.0)", - "vembedr" - ], - "LinkingTo": [ - "later", - "Rcpp" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rsconnect, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-27", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut, cre], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Joe Cheng ", - "Repository": "CRAN" - }, - "ps": { - "Package": "ps", - "Version": "1.9.1", - "Source": "Repository", - "Title": "List, Query, Manipulate System Processes", - "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\")) )", - "Description": "List, query and manipulate all system processes, on 'Windows', 'Linux' and 'macOS'.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/ps, https://ps.r-lib.org/", - "BugReports": "https://github.com/r-lib/ps/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "callr", - "covr", - "curl", - "pillar", - "pingr", - "processx (>= 3.1.0)", - "R6", - "rlang", - "testthat (>= 3.0.0)", - "webfakes", - "withr" - ], - "Biarch": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Jay Loden [aut], Dave Daeschler [aut], Giampaolo Rodola' [aut], Gábor Csárdi [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "purrr": { - "Package": "purrr", - "Version": "1.1.0", - "Source": "Repository", - "Title": "Functional Programming Tools", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"https://ror.org/03wc8by49\")) )", - "Description": "A complete and consistent functional programming toolkit for R.", - "License": "MIT + file LICENSE", - "URL": "https://purrr.tidyverse.org/, https://github.com/tidyverse/purrr", - "BugReports": "https://github.com/tidyverse/purrr/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli (>= 3.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 1.5.0)", - "rlang (>= 1.1.1)", - "vctrs (>= 0.6.3)" - ], - "Suggests": [ - "carrier (>= 0.2.0)", - "covr", - "dplyr (>= 0.7.8)", - "httr", - "knitr", - "lubridate", - "mirai (>= 2.4.0)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble", - "tidyselect" - ], - "LinkingTo": [ - "cli" - ], - "VignetteBuilder": "knitr", - "Biarch": "true", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate, tidyr", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre] (ORCID: ), Lionel Henry [aut], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "ragg": { - "Package": "ragg", - "Version": "1.4.0", - "Source": "Repository", - "Type": "Package", - "Title": "Graphic Devices Based on AGG", - "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\")) )", - "Maintainer": "Thomas Lin Pedersen ", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://ragg.r-lib.org, https://github.com/r-lib/ragg", - "BugReports": "https://github.com/r-lib/ragg/issues", - "Imports": [ - "systemfonts (>= 1.0.3)", - "textshaping (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "graphics", - "grid", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "systemfonts", - "textshaping" - ], - "Config/Needs/website": "ggplot2, devoid, magick, bench, tidyr, ggridges, hexbin, sessioninfo, pkgdown, tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "freetype2, libpng, libtiff, libjpeg", - "Config/testthat/edition": "3", - "Config/build/compilation-database": "true", - "NeedsCompilation": "yes", - "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]", - "Repository": "CRAN" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Type": "Package", - "Title": "Application Directories: Determine Where to Save Data, Caches, and Logs", - "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\"))", - "Description": "An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' () to R.", - "License": "MIT + file LICENSE", - "URL": "https://rappdirs.r-lib.org, https://github.com/r-lib/rappdirs", - "BugReports": "https://github.com/r-lib/rappdirs/issues", - "Depends": [ - "R (>= 3.2)" - ], - "Suggests": [ - "roxygen2", - "testthat (>= 3.0.0)", - "covr", - "withr" - ], - "Copyright": "Original python appdirs module copyright (c) 2010 ActiveState Software Inc. R port copyright Hadley Wickham, RStudio. See file LICENSE for details.", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "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]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "rcmdcheck": { - "Package": "rcmdcheck", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Run 'R CMD check' from 'R' and Capture Results", - "Authors@R": "person(given = \"Gábor\", family = \"Csárdi\", role = c(\"cre\", \"aut\"), email = \"csardi.gabor@gmail.com\")", - "Description": "Run 'R CMD check' from 'R' and capture the results of the individual checks. Supports running checks in the background, timeouts, pretty printing and comparing check results.", - "License": "MIT + file LICENSE", - "URL": "https://r-lib.github.io/rcmdcheck/, https://github.com/r-Lib/rcmdcheck#readme", - "BugReports": "https://github.com/r-Lib/rcmdcheck/issues", - "Imports": [ - "callr (>= 3.1.1.9000)", - "cli (>= 3.0.0)", - "curl", - "desc (>= 1.2.0)", - "digest", - "pkgbuild", - "prettyunits", - "R6", - "rprojroot", - "sessioninfo (>= 1.1.1)", - "utils", - "withr", - "xopen" - ], - "Suggests": [ - "covr", - "knitr", - "mockery", - "processx", - "ps", - "rmarkdown", - "svglite", - "testthat", - "webfakes" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [cre, aut]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "reactR": { - "Package": "reactR", - "Version": "0.6.1", - "Source": "Repository", - "Type": "Package", - "Title": "React Helpers", - "Date": "2024-09-14", - "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\" ) )", - "Maintainer": "Kent Russell ", - "Description": "Make it easy to use 'React' in R with 'htmlwidget' scaffolds, helper dependency functions, an embedded 'Babel' 'transpiler', and examples.", - "URL": "https://github.com/react-R/reactR", - "BugReports": "https://github.com/react-R/reactR/issues", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Imports": [ - "htmltools" - ], - "Suggests": [ - "htmlwidgets (>= 1.5.3)", - "rmarkdown", - "shiny", - "V8", - "knitr", - "usethis", - "jsonlite" - ], - "RoxygenNote": "7.3.2", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "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)", - "Repository": "CRAN" - }, - "reactable": { - "Package": "reactable", - "Version": "0.4.4", - "Source": "Repository", - "Type": "Package", - "Title": "Interactive Data Tables for R", - "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\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://glin.github.io/reactable/, https://github.com/glin/reactable", - "BugReports": "https://github.com/glin/reactable/issues", - "Depends": [ - "R (>= 3.1)" - ], - "Imports": [ - "digest", - "htmltools (>= 0.5.2)", - "htmlwidgets (>= 1.5.3)", - "jsonlite", - "reactR" - ], - "Suggests": [ - "covr", - "crosstalk", - "dplyr", - "fontawesome", - "knitr", - "leaflet", - "MASS", - "rmarkdown", - "shiny", - "sparkline", - "testthat", - "tippy", - "V8" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1", - "Config/testthat/edition": "3", - "NeedsCompilation": "no", - "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]", - "Maintainer": "Greg Lin ", - "Repository": "CRAN" - }, - "readr": { - "Package": "readr", - "Version": "2.1.5", - "Source": "Repository", - "Title": "Read Rectangular Text Data", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Romain\", \"Francois\", role = \"ctb\"), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Shelby\", \"Bearrows\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"https://github.com/mandreyel/\", role = \"cph\", comment = \"mio library\"), person(\"Jukka\", \"Jylänki\", role = c(\"ctb\", \"cph\"), comment = \"grisu3 implementation\"), person(\"Mikkel\", \"Jørgensen\", role = c(\"ctb\", \"cph\"), comment = \"grisu3 implementation\") )", - "Description": "The goal of 'readr' is to provide a fast and friendly way to read rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed to flexibly parse many types of data found in the wild, while still cleanly failing when data unexpectedly changes.", - "License": "MIT + file LICENSE", - "URL": "https://readr.tidyverse.org, https://github.com/tidyverse/readr", - "BugReports": "https://github.com/tidyverse/readr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.2.0)", - "clipr", - "crayon", - "hms (>= 0.4.1)", - "lifecycle (>= 0.2.0)", - "methods", - "R6", - "rlang", - "tibble", - "utils", - "vroom (>= 1.6.0)" - ], - "Suggests": [ - "covr", - "curl", - "datasets", - "knitr", - "rmarkdown", - "spelling", - "stringi", - "testthat (>= 3.2.0)", - "tzdb (>= 0.1.1)", - "waldo", - "withr", - "xml2" - ], - "LinkingTo": [ - "cpp11", - "tzdb (>= 0.1.1)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Jim Hester [aut], Romain Francois [ctb], Jennifer Bryan [aut, cre] (), Shelby Bearrows [ctb], Posit Software, PBC [cph, fnd], https://github.com/mandreyel/ [cph] (mio library), Jukka Jylänki [ctb, cph] (grisu3 implementation), Mikkel Jørgensen [ctb, cph] (grisu3 implementation)", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "readxl": { - "Package": "readxl", - "Version": "1.4.5", - "Source": "Repository", - "Title": "Read Excel Files", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Posit, PBC\", role = c(\"cph\", \"fnd\"), comment = \"Copyright holder of all R code and all C/C++ code without explicit copyright attribution\"), person(\"Marcin\", \"Kalicinski\", role = c(\"ctb\", \"cph\"), comment = \"Author of included RapidXML code\"), person(\"Komarov Valery\", role = c(\"ctb\", \"cph\"), comment = \"Author of included libxls code\"), person(\"Christophe Leitienne\", role = c(\"ctb\", \"cph\"), comment = \"Author of included libxls code\"), person(\"Bob Colbert\", role = c(\"ctb\", \"cph\"), comment = \"Author of included libxls code\"), person(\"David Hoerl\", role = c(\"ctb\", \"cph\"), comment = \"Author of included libxls code\"), person(\"Evan Miller\", role = c(\"ctb\", \"cph\"), comment = \"Author of included libxls code\") )", - "Description": "Import excel files into R. Supports '.xls' via the embedded 'libxls' C library and '.xlsx' via the embedded 'RapidXML' C++ library . Works on Windows, Mac and Linux without external dependencies.", - "License": "MIT + file LICENSE", - "URL": "https://readxl.tidyverse.org, https://github.com/tidyverse/readxl", - "BugReports": "https://github.com/tidyverse/readxl/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cellranger", - "tibble (>= 2.0.1)", - "utils" - ], - "Suggests": [ - "covr", - "knitr", - "rmarkdown", - "testthat (>= 3.1.6)", - "withr" - ], - "LinkingTo": [ - "cpp11 (>= 0.4.0)", - "progress" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate, tidyverse", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Note": "libxls v1.6.3 c199d13", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut] (), Jennifer Bryan [aut, cre] (), Posit, PBC [cph, fnd] (Copyright holder of all R code and all C/C++ code without explicit copyright attribution), Marcin Kalicinski [ctb, cph] (Author of included RapidXML code), Komarov Valery [ctb, cph] (Author of included libxls code), Christophe Leitienne [ctb, cph] (Author of included libxls code), Bob Colbert [ctb, cph] (Author of included libxls code), David Hoerl [ctb, cph] (Author of included libxls code), Evan Miller [ctb, cph] (Author of included libxls code)", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "rematch": { - "Package": "rematch", - "Version": "2.0.0", - "Source": "Repository", - "Title": "Match Regular Expressions with a Nicer 'API'", - "Author": "Gabor Csardi", - "Maintainer": "Gabor Csardi ", - "Description": "A small wrapper on 'regexpr' to extract the matches and captured groups from the match of a regular expression to a character vector.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/gaborcsardi/rematch", - "BugReports": "https://github.com/gaborcsardi/rematch/issues", - "RoxygenNote": "5.0.1.9000", - "Suggests": [ - "covr", - "testthat" - ], - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "remotes": { - "Package": "remotes", - "Version": "2.5.0", - "Source": "Repository", - "Title": "R Package Installation from Remote Repositories, Including 'GitHub'", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Martin\", \"Morgan\", role = \"aut\"), person(\"Dan\", \"Tenenbaum\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Ascent Digital Services\", role = \"cph\") )", - "Description": "Download and install R packages stored in 'GitHub', 'GitLab', 'Bitbucket', 'Bioconductor', or plain 'subversion' or 'git' repositories. This package provides the 'install_*' functions in 'devtools'. Indeed most of the code was copied over from 'devtools'.", - "License": "MIT + file LICENSE", - "URL": "https://remotes.r-lib.org, https://github.com/r-lib/remotes#readme", - "BugReports": "https://github.com/r-lib/remotes/issues", - "Depends": [ - "R (>= 3.0.0)" - ], - "Imports": [ - "methods", - "stats", - "tools", - "utils" - ], - "Suggests": [ - "brew", - "callr", - "codetools", - "covr", - "curl", - "git2r (>= 0.23.0)", - "knitr", - "mockery", - "pingr", - "pkgbuild (>= 1.0.1)", - "rmarkdown", - "rprojroot", - "testthat (>= 3.0.0)", - "webfakes", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "SystemRequirements": "Subversion for install_svn, git for install_git", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Jim Hester [aut], Hadley Wickham [aut], Winston Chang [aut], Martin Morgan [aut], Dan Tenenbaum [aut], Posit Software, PBC [cph, fnd], Ascent Digital Services [cph]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "renv": { - "Package": "renv", - "Version": "1.1.4", - "Source": "Repository", - "Type": "Package", - "Title": "Project Environments", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\", comment = c(ORCID = \"0000-0003-2880-7407\")), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@rstudio.com\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A dependency management toolkit for R. Using 'renv', you can create and manage project-local R libraries, save the state of these libraries to a 'lockfile', and later restore your library as required. Together, these tools can help make your projects more isolated, portable, and reproducible.", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/renv/, https://github.com/rstudio/renv", - "BugReports": "https://github.com/rstudio/renv/issues", - "Imports": [ - "utils" - ], - "Suggests": [ - "BiocManager", - "cli", - "compiler", - "covr", - "cpp11", - "devtools", - "gitcreds", - "jsonlite", - "jsonvalidate", - "knitr", - "miniUI", - "modules", - "packrat", - "pak", - "R6", - "remotes", - "reticulate", - "rmarkdown", - "rstudioapi", - "shiny", - "testthat", - "uuid", - "waldo", - "yaml", - "webfakes" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "bioconductor,python,install,restore,snapshot,retrieve,remotes", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre] (), Hadley Wickham [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Kevin Ushey ", - "Repository": "CRAN" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.6", - "Source": "Repository", - "Title": "Functions for Base Types and Core R and 'Tidyverse' Features", - "Description": "A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.", - "Authors@R": "c( person(\"Lionel\", \"Henry\", ,\"lionel@posit.co\", c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", ,\"hadley@posit.co\", \"aut\"), person(given = \"mikefc\", email = \"mikefc@coolbutuseless.com\", role = \"cph\", comment = \"Hash implementation based on Mike's xxhashlite\"), person(given = \"Yann\", family = \"Collet\", role = \"cph\", comment = \"Author of the embedded xxHash library\"), person(given = \"Posit, PBC\", role = c(\"cph\", \"fnd\")) )", - "License": "MIT + file LICENSE", - "ByteCompile": "true", - "Biarch": "true", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "utils" - ], - "Suggests": [ - "cli (>= 3.1.0)", - "covr", - "crayon", - "desc", - "fs", - "glue", - "knitr", - "magrittr", - "methods", - "pillar", - "pkgload", - "rmarkdown", - "stats", - "testthat (>= 3.2.0)", - "tibble", - "usethis", - "vctrs (>= 0.2.3)", - "withr" - ], - "Enhances": [ - "winch" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "URL": "https://rlang.r-lib.org, https://github.com/r-lib/rlang", - "BugReports": "https://github.com/r-lib/rlang/issues", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "dplyr, tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], mikefc [cph] (Hash implementation based on Mike's xxhashlite), Yann Collet [cph] (Author of the embedded xxHash library), Posit, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.29", - "Source": "Repository", - "Type": "Package", - "Title": "Dynamic Documents for R", - "Authors@R": "c( person(\"JJ\", \"Allaire\", , \"jj@posit.co\", role = \"aut\"), person(\"Yihui\", \"Xie\", , \"xie@yihui.name\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0003-0645-5666\")), person(\"Christophe\", \"Dervieux\", , \"cderv@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Jonathan\", \"McPherson\", , \"jonathan@posit.co\", role = \"aut\"), person(\"Javier\", \"Luraschi\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"aut\"), person(\"Aron\", \"Atkins\", , \"aron@posit.co\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Joe\", \"Cheng\", , \"joe@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", , \"winston@posit.co\", role = \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Andrew\", \"Dunning\", role = \"ctb\", comment = c(ORCID = \"0000-0003-0464-5036\")), person(\"Atsushi\", \"Yasumoto\", role = c(\"ctb\", \"cph\"), comment = c(ORCID = \"0000-0002-8335-495X\", cph = \"Number sections Lua filter\")), person(\"Barret\", \"Schloerke\", role = \"ctb\"), person(\"Carson\", \"Sievert\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Devon\", \"Ryan\", , \"dpryan79@gmail.com\", role = \"ctb\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Frederik\", \"Aust\", , \"frederik.aust@uni-koeln.de\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4900-788X\")), person(\"Jeff\", \"Allen\", , \"jeff@posit.co\", role = \"ctb\"), person(\"JooYoung\", \"Seo\", role = \"ctb\", comment = c(ORCID = \"0000-0002-4064-6012\")), person(\"Malcolm\", \"Barrett\", role = \"ctb\"), person(\"Rob\", \"Hyndman\", , \"Rob.Hyndman@monash.edu\", role = \"ctb\"), person(\"Romain\", \"Lesur\", role = \"ctb\"), person(\"Roy\", \"Storey\", role = \"ctb\"), person(\"Ruben\", \"Arslan\", , \"ruben.arslan@uni-goettingen.de\", role = \"ctb\"), person(\"Sergio\", \"Oller\", role = \"ctb\"), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(, \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/rmd/h/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(, \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Alexander\", \"Farkas\", role = c(\"ctb\", \"cph\"), comment = \"html5shiv library\"), person(\"Scott\", \"Jehl\", role = c(\"ctb\", \"cph\"), comment = \"Respond.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(\"Greg\", \"Franko\", role = c(\"ctb\", \"cph\"), comment = \"tocify library\"), person(\"John\", \"MacFarlane\", role = c(\"ctb\", \"cph\"), comment = \"Pandoc templates\"), person(, \"Google, Inc.\", role = c(\"ctb\", \"cph\"), comment = \"ioslides library\"), person(\"Dave\", \"Raggett\", role = \"ctb\", comment = \"slidy library\"), person(, \"W3C\", role = \"cph\", comment = \"slidy library\"), person(\"Dave\", \"Gandy\", role = c(\"ctb\", \"cph\"), comment = \"Font-Awesome\"), person(\"Ben\", \"Sperry\", role = \"ctb\", comment = \"Ionicons\"), person(, \"Drifty\", role = \"cph\", comment = \"Ionicons\"), person(\"Aidan\", \"Lister\", role = c(\"ctb\", \"cph\"), comment = \"jQuery StickyTabs\"), person(\"Benct Philip\", \"Jonsson\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\"), person(\"Albert\", \"Krewinkel\", role = c(\"ctb\", \"cph\"), comment = \"pagebreak Lua filter\") )", - "Description": "Convert R Markdown documents into a variety of formats.", - "License": "GPL-3", - "URL": "https://github.com/rstudio/rmarkdown, https://pkgs.rstudio.com/rmarkdown/", - "BugReports": "https://github.com/rstudio/rmarkdown/issues", - "Depends": [ - "R (>= 3.0)" - ], - "Imports": [ - "bslib (>= 0.2.5.1)", - "evaluate (>= 0.13)", - "fontawesome (>= 0.5.0)", - "htmltools (>= 0.5.1)", - "jquerylib", - "jsonlite", - "knitr (>= 1.43)", - "methods", - "tinytex (>= 0.31)", - "tools", - "utils", - "xfun (>= 0.36)", - "yaml (>= 2.1.19)" - ], - "Suggests": [ - "digest", - "dygraphs", - "fs", - "rsconnect", - "downlit (>= 0.4.0)", - "katex (>= 1.4.0)", - "sass (>= 0.4.0)", - "shiny (>= 1.6.0)", - "testthat (>= 3.0.3)", - "tibble", - "vctrs", - "cleanrmd", - "withr (>= 2.4.2)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "rstudio/quillt, pkgdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "pandoc (>= 1.14) - http://pandoc.org", - "NeedsCompilation": "no", - "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)", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "roxygen2": { - "Package": "roxygen2", - "Version": "7.3.2", - "Source": "Repository", - "Title": "In-Line Documentation for R", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\"), comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Peter\", \"Danenberg\", , \"pcd@roxygen.org\", role = c(\"aut\", \"cph\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"aut\"), person(\"Manuel\", \"Eugster\", role = c(\"aut\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Generate your Rd documentation, 'NAMESPACE' file, and collation field using specially formatted comments. Writing documentation in-line with code makes it easier to keep your documentation up-to-date as your requirements change. 'roxygen2' is inspired by the 'Doxygen' system for C++.", - "License": "MIT + file LICENSE", - "URL": "https://roxygen2.r-lib.org/, https://github.com/r-lib/roxygen2", - "BugReports": "https://github.com/r-lib/roxygen2/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "brew", - "cli (>= 3.3.0)", - "commonmark", - "desc (>= 1.2.0)", - "knitr", - "methods", - "pkgload (>= 1.0.2)", - "purrr (>= 1.0.0)", - "R6 (>= 2.1.2)", - "rlang (>= 1.0.6)", - "stringi", - "stringr (>= 1.0.0)", - "utils", - "withr", - "xml2" - ], - "Suggests": [ - "covr", - "R.methodsS3", - "R.oo", - "rmarkdown (>= 2.16)", - "testthat (>= 3.1.2)", - "yaml" - ], - "LinkingTo": [ - "cpp11" - ], - "VignetteBuilder": "knitr", - "Config/Needs/development": "testthat", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Encoding": "UTF-8", - "Language": "en-GB", - "RoxygenNote": "7.3.1.9000", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre, cph] (), Peter Danenberg [aut, cph], Gábor Csárdi [aut], Manuel Eugster [aut, cph], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.1.0", - "Source": "Repository", - "Title": "Finding Files in Project Subdirectories", - "Authors@R": "person(given = \"Kirill\", family = \"M\\u00fcller\", role = c(\"aut\", \"cre\"), email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\"))", - "Description": "Robust, reliable and flexible paths to files below a project root. The 'root' of a project is defined as a directory that matches a certain criterion, e.g., it contains a certain regular file.", - "License": "MIT + file LICENSE", - "URL": "https://rprojroot.r-lib.org/, https://github.com/r-lib/rprojroot", - "BugReports": "https://github.com/r-lib/rprojroot/issues", - "Depends": [ - "R (>= 3.0.0)" - ], - "Suggests": [ - "covr", - "knitr", - "lifecycle", - "rlang", - "rmarkdown", - "testthat (>= 3.2.0)", - "withr" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "no", - "Author": "Kirill Müller [aut, cre] (ORCID: )", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.17.1", - "Source": "Repository", - "Title": "Safely Access the RStudio API", - "Description": "Access the RStudio API (if available) and provide informative error messages when it's not.", - "Authors@R": "c( person(\"Kevin\", \"Ushey\", role = c(\"aut\", \"cre\"), email = \"kevin@rstudio.com\"), person(\"JJ\", \"Allaire\", role = c(\"aut\"), email = \"jj@posit.co\"), person(\"Hadley\", \"Wickham\", role = c(\"aut\"), email = \"hadley@posit.co\"), person(\"Gary\", \"Ritchie\", role = c(\"aut\"), email = \"gary@posit.co\"), person(family = \"RStudio\", role = \"cph\") )", - "Maintainer": "Kevin Ushey ", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/rstudioapi/, https://github.com/rstudio/rstudioapi", - "BugReports": "https://github.com/rstudio/rstudioapi/issues", - "RoxygenNote": "7.3.2", - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "clipr", - "covr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "NeedsCompilation": "no", - "Author": "Kevin Ushey [aut, cre], JJ Allaire [aut], Hadley Wickham [aut], Gary Ritchie [aut], RStudio [cph]", - "Repository": "CRAN" - }, - "rversions": { - "Package": "rversions", - "Version": "2.1.2", - "Source": "Repository", - "Title": "Query 'R' Versions, Including 'r-release' and 'r-oldrel'", - "Authors@R": "c(person(given = \"Gábor\", family = \"Csárdi\", role = c(\"aut\", \"cre\"), email = \"csardi.gabor@gmail.com\"), person(given = \"Jeroen\", family = \"Ooms\", role = \"ctb\", email = \"jeroen.ooms@stat.ucla.edu\"), person(given = \"R Consortium\", role = \"fnd\"))", - "Description": "Query the main 'R' 'SVN' repository to find the versions 'r-release' and 'r-oldrel' refer to, and also all previous 'R' versions and their release dates.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-hub/rversions, https://r-hub.github.io/rversions/", - "BugReports": "https://github.com/r-hub/rversions/issues", - "Imports": [ - "curl", - "utils", - "xml2 (>= 1.0.0)" - ], - "Suggests": [ - "covr", - "mockery", - "testthat" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.2.1.9000", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Jeroen Ooms [ctb], R Consortium [fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "sass": { - "Package": "sass", - "Version": "0.4.10", - "Source": "Repository", - "Type": "Package", - "Title": "Syntactically Awesome Style Sheets ('Sass')", - "Description": "An 'SCSS' compiler, powered by the 'LibSass' library. With this, R developers can use variables, inheritance, and functions to generate dynamic style sheets. The package uses the 'Sass CSS' extension language, which is stable, powerful, and CSS compatible.", - "Authors@R": "c( person(\"Joe\", \"Cheng\", , \"joe@rstudio.com\", \"aut\"), person(\"Timothy\", \"Mastny\", , \"tim.mastny@gmail.com\", \"aut\"), person(\"Richard\", \"Iannone\", , \"rich@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0003-3925-190X\")), person(\"Barret\", \"Schloerke\", , \"barret@rstudio.com\", \"aut\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Carson\", \"Sievert\", , \"carson@rstudio.com\", c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Christophe\", \"Dervieux\", , \"cderv@rstudio.com\", c(\"ctb\"), comment = c(ORCID = \"0000-0003-4474-2498\")), person(family = \"RStudio\", role = c(\"cph\", \"fnd\")), person(family = \"Sass Open Source Foundation\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Greter\", \"Marcel\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Mifsud\", \"Michael\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Hampton\", \"Catlin\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Natalie\", \"Weizenbaum\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Chris\", \"Eppstein\", role = c(\"ctb\", \"cph\"), comment = \"LibSass library\"), person(\"Adams\", \"Joseph\", role = c(\"ctb\", \"cph\"), comment = \"json.cpp\"), person(\"Trifunovic\", \"Nemanja\", role = c(\"ctb\", \"cph\"), comment = \"utf8.h\") )", - "License": "MIT + file LICENSE", - "URL": "https://rstudio.github.io/sass/, https://github.com/rstudio/sass", - "BugReports": "https://github.com/rstudio/sass/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "GNU make", - "Imports": [ - "fs (>= 1.2.4)", - "rlang (>= 0.4.10)", - "htmltools (>= 0.5.1)", - "R6", - "rappdirs" - ], - "Suggests": [ - "testthat", - "knitr", - "rmarkdown", - "withr", - "shiny", - "curl" - ], - "VignetteBuilder": "knitr", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "Author": "Joe Cheng [aut], Timothy Mastny [aut], Richard Iannone [aut] (), Barret Schloerke [aut] (), Carson Sievert [aut, cre] (), Christophe Dervieux [ctb] (), RStudio [cph, fnd], Sass Open Source Foundation [ctb, cph] (LibSass library), Greter Marcel [ctb, cph] (LibSass library), Mifsud Michael [ctb, cph] (LibSass library), Hampton Catlin [ctb, cph] (LibSass library), Natalie Weizenbaum [ctb, cph] (LibSass library), Chris Eppstein [ctb, cph] (LibSass library), Adams Joseph [ctb, cph] (json.cpp), Trifunovic Nemanja [ctb, cph] (utf8.h)", - "Maintainer": "Carson Sievert ", - "Repository": "CRAN" - }, - "scales": { - "Package": "scales", - "Version": "1.4.0", - "Source": "Repository", - "Title": "Scale Functions for Visualization", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Dana\", \"Seidel\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.", - "License": "MIT + file LICENSE", - "URL": "https://scales.r-lib.org, https://github.com/r-lib/scales", - "BugReports": "https://github.com/r-lib/scales/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "cli", - "farver (>= 2.0.3)", - "glue", - "labeling", - "lifecycle", - "R6", - "RColorBrewer", - "rlang (>= 1.1.0)", - "viridisLite" - ], - "Suggests": [ - "bit64", - "covr", - "dichromat", - "ggplot2", - "hms (>= 0.5.0)", - "stringi", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "LazyLoad": "yes", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut], Thomas Lin Pedersen [cre, aut] (), Dana Seidel [aut], Posit Software, PBC [cph, fnd] (03wc8by49)", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "sessioninfo": { - "Package": "sessioninfo", - "Version": "1.2.3", - "Source": "Repository", - "Title": "R Session Information", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"cre\"), person(\"Hadley\", \"Wickham\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Robert\", \"Flight\", role = \"aut\"), person(\"Kirill\", \"Müller\", role = \"aut\"), person(\"Jim\", \"Hester\", role = \"aut\"), person(\"R Core team\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Maintainer": "Gábor Csárdi ", - "Description": "Query and print information about the current R session. It is similar to 'utils::sessionInfo()', but includes more information about packages, and where they were installed from.", - "License": "GPL-2", - "URL": "https://github.com/r-lib/sessioninfo#readme, https://sessioninfo.r-lib.org", - "BugReports": "https://github.com/r-lib/sessioninfo/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli (>= 3.1.0)", - "tools", - "utils" - ], - "Suggests": [ - "callr", - "covr", - "gh", - "reticulate", - "rmarkdown", - "testthat (>= 3.2.0)", - "withr" - ], - "Config/Needs/website": "pkgdown, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [cre], Hadley Wickham [aut], Winston Chang [aut], Robert Flight [aut], Kirill Müller [aut], Jim Hester [aut], R Core team [ctb], Posit Software, PBC [cph, fnd]", - "Repository": "CRAN" - }, - "shiny": { - "Package": "shiny", - "Version": "1.11.0", - "Source": "Repository", - "Type": "Package", - "Title": "Web Application Framework for R", - "Authors@R": "c( person(\"Winston\", \"Chang\", role = c(\"aut\", \"cre\"), email = \"winston@posit.co\", comment = c(ORCID = \"0000-0002-1576-2126\")), person(\"Joe\", \"Cheng\", role = \"aut\", email = \"joe@posit.co\"), person(\"JJ\", \"Allaire\", role = \"aut\", email = \"jj@posit.co\"), person(\"Carson\", \"Sievert\", role = \"aut\", email = \"carson@posit.co\", comment = c(ORCID = \"0000-0002-4958-2844\")), person(\"Barret\", \"Schloerke\", role = \"aut\", email = \"barret@posit.co\", comment = c(ORCID = \"0000-0001-9986-114X\")), person(\"Yihui\", \"Xie\", role = \"aut\", email = \"yihui@posit.co\"), person(\"Jeff\", \"Allen\", role = \"aut\"), person(\"Jonathan\", \"McPherson\", role = \"aut\", email = \"jonathan@posit.co\"), person(\"Alan\", \"Dipert\", role = \"aut\"), person(\"Barbara\", \"Borges\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), 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/www/shared/jquery-AUTHORS.txt\"), person(family = \"jQuery UI contributors\", role = c(\"ctb\", \"cph\"), comment = \"jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt\"), person(\"Mark\", \"Otto\", role = \"ctb\", comment = \"Bootstrap library\"), person(\"Jacob\", \"Thornton\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Bootstrap contributors\", role = \"ctb\", comment = \"Bootstrap library\"), person(family = \"Twitter, Inc\", role = \"cph\", comment = \"Bootstrap library\"), person(\"Prem Nawaz\", \"Khan\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Victor\", \"Tsaran\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Dennis\", \"Lembree\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Srinivasu\", \"Chakravarthula\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(\"Cathy\", \"O'Connor\", role = \"ctb\", comment = \"Bootstrap accessibility plugin\"), person(family = \"PayPal, Inc\", role = \"cph\", comment = \"Bootstrap accessibility plugin\"), person(\"Stefan\", \"Petre\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Andrew\", \"Rowls\", role = c(\"ctb\", \"cph\"), comment = \"Bootstrap-datepicker library\"), person(\"Brian\", \"Reavis\", role = c(\"ctb\", \"cph\"), comment = \"selectize.js library\"), person(\"Salmen\", \"Bejaoui\", role = c(\"ctb\", \"cph\"), comment = \"selectize-plugin-a11y library\"), person(\"Denis\", \"Ineshin\", role = c(\"ctb\", \"cph\"), comment = \"ion.rangeSlider library\"), person(\"Sami\", \"Samhuri\", role = c(\"ctb\", \"cph\"), comment = \"Javascript strftime library\"), person(family = \"SpryMedia Limited\", role = c(\"ctb\", \"cph\"), comment = \"DataTables library\"), person(\"John\", \"Fraser\", role = c(\"ctb\", \"cph\"), comment = \"showdown.js library\"), person(\"John\", \"Gruber\", role = c(\"ctb\", \"cph\"), comment = \"showdown.js library\"), person(\"Ivan\", \"Sagalaev\", role = c(\"ctb\", \"cph\"), comment = \"highlight.js library\"), person(given = \"R Core Team\", role = c(\"ctb\", \"cph\"), comment = \"tar implementation from R\") )", - "Description": "Makes it incredibly easy to build interactive web applications with R. Automatic \"reactive\" binding between inputs and outputs and extensive prebuilt widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.", - "License": "GPL-3 | file LICENSE", - "Depends": [ - "R (>= 3.0.2)", - "methods" - ], - "Imports": [ - "utils", - "grDevices", - "httpuv (>= 1.5.2)", - "mime (>= 0.3)", - "jsonlite (>= 0.9.16)", - "xtable", - "fontawesome (>= 0.4.0)", - "htmltools (>= 0.5.4)", - "R6 (>= 2.0)", - "sourcetools", - "later (>= 1.0.0)", - "promises (>= 1.3.2)", - "tools", - "cli", - "rlang (>= 0.4.10)", - "fastmap (>= 1.1.1)", - "withr", - "commonmark (>= 1.7)", - "glue (>= 1.3.2)", - "bslib (>= 0.6.0)", - "cachem (>= 1.1.0)", - "lifecycle (>= 0.2.0)" - ], - "Suggests": [ - "coro (>= 1.1.0)", - "datasets", - "DT", - "Cairo (>= 1.5-5)", - "testthat (>= 3.2.1)", - "knitr (>= 1.6)", - "markdown", - "rmarkdown", - "ggplot2", - "reactlog (>= 1.0.0)", - "magrittr", - "yaml", - "mirai", - "future", - "dygraphs", - "ragg", - "showtext", - "sass", - "watcher" - ], - "URL": "https://shiny.posit.co/, https://github.com/rstudio/shiny", - "BugReports": "https://github.com/rstudio/shiny/issues", - "Collate": "'globals.R' 'app-state.R' 'app_template.R' 'bind-cache.R' 'bind-event.R' 'bookmark-state-local.R' 'bookmark-state.R' 'bootstrap-deprecated.R' 'bootstrap-layout.R' 'conditions.R' 'map.R' 'utils.R' 'bootstrap.R' 'busy-indicators-spinners.R' 'busy-indicators.R' 'cache-utils.R' 'deprecated.R' 'devmode.R' 'diagnose.R' 'extended-task.R' 'fileupload.R' 'graph.R' 'reactives.R' 'reactive-domains.R' 'history.R' 'hooks.R' 'html-deps.R' 'image-interact-opts.R' 'image-interact.R' 'imageutils.R' 'input-action.R' 'input-checkbox.R' 'input-checkboxgroup.R' 'input-date.R' 'input-daterange.R' 'input-file.R' 'input-numeric.R' 'input-password.R' 'input-radiobuttons.R' 'input-select.R' 'input-slider.R' 'input-submit.R' 'input-text.R' 'input-textarea.R' 'input-utils.R' 'insert-tab.R' 'insert-ui.R' 'jqueryui.R' 'knitr.R' 'middleware-shiny.R' 'middleware.R' 'timer.R' 'shiny.R' 'mock-session.R' 'modal.R' 'modules.R' 'notifications.R' 'priorityqueue.R' 'progress.R' 'react.R' 'reexports.R' 'render-cached-plot.R' 'render-plot.R' 'render-table.R' 'run-url.R' 'runapp.R' 'serializers.R' 'server-input-handlers.R' 'server-resource-paths.R' 'server.R' 'shiny-options.R' 'shiny-package.R' 'shinyapp.R' 'shinyui.R' 'shinywrappers.R' 'showcase.R' 'snapshot.R' 'staticimports.R' 'tar.R' 'test-export.R' 'test-server.R' 'test.R' 'update-input.R' 'utils-lang.R' 'version_bs_date_picker.R' 'version_ion_range_slider.R' 'version_jquery.R' 'version_jqueryui.R' 'version_selectize.R' 'version_strftime.R' 'viewer.R'", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "Config/testthat/edition": "3", - "Config/Needs/check": "shinytest2", - "NeedsCompilation": "no", - "Author": "Winston Chang [aut, cre] (ORCID: ), Joe Cheng [aut], JJ Allaire [aut], Carson Sievert [aut] (ORCID: ), Barret Schloerke [aut] (ORCID: ), Yihui Xie [aut], Jeff Allen [aut], Jonathan McPherson [aut], Alan Dipert [aut], Barbara Borges [aut], Posit Software, PBC [cph, fnd], jQuery Foundation [cph] (jQuery library and jQuery UI library), jQuery contributors [ctb, cph] (jQuery library; authors listed in inst/www/shared/jquery-AUTHORS.txt), jQuery UI contributors [ctb, cph] (jQuery UI library; authors listed in inst/www/shared/jqueryui/AUTHORS.txt), Mark Otto [ctb] (Bootstrap library), Jacob Thornton [ctb] (Bootstrap library), Bootstrap contributors [ctb] (Bootstrap library), Twitter, Inc [cph] (Bootstrap library), Prem Nawaz Khan [ctb] (Bootstrap accessibility plugin), Victor Tsaran [ctb] (Bootstrap accessibility plugin), Dennis Lembree [ctb] (Bootstrap accessibility plugin), Srinivasu Chakravarthula [ctb] (Bootstrap accessibility plugin), Cathy O'Connor [ctb] (Bootstrap accessibility plugin), PayPal, Inc [cph] (Bootstrap accessibility plugin), Stefan Petre [ctb, cph] (Bootstrap-datepicker library), Andrew Rowls [ctb, cph] (Bootstrap-datepicker library), Brian Reavis [ctb, cph] (selectize.js library), Salmen Bejaoui [ctb, cph] (selectize-plugin-a11y library), Denis Ineshin [ctb, cph] (ion.rangeSlider library), Sami Samhuri [ctb, cph] (Javascript strftime library), SpryMedia Limited [ctb, cph] (DataTables library), John Fraser [ctb, cph] (showdown.js library), John Gruber [ctb, cph] (showdown.js library), Ivan Sagalaev [ctb, cph] (highlight.js library), R Core Team [ctb, cph] (tar implementation from R)", - "Maintainer": "Winston Chang ", - "Repository": "CRAN" - }, - "snakecase": { - "Package": "snakecase", - "Version": "0.11.1", - "Source": "Repository", - "Date": "2023-08-27", - "Title": "Convert Strings into any Case", - "Description": "A consistent, flexible and easy to use tool to parse and convert strings into cases like snake or camel among others.", - "Authors@R": "c( person(\"Malte\", \"Grosser\", , \"malte.grosser@gmail.com\", role = c(\"aut\", \"cre\")))", - "Maintainer": "Malte Grosser ", - "Depends": [ - "R (>= 3.2)" - ], - "Imports": [ - "stringr", - "stringi" - ], - "Suggests": [ - "testthat", - "covr", - "tibble", - "purrrlyr", - "knitr", - "rmarkdown", - "magrittr" - ], - "URL": "https://github.com/Tazinho/snakecase", - "BugReports": "https://github.com/Tazinho/snakecase/issues", - "Encoding": "UTF-8", - "License": "GPL-3", - "RoxygenNote": "6.1.1", - "VignetteBuilder": "knitr", - "NeedsCompilation": "no", - "Author": "Malte Grosser [aut, cre]", - "Repository": "CRAN" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-1", - "Source": "Repository", - "Type": "Package", - "Title": "Tools for Reading, Tokenizing and Parsing R Code", - "Author": "Kevin Ushey", - "Maintainer": "Kevin Ushey ", - "Description": "Tools for the reading and tokenization of R code. The 'sourcetools' package provides both an R and C++ interface for the tokenization of R code, and helpers for interacting with the tokenized representation of R code.", - "License": "MIT + file LICENSE", - "Depends": [ - "R (>= 3.0.2)" - ], - "Suggests": [ - "testthat" - ], - "RoxygenNote": "5.0.1", - "BugReports": "https://github.com/kevinushey/sourcetools/issues", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "stringi": { - "Package": "stringi", - "Version": "1.8.7", - "Source": "Repository", - "Date": "2025-03-27", - "Title": "Fast and Portable Character String Processing Facilities", - "Description": "A collection of character string/text/natural language processing tools for pattern searching (e.g., with 'Java'-like regular expressions or the 'Unicode' collation algorithm), random string generation, case mapping, string transliteration, concatenation, sorting, padding, wrapping, Unicode normalisation, date-time formatting and parsing, and many more. They are fast, consistent, convenient, and - thanks to 'ICU' (International Components for Unicode) - portable across all locales and platforms. Documentation about 'stringi' is provided via its website at and the paper by Gagolewski (2022, ).", - "URL": "https://stringi.gagolewski.com/, https://github.com/gagolews/stringi, https://icu.unicode.org/", - "BugReports": "https://github.com/gagolews/stringi/issues", - "SystemRequirements": "ICU4C (>= 61, optional)", - "Type": "Package", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "tools", - "utils", - "stats" - ], - "Biarch": "TRUE", - "License": "file LICENSE", - "Authors@R": "c(person(given = \"Marek\", family = \"Gagolewski\", role = c(\"aut\", \"cre\", \"cph\"), email = \"marek@gagolewski.com\", comment = c(ORCID = \"0000-0003-0637-6028\")), person(given = \"Bartek\", family = \"Tartanus\", role = \"ctb\"), person(\"Unicode, Inc. and others\", role=\"ctb\", comment = \"ICU4C source code, Unicode Character Database\") )", - "RoxygenNote": "7.3.2", - "Encoding": "UTF-8", - "NeedsCompilation": "yes", - "Author": "Marek Gagolewski [aut, cre, cph] (), Bartek Tartanus [ctb], Unicode, Inc. and others [ctb] (ICU4C source code, Unicode Character Database)", - "Maintainer": "Marek Gagolewski ", - "License_is_FOSS": "yes", - "Repository": "CRAN" - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.1", - "Source": "Repository", - "Title": "Simple, Consistent Wrappers for Common String Operations", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\", \"cph\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with \"NA\"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.", - "License": "MIT + file LICENSE", - "URL": "https://stringr.tidyverse.org, https://github.com/tidyverse/stringr", - "BugReports": "https://github.com/tidyverse/stringr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli", - "glue (>= 1.6.1)", - "lifecycle (>= 1.0.3)", - "magrittr", - "rlang (>= 1.0.0)", - "stringi (>= 1.5.3)", - "vctrs (>= 0.4.0)" - ], - "Suggests": [ - "covr", - "dplyr", - "gt", - "htmltools", - "htmlwidgets", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre, cph], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "svglite": { - "Package": "svglite", - "Version": "2.2.1", - "Source": "Repository", - "Title": "An 'SVG' Graphics Device", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"T Jake\", \"Luciani\", , \"jake@apache.org\", role = \"aut\"), person(\"Matthieu\", \"Decorde\", , \"matthieu.decorde@ens-lyon.fr\", role = \"aut\"), person(\"Vaudor\", \"Lise\", , \"lise.vaudor@ens-lyon.fr\", role = \"aut\"), person(\"Tony\", \"Plate\", role = \"ctb\", comment = \"Early line dashing code\"), person(\"David\", \"Gohel\", role = \"ctb\", comment = \"Line dashing code and early raster code\"), person(\"Yixuan\", \"Qiu\", role = \"ctb\", comment = \"Improved styles; polypath implementation\"), person(\"Håkon\", \"Malmedal\", role = \"ctb\", comment = \"Opacity code\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "A graphics device for R that produces 'Scalable Vector Graphics'. 'svglite' is a fork of the older 'RSvgDevice' package.", - "License": "GPL (>= 2)", - "URL": "https://svglite.r-lib.org, https://github.com/r-lib/svglite", - "BugReports": "https://github.com/r-lib/svglite/issues", - "Depends": [ - "R (>= 4.1)" - ], - "Imports": [ - "base64enc", - "cli", - "lifecycle", - "rlang (>= 1.1.0)", - "systemfonts (>= 1.2.3)", - "textshaping (>= 0.3.0)" - ], - "Suggests": [ - "covr", - "fontquiver (>= 0.2.0)", - "htmltools", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)", - "xml2 (>= 1.0.0)" - ], - "LinkingTo": [ - "cpp11", - "systemfonts", - "textshaping" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-25", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "libpng", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Lionel Henry [aut], Thomas Lin Pedersen [cre, aut] (ORCID: ), T Jake Luciani [aut], Matthieu Decorde [aut], Vaudor Lise [aut], Tony Plate [ctb] (Early line dashing code), David Gohel [ctb] (Line dashing code and early raster code), Yixuan Qiu [ctb] (Improved styles; polypath implementation), Håkon Malmedal [ctb] (Opacity code), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "sys": { - "Package": "sys", - "Version": "3.4.3", - "Source": "Repository", - "Type": "Package", - "Title": "Powerful and Reliable Tools for Running System Commands in R", - "Authors@R": "c(person(\"Jeroen\", \"Ooms\", role = c(\"aut\", \"cre\"), email = \"jeroenooms@gmail.com\", comment = c(ORCID = \"0000-0002-4035-0289\")), person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = \"ctb\"))", - "Description": "Drop-in replacements for the base system2() function with fine control and consistent behavior across platforms. Supports clean interruption, timeout, background tasks, and streaming STDIN / STDOUT / STDERR over binary or text connections. Arguments on Windows automatically get encoded and quoted to work on different locales.", - "License": "MIT + file LICENSE", - "URL": "https://jeroen.r-universe.dev/sys", - "BugReports": "https://github.com/jeroen/sys/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.1.1", - "Suggests": [ - "unix (>= 1.4)", - "spelling", - "testthat" - ], - "Language": "en-US", - "NeedsCompilation": "yes", - "Author": "Jeroen Ooms [aut, cre] (), Gábor Csárdi [ctb]", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.2.3", - "Source": "Repository", - "Type": "Package", - "Title": "System Native Font Finding", - "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 Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/systemfonts, https://systemfonts.r-lib.org", - "BugReports": "https://github.com/r-lib/systemfonts/issues", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "base64enc", - "grid", - "jsonlite", - "lifecycle", - "tools", - "utils" - ], - "Suggests": [ - "covr", - "farver", - "graphics", - "knitr", - "rmarkdown", - "testthat (>= 2.1.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.1)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "fontconfig, freetype2", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [aut, cre] (ORCID: ), Jeroen Ooms [aut] (ORCID: ), Devon Govett [aut] (Author of font-manager), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "testthat": { - "Package": "testthat", - "Version": "3.2.3", - "Source": "Repository", - "Title": "Unit Testing for R", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"R Core team\", role = \"ctb\", comment = \"Implementation of utils::recover()\") )", - "Description": "Software testing is important, but, in part because it is frustrating and boring, many of us avoid it. 'testthat' is a testing framework for R that is easy to learn and use, and integrates with your existing 'workflow'.", - "License": "MIT + file LICENSE", - "URL": "https://testthat.r-lib.org, https://github.com/r-lib/testthat", - "BugReports": "https://github.com/r-lib/testthat/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "brio (>= 1.1.3)", - "callr (>= 3.7.3)", - "cli (>= 3.6.1)", - "desc (>= 1.4.2)", - "digest (>= 0.6.33)", - "evaluate (>= 1.0.1)", - "jsonlite (>= 1.8.7)", - "lifecycle (>= 1.0.3)", - "magrittr (>= 2.0.3)", - "methods", - "pkgload (>= 1.3.2.1)", - "praise (>= 1.0.0)", - "processx (>= 3.8.2)", - "ps (>= 1.7.5)", - "R6 (>= 2.5.1)", - "rlang (>= 1.1.1)", - "utils", - "waldo (>= 0.6.0)", - "withr (>= 3.0.2)" - ], - "Suggests": [ - "covr", - "curl (>= 0.9.5)", - "diffviewer (>= 0.1.0)", - "knitr", - "rmarkdown", - "rstudioapi", - "S7", - "shiny", - "usethis", - "vctrs (>= 0.1.0)", - "xml2" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "watcher, parallel*", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd], R Core team [ctb] (Implementation of utils::recover())", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "textshaping": { - "Package": "textshaping", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Bindings to the 'HarfBuzz' and 'Fribidi' Libraries for Text Shaping", - "Authors@R": "c( person(\"Thomas Lin\", \"Pedersen\", , \"thomas.pedersen@posit.co\", role = c(\"cre\", \"aut\"), comment = c(ORCID = \"0000-0002-5147-4711\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/textshaping", - "BugReports": "https://github.com/r-lib/textshaping/issues", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "lifecycle", - "stats", - "stringi", - "systemfonts (>= 1.1.0)", - "utils" - ], - "Suggests": [ - "covr", - "grDevices", - "grid", - "knitr", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.1)", - "systemfonts (>= 1.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/build/compilation-database": "true", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-04-23", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "SystemRequirements": "freetype2, harfbuzz, fribidi", - "NeedsCompilation": "yes", - "Author": "Thomas Lin Pedersen [cre, aut] (ORCID: ), Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Thomas Lin Pedersen ", - "Repository": "CRAN" - }, - "tibble": { - "Package": "tibble", - "Version": "3.3.0", - "Source": "Repository", - "Title": "Simple Data Frames", - "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\")))", - "Description": "Provides a 'tbl_df' class (the 'tibble') with stricter checking and better formatting than the traditional data frame.", - "License": "MIT + file LICENSE", - "URL": "https://tibble.tidyverse.org/, https://github.com/tidyverse/tibble", - "BugReports": "https://github.com/tidyverse/tibble/issues", - "Depends": [ - "R (>= 3.4.0)" - ], - "Imports": [ - "cli", - "lifecycle (>= 1.0.0)", - "magrittr", - "methods", - "pillar (>= 1.8.1)", - "pkgconfig", - "rlang (>= 1.0.2)", - "utils", - "vctrs (>= 0.5.0)" - ], - "Suggests": [ - "bench", - "bit64", - "blob", - "brio", - "callr", - "DiagrammeR", - "dplyr", - "evaluate", - "formattable", - "ggplot2", - "here", - "hms", - "htmltools", - "knitr", - "lubridate", - "nycflights13", - "pkgload", - "purrr", - "rmarkdown", - "stringi", - "testthat (>= 3.0.2)", - "tidyr", - "withr" - ], - "VignetteBuilder": "knitr", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "true", - "Config/testthat/start-first": "vignette-formats, as_tibble, add, invariants", - "Config/autostyle/scope": "line_breaks", - "Config/autostyle/strict": "true", - "Config/autostyle/rmd": "false", - "Config/Needs/website": "tidyverse/tidytemplate", - "NeedsCompilation": "yes", - "Author": "Kirill Müller [aut, cre] (ORCID: ), Hadley Wickham [aut], Romain Francois [ctb], Jennifer Bryan [ctb], RStudio [cph, fnd]", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.3.1", - "Source": "Repository", - "Title": "Tidy Messy Data", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = \"aut\"), person(\"Maximilian\", \"Girlich\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevin@posit.co\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Tools to help to create tidy data, where each column is a variable, each row is an observation, and each cell contains a single value. 'tidyr' contains tools for changing the shape (pivoting) and hierarchy (nesting and 'unnesting') of a dataset, turning deeply nested lists into rectangular data frames ('rectangling'), and extracting values out of string columns. It also includes tools for working with missing values (both implicit and explicit).", - "License": "MIT + file LICENSE", - "URL": "https://tidyr.tidyverse.org, https://github.com/tidyverse/tidyr", - "BugReports": "https://github.com/tidyverse/tidyr/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.4.1)", - "dplyr (>= 1.0.10)", - "glue", - "lifecycle (>= 1.0.3)", - "magrittr", - "purrr (>= 1.0.1)", - "rlang (>= 1.1.1)", - "stringr (>= 1.5.0)", - "tibble (>= 2.1.1)", - "tidyselect (>= 1.2.0)", - "utils", - "vctrs (>= 0.5.2)" - ], - "Suggests": [ - "covr", - "data.table", - "knitr", - "readr", - "repurrrsive (>= 1.1.0)", - "rmarkdown", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.4.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "LazyData": "true", - "RoxygenNote": "7.3.0", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut, cre], Davis Vaughan [aut], Maximilian Girlich [aut], Kevin Ushey [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.1", - "Source": "Repository", - "Title": "Select from a Set of Strings", - "Authors@R": "c( person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.", - "License": "MIT + file LICENSE", - "URL": "https://tidyselect.r-lib.org, https://github.com/r-lib/tidyselect", - "BugReports": "https://github.com/r-lib/tidyselect/issues", - "Depends": [ - "R (>= 3.4)" - ], - "Imports": [ - "cli (>= 3.3.0)", - "glue (>= 1.3.0)", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.0.4)", - "vctrs (>= 0.5.2)", - "withr" - ], - "Suggests": [ - "covr", - "crayon", - "dplyr", - "knitr", - "magrittr", - "rmarkdown", - "stringr", - "testthat (>= 3.1.1)", - "tibble (>= 2.1.3)" - ], - "VignetteBuilder": "knitr", - "ByteCompile": "true", - "Config/testthat/edition": "3", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.0.9000", - "NeedsCompilation": "yes", - "Author": "Lionel Henry [aut, cre], Hadley Wickham [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "timechange": { - "Package": "timechange", - "Version": "0.3.0", - "Source": "Repository", - "Title": "Efficient Manipulation of Date-Times", - "Authors@R": "c(person(\"Vitalie\", \"Spinu\", email = \"spinuvit@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Google Inc.\", role = c(\"ctb\", \"cph\")))", - "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.", - "Depends": [ - "R (>= 3.3)" - ], - "License": "GPL (>= 3)", - "Encoding": "UTF-8", - "LinkingTo": [ - "cpp11 (>= 0.2.7)" - ], - "Suggests": [ - "testthat (>= 0.7.1.99)", - "knitr" - ], - "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.", - "BugReports": "https://github.com/vspinu/timechange/issues", - "URL": "https://github.com/vspinu/timechange/", - "RoxygenNote": "7.2.1", - "NeedsCompilation": "yes", - "Author": "Vitalie Spinu [aut, cre], Google Inc. [ctb, cph]", - "Maintainer": "Vitalie Spinu ", - "Repository": "CRAN" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.57", - "Source": "Repository", - "Type": "Package", - "Title": "Helper Functions to Install and Maintain TeX Live, and Compile LaTeX Documents", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\")), person(given = \"Posit Software, PBC\", role = c(\"cph\", \"fnd\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\", comment = c(ORCID = \"0000-0003-4474-2498\")), person(\"Devon\", \"Ryan\", role = \"ctb\", email = \"dpryan79@gmail.com\", comment = c(ORCID = \"0000-0002-8549-0971\")), person(\"Ethan\", \"Heinzen\", role = \"ctb\"), person(\"Fernando\", \"Cagua\", role = \"ctb\"), person() )", - "Description": "Helper functions to install and maintain the 'LaTeX' distribution named 'TinyTeX' (), a lightweight, cross-platform, portable, and easy-to-maintain version of 'TeX Live'. This package also contains helper functions to compile 'LaTeX' documents, and install missing 'LaTeX' packages automatically.", - "Imports": [ - "xfun (>= 0.48)" - ], - "Suggests": [ - "testit", - "rstudioapi" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/rstudio/tinytex", - "BugReports": "https://github.com/rstudio/tinytex/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Yihui Xie [aut, cre, cph] (), Posit Software, PBC [cph, fnd], Christophe Dervieux [ctb] (), Devon Ryan [ctb] (), Ethan Heinzen [ctb], Fernando Cagua [ctb]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "tzdb": { - "Package": "tzdb", - "Version": "0.5.0", - "Source": "Repository", - "Title": "Time Zone Database Information", - "Authors@R": "c( person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"Howard\", \"Hinnant\", role = \"cph\", comment = \"Author of the included date library\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provides an up-to-date copy of the Internet Assigned Numbers Authority (IANA) Time Zone Database. It is updated periodically to reflect changes made by political bodies to time zone boundaries, UTC offsets, and daylight saving time rules. Additionally, this package provides a C++ interface for working with the 'date' library. 'date' provides comprehensive support for working with dates and date-times, which this package exposes to make it easier for other R packages to utilize. Headers are provided for calendar specific calculations, along with a limited interface for time zone manipulations.", - "License": "MIT + file LICENSE", - "URL": "https://tzdb.r-lib.org, https://github.com/r-lib/tzdb", - "BugReports": "https://github.com/r-lib/tzdb/issues", - "Depends": [ - "R (>= 4.0.0)" - ], - "Suggests": [ - "covr", - "testthat (>= 3.0.0)" - ], - "LinkingTo": [ - "cpp11 (>= 0.5.2)" - ], - "Biarch": "yes", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "yes", - "Author": "Davis Vaughan [aut, cre], Howard Hinnant [cph] (Author of the included date library), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "urlchecker": { - "Package": "urlchecker", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Run CRAN URL Checks from Older R Versions", - "Authors@R": "c( person(\"R Core team\", role = \"aut\", comment = \"The code in urltools.R adapted from the tools package\"), 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(\"RStudio\", role = c(\"cph\", \"fnd\")) )", - "Description": "Provide the URL checking tools available in R 4.1+ as a package for earlier versions of R. Also uses concurrent requests so can be much faster than the serial versions.", - "License": "GPL-3", - "URL": "https://github.com/r-lib/urlchecker", - "BugReports": "https://github.com/r-lib/urlchecker/issues", - "Depends": [ - "R (>= 3.3)" - ], - "Imports": [ - "cli", - "curl", - "tools", - "xml2" - ], - "Suggests": [ - "covr" - ], - "Encoding": "UTF-8", - "RoxygenNote": "7.1.2", - "NeedsCompilation": "no", - "Author": "R Core team [aut] (The code in urltools.R adapted from the tools package), Jim Hester [aut] (), Gábor Csárdi [aut, cre], RStudio [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "usethis": { - "Package": "usethis", - "Version": "3.1.0", - "Source": "Repository", - "Title": "Automate Package and Project Setup", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Malcolm\", \"Barrett\", , \"malcolmbarrett@gmail.com\", role = \"aut\", comment = c(ORCID = \"0000-0003-0299-5825\")), person(\"Andy\", \"Teucher\", , \"andy.teucher@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0002-7840-692X\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Automate package and project setup tasks that are otherwise performed manually. This includes setting up unit testing, test coverage, continuous integration, Git, 'GitHub', licenses, 'Rcpp', 'RStudio' projects, and more.", - "License": "MIT + file LICENSE", - "URL": "https://usethis.r-lib.org, https://github.com/r-lib/usethis", - "BugReports": "https://github.com/r-lib/usethis/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "cli (>= 3.0.1)", - "clipr (>= 0.3.0)", - "crayon", - "curl (>= 2.7)", - "desc (>= 1.4.2)", - "fs (>= 1.3.0)", - "gert (>= 1.4.1)", - "gh (>= 1.2.1)", - "glue (>= 1.3.0)", - "jsonlite", - "lifecycle (>= 1.0.0)", - "purrr", - "rappdirs", - "rlang (>= 1.1.0)", - "rprojroot (>= 1.2)", - "rstudioapi", - "stats", - "tools", - "utils", - "whisker", - "withr (>= 2.3.0)", - "yaml" - ], - "Suggests": [ - "covr", - "knitr", - "magick", - "pkgload (>= 1.3.2.1)", - "rmarkdown", - "roxygen2 (>= 7.1.2)", - "spelling (>= 1.2)", - "styler (>= 1.2.0)", - "testthat (>= 3.1.8)" - ], - "Config/Needs/website": "r-lib/asciicast, tidyverse/tidytemplate, xml2", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "TRUE", - "Config/testthat/start-first": "github-actions, release", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut] (), Jennifer Bryan [aut, cre] (), Malcolm Barrett [aut] (), Andy Teucher [aut] (), Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.6", - "Source": "Repository", - "Title": "Unicode Text Processing", - "Authors@R": "c(person(given = c(\"Patrick\", \"O.\"), family = \"Perry\", role = c(\"aut\", \"cph\")), person(given = \"Kirill\", family = \"M\\u00fcller\", role = \"cre\", email = \"kirill@cynkra.com\", comment = c(ORCID = \"0000-0002-1416-3412\")), person(given = \"Unicode, Inc.\", role = c(\"cph\", \"dtc\"), comment = \"Unicode Character Database\"))", - "Description": "Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.", - "License": "Apache License (== 2.0) | file LICENSE", - "URL": "https://krlmlr.github.io/utf8/, https://github.com/krlmlr/utf8", - "BugReports": "https://github.com/krlmlr/utf8/issues", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "cli", - "covr", - "knitr", - "rlang", - "rmarkdown", - "testthat (>= 3.0.0)", - "withr" - ], - "VignetteBuilder": "knitr, rmarkdown", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Patrick O. Perry [aut, cph], Kirill Müller [cre] (ORCID: ), Unicode, Inc. [cph, dtc] (Unicode Character Database)", - "Maintainer": "Kirill Müller ", - "Repository": "CRAN" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.5", - "Source": "Repository", - "Title": "Vector Helpers", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = \"aut\"), person(\"Davis\", \"Vaughan\", , \"davis@posit.co\", role = c(\"aut\", \"cre\")), person(\"data.table team\", role = \"cph\", comment = \"Radix sort based on data.table's forder() and their contribution to R's order()\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Defines new notions of prototype and size that are used to provide tools for consistent and well-founded type-coercion and size-recycling, and are in turn connected to ideas of type- and size-stability useful for analysing function interfaces.", - "License": "MIT + file LICENSE", - "URL": "https://vctrs.r-lib.org/, https://github.com/r-lib/vctrs", - "BugReports": "https://github.com/r-lib/vctrs/issues", - "Depends": [ - "R (>= 3.5.0)" - ], - "Imports": [ - "cli (>= 3.4.0)", - "glue", - "lifecycle (>= 1.0.3)", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "bit64", - "covr", - "crayon", - "dplyr (>= 0.8.5)", - "generics", - "knitr", - "pillar (>= 1.4.4)", - "pkgdown (>= 2.0.1)", - "rmarkdown", - "testthat (>= 3.0.0)", - "tibble (>= 3.1.3)", - "waldo (>= 0.2.0)", - "withr", - "xml2", - "zeallot" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "Language": "en-GB", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "yes", - "Author": "Hadley Wickham [aut], Lionel Henry [aut], Davis Vaughan [aut, cre], data.table team [cph] (Radix sort based on data.table's forder() and their contribution to R's order()), Posit Software, PBC [cph, fnd]", - "Maintainer": "Davis Vaughan ", - "Repository": "CRAN" - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.2", - "Source": "Repository", - "Type": "Package", - "Title": "Colorblind-Friendly Color Maps (Lite Version)", - "Date": "2023-05-02", - "Authors@R": "c( person(\"Simon\", \"Garnier\", email = \"garnier@njit.edu\", role = c(\"aut\", \"cre\")), person(\"Noam\", \"Ross\", email = \"noam.ross@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Bob\", \"Rudis\", email = \"bob@rud.is\", role = c(\"ctb\", \"cph\")), person(\"Marco\", \"Sciaini\", email = \"sciaini.marco@gmail.com\", role = c(\"ctb\", \"cph\")), person(\"Antônio Pedro\", \"Camargo\", role = c(\"ctb\", \"cph\")), person(\"Cédric\", \"Scherer\", email = \"scherer@izw-berlin.de\", role = c(\"ctb\", \"cph\")) )", - "Maintainer": "Simon Garnier ", - "Description": "Color maps designed to improve graph readability for readers with common forms of color blindness and/or color vision deficiency. The color maps are also perceptually-uniform, both in regular form and also when converted to black-and-white for printing. This is the 'lite' version of the 'viridis' package that also contains 'ggplot2' bindings for discrete and continuous color and fill scales and can be found at .", - "License": "MIT + file LICENSE", - "Encoding": "UTF-8", - "Depends": [ - "R (>= 2.10)" - ], - "Suggests": [ - "hexbin (>= 1.27.0)", - "ggplot2 (>= 1.0.1)", - "testthat", - "covr" - ], - "URL": "https://sjmgarnier.github.io/viridisLite/, https://github.com/sjmgarnier/viridisLite/", - "BugReports": "https://github.com/sjmgarnier/viridisLite/issues/", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Simon Garnier [aut, cre], Noam Ross [ctb, cph], Bob Rudis [ctb, cph], Marco Sciaini [ctb, cph], Antônio Pedro Camargo [ctb, cph], Cédric Scherer [ctb, cph]", - "Repository": "CRAN" - }, - "vroom": { - "Package": "vroom", - "Version": "1.6.5", - "Source": "Repository", - "Title": "Read and Write Rectangular Text Data Quickly", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\", comment = c(ORCID = \"0000-0002-2739-7082\")), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\", comment = c(ORCID = \"0000-0003-4757-117X\")), person(\"Jennifer\", \"Bryan\", , \"jenny@posit.co\", role = c(\"aut\", \"cre\"), comment = c(ORCID = \"0000-0002-6983-2759\")), person(\"Shelby\", \"Bearrows\", role = \"ctb\"), person(\"https://github.com/mandreyel/\", role = \"cph\", comment = \"mio library\"), person(\"Jukka\", \"Jylänki\", role = \"cph\", comment = \"grisu3 implementation\"), person(\"Mikkel\", \"Jørgensen\", role = \"cph\", comment = \"grisu3 implementation\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "The goal of 'vroom' is to read and write data (like 'csv', 'tsv' and 'fwf') quickly. When reading it uses a quick initial indexing step, then reads the values lazily , so only the data you actually use needs to be read. The writer formats the data in parallel and writes to disk asynchronously from formatting.", - "License": "MIT + file LICENSE", - "URL": "https://vroom.r-lib.org, https://github.com/tidyverse/vroom", - "BugReports": "https://github.com/tidyverse/vroom/issues", - "Depends": [ - "R (>= 3.6)" - ], - "Imports": [ - "bit64", - "cli (>= 3.2.0)", - "crayon", - "glue", - "hms", - "lifecycle (>= 1.0.3)", - "methods", - "rlang (>= 0.4.2)", - "stats", - "tibble (>= 2.0.0)", - "tidyselect", - "tzdb (>= 0.1.1)", - "vctrs (>= 0.2.0)", - "withr" - ], - "Suggests": [ - "archive", - "bench (>= 1.1.0)", - "covr", - "curl", - "dplyr", - "forcats", - "fs", - "ggplot2", - "knitr", - "patchwork", - "prettyunits", - "purrr", - "rmarkdown", - "rstudioapi", - "scales", - "spelling", - "testthat (>= 2.1.0)", - "tidyr", - "utils", - "waldo", - "xml2" - ], - "LinkingTo": [ - "cpp11 (>= 0.2.0)", - "progress (>= 1.2.1)", - "tzdb (>= 0.1.1)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "nycflights13, tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/testthat/parallel": "false", - "Copyright": "file COPYRIGHTS", - "Encoding": "UTF-8", - "Language": "en-US", - "RoxygenNote": "7.2.3.9000", - "NeedsCompilation": "yes", - "Author": "Jim Hester [aut] (), Hadley Wickham [aut] (), Jennifer Bryan [aut, cre] (), Shelby Bearrows [ctb], https://github.com/mandreyel/ [cph] (mio library), Jukka Jylänki [cph] (grisu3 implementation), Mikkel Jørgensen [cph] (grisu3 implementation), Posit Software, PBC [cph, fnd]", - "Maintainer": "Jennifer Bryan ", - "Repository": "CRAN" - }, - "waldo": { - "Package": "waldo", - "Version": "0.6.1", - "Source": "Repository", - "Title": "Find Differences Between R Objects", - "Authors@R": "c( person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = c(\"aut\", \"cre\")), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Compare complex R objects and reveal the key differences. Designed particularly for use in testing packages where being able to quickly isolate key differences makes understanding test failures much easier.", - "License": "MIT + file LICENSE", - "URL": "https://waldo.r-lib.org, https://github.com/r-lib/waldo", - "BugReports": "https://github.com/r-lib/waldo/issues", - "Depends": [ - "R (>= 4.0)" - ], - "Imports": [ - "cli", - "diffobj (>= 0.3.4)", - "glue", - "methods", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "bit64", - "R6", - "S7", - "testthat (>= 3.0.0)", - "withr", - "xml2" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "NeedsCompilation": "no", - "Author": "Hadley Wickham [aut, cre], Posit Software, PBC [cph, fnd]", - "Maintainer": "Hadley Wickham ", - "Repository": "CRAN" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4.1", - "Source": "Repository", - "Maintainer": "Edwin de Jonge ", - "License": "GPL-3", - "Title": "{{mustache}} for R, Logicless Templating", - "Type": "Package", - "LazyLoad": "yes", - "Author": "Edwin de Jonge", - "Description": "Implements 'Mustache' logicless templating.", - "URL": "https://github.com/edwindj/whisker", - "Suggests": [ - "markdown" - ], - "RoxygenNote": "6.1.1", - "NeedsCompilation": "no", - "Repository": "CRAN" - }, - "withr": { - "Package": "withr", - "Version": "3.0.2", - "Source": "Repository", - "Title": "Run Code 'With' Temporarily Modified Global State", - "Authors@R": "c( person(\"Jim\", \"Hester\", role = \"aut\"), person(\"Lionel\", \"Henry\", , \"lionel@posit.co\", role = c(\"aut\", \"cre\")), person(\"Kirill\", \"Müller\", , \"krlmlr+r@mailbox.org\", role = \"aut\"), person(\"Kevin\", \"Ushey\", , \"kevinushey@gmail.com\", role = \"aut\"), person(\"Hadley\", \"Wickham\", , \"hadley@posit.co\", role = \"aut\"), person(\"Winston\", \"Chang\", role = \"aut\"), person(\"Jennifer\", \"Bryan\", role = \"ctb\"), person(\"Richard\", \"Cotton\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.", - "License": "MIT + file LICENSE", - "URL": "https://withr.r-lib.org, https://github.com/r-lib/withr#readme", - "BugReports": "https://github.com/r-lib/withr/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "graphics", - "grDevices" - ], - "Suggests": [ - "callr", - "DBI", - "knitr", - "methods", - "rlang", - "rmarkdown (>= 2.12)", - "RSQLite", - "testthat (>= 3.0.0)" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "Collate": "'aaa.R' 'collate.R' 'connection.R' 'db.R' 'defer-exit.R' 'standalone-defer.R' 'defer.R' 'devices.R' 'local_.R' 'with_.R' 'dir.R' 'env.R' 'file.R' 'language.R' 'libpaths.R' 'locale.R' 'makevars.R' 'namespace.R' 'options.R' 'par.R' 'path.R' 'rng.R' 'seed.R' 'wrap.R' 'sink.R' 'tempfile.R' 'timezone.R' 'torture.R' 'utils.R' 'with.R'", - "NeedsCompilation": "no", - "Author": "Jim Hester [aut], Lionel Henry [aut, cre], Kirill Müller [aut], Kevin Ushey [aut], Hadley Wickham [aut], Winston Chang [aut], Jennifer Bryan [ctb], Richard Cotton [ctb], Posit Software, PBC [cph, fnd]", - "Maintainer": "Lionel Henry ", - "Repository": "CRAN" - }, - "xfun": { - "Package": "xfun", - "Version": "0.52", - "Source": "Repository", - "Type": "Package", - "Title": "Supporting Functions for Packages Maintained by 'Yihui Xie'", - "Authors@R": "c( person(\"Yihui\", \"Xie\", role = c(\"aut\", \"cre\", \"cph\"), email = \"xie@yihui.name\", comment = c(ORCID = \"0000-0003-0645-5666\", URL = \"https://yihui.org\")), person(\"Wush\", \"Wu\", role = \"ctb\"), person(\"Daijiang\", \"Li\", role = \"ctb\"), person(\"Xianying\", \"Tan\", role = \"ctb\"), person(\"Salim\", \"Brüggemann\", role = \"ctb\", email = \"salim-b@pm.me\", comment = c(ORCID = \"0000-0002-5329-5987\")), person(\"Christophe\", \"Dervieux\", role = \"ctb\"), person() )", - "Description": "Miscellaneous functions commonly used in other packages maintained by 'Yihui Xie'.", - "Depends": [ - "R (>= 3.2.0)" - ], - "Imports": [ - "grDevices", - "stats", - "tools" - ], - "Suggests": [ - "testit", - "parallel", - "codetools", - "methods", - "rstudioapi", - "tinytex (>= 0.30)", - "mime", - "litedown (>= 0.4)", - "commonmark", - "knitr (>= 1.50)", - "remotes", - "pak", - "curl", - "xml2", - "jsonlite", - "magick", - "yaml", - "qs" - ], - "License": "MIT + file LICENSE", - "URL": "https://github.com/yihui/xfun", - "BugReports": "https://github.com/yihui/xfun/issues", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2", - "VignetteBuilder": "litedown", - "NeedsCompilation": "yes", - "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]", - "Maintainer": "Yihui Xie ", - "Repository": "CRAN" - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.8", - "Source": "Repository", - "Title": "Parse XML", - "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\") )", - "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.", - "License": "MIT + file LICENSE", - "URL": "https://xml2.r-lib.org, https://r-lib.r-universe.dev/xml2", - "BugReports": "https://github.com/r-lib/xml2/issues", - "Depends": [ - "R (>= 3.6.0)" - ], - "Imports": [ - "cli", - "methods", - "rlang (>= 1.1.0)" - ], - "Suggests": [ - "covr", - "curl", - "httr", - "knitr", - "magrittr", - "mockery", - "rmarkdown", - "testthat (>= 3.2.0)", - "xslt" - ], - "VignetteBuilder": "knitr", - "Config/Needs/website": "tidyverse/tidytemplate", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "SystemRequirements": "libxml2: libxml2-dev (deb), libxml2-devel (rpm)", - "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'", - "Config/testthat/edition": "3", - "NeedsCompilation": "yes", - "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)", - "Maintainer": "Jeroen Ooms ", - "Repository": "CRAN" - }, - "xopen": { - "Package": "xopen", - "Version": "1.0.1", - "Source": "Repository", - "Title": "Open System Files, 'URLs', Anything", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Fathi\", \"Boudra\", role = \"aut\"), person(\"Rex\", \"Dieter\", role = \"aut\"), person(\"Kevin\", \"Krammer\", role = \"aut\"), person(\"Jeremy\", \"White\", role = \"aut\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\")) )", - "Description": "Cross platform solution to open files, directories or 'URLs' with their associated programs.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/xopen#readme, https://r-lib.github.io/xopen/", - "BugReports": "https://github.com/r-lib/xopen/issues", - "Depends": [ - "R (>= 3.1)" - ], - "Imports": [ - "processx" - ], - "Suggests": [ - "ps", - "testthat (>= 3.0.0)" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Encoding": "UTF-8", - "RoxygenNote": "7.2.3", - "NeedsCompilation": "no", - "Author": "Gábor Csárdi [aut, cre], Fathi Boudra [aut], Rex Dieter [aut], Kevin Krammer [aut], Jeremy White [aut], Posit Software, PBC [cph, fnd]", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Date": "2019-04-08", - "Title": "Export Tables to LaTeX or HTML", - "Authors@R": "c(person(\"David B.\", \"Dahl\", role=\"aut\"), person(\"David\", \"Scott\", role=c(\"aut\",\"cre\"), email=\"d.scott@auckland.ac.nz\"), person(\"Charles\", \"Roosen\", role=\"aut\"), person(\"Arni\", \"Magnusson\", role=\"aut\"), person(\"Jonathan\", \"Swinton\", role=\"aut\"), person(\"Ajay\", \"Shah\", role=\"ctb\"), person(\"Arne\", \"Henningsen\", role=\"ctb\"), person(\"Benno\", \"Puetz\", role=\"ctb\"), person(\"Bernhard\", \"Pfaff\", role=\"ctb\"), person(\"Claudio\", \"Agostinelli\", role=\"ctb\"), person(\"Claudius\", \"Loehnert\", role=\"ctb\"), person(\"David\", \"Mitchell\", role=\"ctb\"), person(\"David\", \"Whiting\", role=\"ctb\"), person(\"Fernando da\", \"Rosa\", role=\"ctb\"), person(\"Guido\", \"Gay\", role=\"ctb\"), person(\"Guido\", \"Schulz\", role=\"ctb\"), person(\"Ian\", \"Fellows\", role=\"ctb\"), person(\"Jeff\", \"Laake\", role=\"ctb\"), person(\"John\", \"Walker\", role=\"ctb\"), person(\"Jun\", \"Yan\", role=\"ctb\"), person(\"Liviu\", \"Andronic\", role=\"ctb\"), person(\"Markus\", \"Loecher\", role=\"ctb\"), person(\"Martin\", \"Gubri\", role=\"ctb\"), person(\"Matthieu\", \"Stigler\", role=\"ctb\"), person(\"Robert\", \"Castelo\", role=\"ctb\"), person(\"Seth\", \"Falcon\", role=\"ctb\"), person(\"Stefan\", \"Edwards\", role=\"ctb\"), person(\"Sven\", \"Garbade\", role=\"ctb\"), person(\"Uwe\", \"Ligges\", role=\"ctb\"))", - "Maintainer": "David Scott ", - "Imports": [ - "stats", - "utils" - ], - "Suggests": [ - "knitr", - "plm", - "zoo", - "survival" - ], - "VignetteBuilder": "knitr", - "Description": "Coerce data to LaTeX and HTML tables.", - "URL": "http://xtable.r-forge.r-project.org/", - "Depends": [ - "R (>= 2.10.0)" - ], - "License": "GPL (>= 2)", - "Repository": "CRAN", - "NeedsCompilation": "no", - "Author": "David B. Dahl [aut], David Scott [aut, cre], Charles Roosen [aut], Arni Magnusson [aut], Jonathan Swinton [aut], Ajay Shah [ctb], Arne Henningsen [ctb], Benno Puetz [ctb], Bernhard Pfaff [ctb], Claudio Agostinelli [ctb], Claudius Loehnert [ctb], David Mitchell [ctb], David Whiting [ctb], Fernando da Rosa [ctb], Guido Gay [ctb], Guido Schulz [ctb], Ian Fellows [ctb], Jeff Laake [ctb], John Walker [ctb], Jun Yan [ctb], Liviu Andronic [ctb], Markus Loecher [ctb], Martin Gubri [ctb], Matthieu Stigler [ctb], Robert Castelo [ctb], Seth Falcon [ctb], Stefan Edwards [ctb], Sven Garbade [ctb], Uwe Ligges [ctb]" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.10", - "Source": "Repository", - "Type": "Package", - "Title": "Methods to Convert R Data to YAML and Back", - "Date": "2024-07-22", - "Suggests": [ - "RUnit" - ], - "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]", - "Maintainer": "Shawn Garbett ", - "License": "BSD_3_clause + file LICENSE", - "Description": "Implements the 'libyaml' 'YAML' 1.1 parser and emitter () for R.", - "URL": "https://github.com/vubiostat/r-yaml/", - "BugReports": "https://github.com/vubiostat/r-yaml/issues", - "NeedsCompilation": "yes", - "Repository": "CRAN" - }, - "zip": { - "Package": "zip", - "Version": "2.3.3", - "Source": "Repository", - "Title": "Cross-Platform 'zip' Compression", - "Authors@R": "c( person(\"Gábor\", \"Csárdi\", , \"csardi.gabor@gmail.com\", role = c(\"aut\", \"cre\")), person(\"Kuba\", \"Podgórski\", role = \"ctb\"), person(\"Rich\", \"Geldreich\", role = \"ctb\"), person(\"Posit Software, PBC\", role = c(\"cph\", \"fnd\"), comment = c(ROR = \"03wc8by49\")) )", - "Description": "Cross-Platform 'zip' Compression Library. A replacement for the 'zip' function, that does not require any additional external tools on any platform.", - "License": "MIT + file LICENSE", - "URL": "https://github.com/r-lib/zip, https://r-lib.github.io/zip/", - "BugReports": "https://github.com/r-lib/zip/issues", - "Suggests": [ - "covr", - "pillar", - "processx", - "R6", - "testthat", - "withr" - ], - "Config/Needs/website": "tidyverse/tidytemplate", - "Config/testthat/edition": "3", - "Config/usethis/last-upkeep": "2025-05-07", - "Encoding": "UTF-8", - "RoxygenNote": "7.3.2.9000", - "NeedsCompilation": "yes", - "Author": "Gábor Csárdi [aut, cre], Kuba Podgórski [ctb], Rich Geldreich [ctb], Posit Software, PBC [cph, fnd] (ROR: )", - "Maintainer": "Gábor Csárdi ", - "Repository": "CRAN" - } - } -} diff --git a/renv/.gitignore b/renv/.gitignore deleted file mode 100644 index 0ec0cbb..0000000 --- a/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -library/ -local/ -cellar/ -lock/ -python/ -sandbox/ -staging/ diff --git a/renv/activate.R b/renv/activate.R deleted file mode 100644 index 90b251c..0000000 --- a/renv/activate.R +++ /dev/null @@ -1,1334 +0,0 @@ - -local({ - - # the requested version of renv - version <- "1.1.4" - attr(version, "sha") <- NULL - - # the project directory - project <- Sys.getenv("RENV_PROJECT") - if (!nzchar(project)) - project <- getwd() - - # use start-up diagnostics if enabled - diagnostics <- Sys.getenv("RENV_STARTUP_DIAGNOSTICS", unset = "FALSE") - if (diagnostics) { - start <- Sys.time() - profile <- tempfile("renv-startup-", fileext = ".Rprof") - utils::Rprof(profile) - on.exit({ - utils::Rprof(NULL) - elapsed <- signif(difftime(Sys.time(), start, units = "auto"), digits = 2L) - writeLines(sprintf("- renv took %s to run the autoloader.", format(elapsed))) - writeLines(sprintf("- Profile: %s", profile)) - print(utils::summaryRprof(profile)) - }, add = TRUE) - } - - # figure out whether the autoloader is enabled - enabled <- local({ - - # first, check config option - override <- getOption("renv.config.autoloader.enabled") - if (!is.null(override)) - return(override) - - # if we're being run in a context where R_LIBS is already set, - # don't load -- presumably we're being run as a sub-process and - # the parent process has already set up library paths for us - rcmd <- Sys.getenv("R_CMD", unset = NA) - rlibs <- Sys.getenv("R_LIBS", unset = NA) - if (!is.na(rlibs) && !is.na(rcmd)) - return(FALSE) - - # next, check environment variables - # prefer using the configuration one in the future - envvars <- c( - "RENV_CONFIG_AUTOLOADER_ENABLED", - "RENV_AUTOLOADER_ENABLED", - "RENV_ACTIVATE_PROJECT" - ) - - for (envvar in envvars) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(tolower(envval) %in% c("true", "t", "1")) - } - - # enable by default - TRUE - - }) - - # bail if we're not enabled - if (!enabled) { - - # if we're not enabled, we might still need to manually load - # the user profile here - profile <- Sys.getenv("R_PROFILE_USER", unset = "~/.Rprofile") - if (file.exists(profile)) { - cfg <- Sys.getenv("RENV_CONFIG_USER_PROFILE", unset = "TRUE") - if (tolower(cfg) %in% c("true", "t", "1")) - sys.source(profile, envir = globalenv()) - } - - return(FALSE) - - } - - # avoid recursion - if (identical(getOption("renv.autoloader.running"), TRUE)) { - warning("ignoring recursive attempt to run renv autoloader") - return(invisible(TRUE)) - } - - # signal that we're loading renv during R startup - options(renv.autoloader.running = TRUE) - on.exit(options(renv.autoloader.running = NULL), add = TRUE) - - # signal that we've consented to use renv - options(renv.consent = TRUE) - - # load the 'utils' package eagerly -- this ensures that renv shims, which - # mask 'utils' packages, will come first on the search path - library(utils, lib.loc = .Library) - - # unload renv if it's already been loaded - if ("renv" %in% loadedNamespaces()) - unloadNamespace("renv") - - # load bootstrap tools - ansify <- function(text) { - if (renv_ansify_enabled()) - renv_ansify_enhanced(text) - else - renv_ansify_default(text) - } - - renv_ansify_enabled <- function() { - - override <- Sys.getenv("RENV_ANSIFY_ENABLED", unset = NA) - if (!is.na(override)) - return(as.logical(override)) - - pane <- Sys.getenv("RSTUDIO_CHILD_PROCESS_PANE", unset = NA) - if (identical(pane, "build")) - return(FALSE) - - testthat <- Sys.getenv("TESTTHAT", unset = "false") - if (tolower(testthat) %in% "true") - return(FALSE) - - iderun <- Sys.getenv("R_CLI_HAS_HYPERLINK_IDE_RUN", unset = "false") - if (tolower(iderun) %in% "false") - return(FALSE) - - TRUE - - } - - renv_ansify_default <- function(text) { - text - } - - renv_ansify_enhanced <- function(text) { - - # R help links - pattern <- "`\\?(renv::(?:[^`])+)`" - replacement <- "`\033]8;;x-r-help:\\1\a?\\1\033]8;;\a`" - text <- gsub(pattern, replacement, text, perl = TRUE) - - # runnable code - pattern <- "`(renv::(?:[^`])+)`" - replacement <- "`\033]8;;x-r-run:\\1\a\\1\033]8;;\a`" - text <- gsub(pattern, replacement, text, perl = TRUE) - - # return ansified text - text - - } - - renv_ansify_init <- function() { - - envir <- renv_envir_self() - if (renv_ansify_enabled()) - assign("ansify", renv_ansify_enhanced, envir = envir) - else - assign("ansify", renv_ansify_default, envir = envir) - - } - - `%||%` <- function(x, y) { - if (is.null(x)) y else x - } - - catf <- function(fmt, ..., appendLF = TRUE) { - - quiet <- getOption("renv.bootstrap.quiet", default = FALSE) - if (quiet) - return(invisible()) - - msg <- sprintf(fmt, ...) - cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") - - invisible(msg) - - } - - header <- function(label, - ..., - prefix = "#", - suffix = "-", - n = min(getOption("width"), 78)) - { - label <- sprintf(label, ...) - n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) - if (n <= 0) - return(paste(prefix, label)) - - tail <- paste(rep.int(suffix, n), collapse = "") - paste0(prefix, " ", label, " ", tail) - - } - - heredoc <- function(text, leave = 0) { - - # remove leading, trailing whitespace - trimmed <- gsub("^\\s*\\n|\\n\\s*$", "", text) - - # split into lines - lines <- strsplit(trimmed, "\n", fixed = TRUE)[[1L]] - - # compute common indent - indent <- regexpr("[^[:space:]]", lines) - common <- min(setdiff(indent, -1L)) - leave - text <- paste(substring(lines, common), collapse = "\n") - - # substitute in ANSI links for executable renv code - ansify(text) - - } - - bootstrap <- function(version, library) { - - friendly <- renv_bootstrap_version_friendly(version) - section <- header(sprintf("Bootstrapping renv %s", friendly)) - catf(section) - - # attempt to download renv - catf("- Downloading renv ... ", appendLF = FALSE) - withCallingHandlers( - tarball <- renv_bootstrap_download(version), - error = function(err) { - catf("FAILED") - stop("failed to download:\n", conditionMessage(err)) - } - ) - catf("OK") - on.exit(unlink(tarball), add = TRUE) - - # now attempt to install - catf("- Installing renv ... ", appendLF = FALSE) - withCallingHandlers( - status <- renv_bootstrap_install(version, tarball, library), - error = function(err) { - catf("FAILED") - stop("failed to install:\n", conditionMessage(err)) - } - ) - catf("OK") - - # add empty line to break up bootstrapping from normal output - catf("") - - return(invisible()) - } - - renv_bootstrap_tests_running <- function() { - getOption("renv.tests.running", default = FALSE) - } - - renv_bootstrap_repos <- function() { - - # get CRAN repository - cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") - - # check for repos override - repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) { - - # check for RSPM; if set, use a fallback repository for renv - rspm <- Sys.getenv("RSPM", unset = NA) - if (identical(rspm, repos)) - repos <- c(RSPM = rspm, CRAN = cran) - - return(repos) - - } - - # check for lockfile repositories - repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) - if (!inherits(repos, "error") && length(repos)) - return(repos) - - # retrieve current repos - repos <- getOption("repos") - - # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- cran - - # add in renv.bootstrap.repos if set - default <- c(FALLBACK = "https://cloud.r-project.org") - extra <- getOption("renv.bootstrap.repos", default = default) - repos <- c(repos, extra) - - # remove duplicates that might've snuck in - dupes <- duplicated(repos) | duplicated(names(repos)) - repos[!dupes] - - } - - renv_bootstrap_repos_lockfile <- function() { - - lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") - if (!file.exists(lockpath)) - return(NULL) - - lockfile <- tryCatch(renv_json_read(lockpath), error = identity) - if (inherits(lockfile, "error")) { - warning(lockfile) - return(NULL) - } - - repos <- lockfile$R$Repositories - if (length(repos) == 0) - return(NULL) - - keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) - vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) - names(vals) <- keys - - return(vals) - - } - - renv_bootstrap_download <- function(version) { - - sha <- attr(version, "sha", exact = TRUE) - - methods <- if (!is.null(sha)) { - - # attempting to bootstrap a development version of renv - c( - function() renv_bootstrap_download_tarball(sha), - function() renv_bootstrap_download_github(sha) - ) - - } else { - - # attempting to bootstrap a release version of renv - c( - function() renv_bootstrap_download_tarball(version), - function() renv_bootstrap_download_cran_latest(version), - function() renv_bootstrap_download_cran_archive(version) - ) - - } - - for (method in methods) { - path <- tryCatch(method(), error = identity) - if (is.character(path) && file.exists(path)) - return(path) - } - - stop("All download methods failed") - - } - - renv_bootstrap_download_impl <- function(url, destfile) { - - mode <- "wb" - - # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 - fixup <- - Sys.info()[["sysname"]] == "Windows" && - substring(url, 1L, 5L) == "file:" - - if (fixup) - mode <- "w+b" - - args <- list( - url = url, - destfile = destfile, - mode = mode, - quiet = TRUE - ) - - if ("headers" %in% names(formals(utils::download.file))) { - headers <- renv_bootstrap_download_custom_headers(url) - if (length(headers) && is.character(headers)) - args$headers <- headers - } - - do.call(utils::download.file, args) - - } - - renv_bootstrap_download_custom_headers <- function(url) { - - headers <- getOption("renv.download.headers") - if (is.null(headers)) - return(character()) - - if (!is.function(headers)) - stopf("'renv.download.headers' is not a function") - - headers <- headers(url) - if (length(headers) == 0L) - return(character()) - - if (is.list(headers)) - headers <- unlist(headers, recursive = FALSE, use.names = TRUE) - - ok <- - is.character(headers) && - is.character(names(headers)) && - all(nzchar(names(headers))) - - if (!ok) - stop("invocation of 'renv.download.headers' did not return a named character vector") - - headers - - } - - renv_bootstrap_download_cran_latest <- function(version) { - - spec <- renv_bootstrap_download_cran_latest_find(version) - type <- spec$type - repos <- spec$repos - - baseurl <- utils::contrib.url(repos = repos, type = type) - ext <- if (identical(type, "source")) - ".tar.gz" - else if (Sys.info()[["sysname"]] == "Windows") - ".zip" - else - ".tgz" - name <- sprintf("renv_%s%s", version, ext) - url <- paste(baseurl, name, sep = "/") - - destfile <- file.path(tempdir(), name) - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (inherits(status, "condition")) - return(FALSE) - - # report success and return - destfile - - } - - renv_bootstrap_download_cran_latest_find <- function(version) { - - # check whether binaries are supported on this system - binary <- - getOption("renv.bootstrap.binary", default = TRUE) && - !identical(.Platform$pkgType, "source") && - !identical(getOption("pkgType"), "source") && - Sys.info()[["sysname"]] %in% c("Darwin", "Windows") - - types <- c(if (binary) "binary", "source") - - # iterate over types + repositories - for (type in types) { - for (repos in renv_bootstrap_repos()) { - - # build arguments for utils::available.packages() call - args <- list(type = type, repos = repos) - - # add custom headers if available -- note that - # utils::available.packages() will pass this to download.file() - if ("headers" %in% names(formals(utils::download.file))) { - headers <- renv_bootstrap_download_custom_headers(repos) - if (length(headers) && is.character(headers)) - args$headers <- headers - } - - # retrieve package database - db <- tryCatch( - as.data.frame( - do.call(utils::available.packages, args), - stringsAsFactors = FALSE - ), - error = identity - ) - - if (inherits(db, "error")) - next - - # check for compatible entry - entry <- db[db$Package %in% "renv" & db$Version %in% version, ] - if (nrow(entry) == 0) - next - - # found it; return spec to caller - spec <- list(entry = entry, type = type, repos = repos) - return(spec) - - } - } - - # if we got here, we failed to find renv - fmt <- "renv %s is not available from your declared package repositories" - stop(sprintf(fmt, version)) - - } - - renv_bootstrap_download_cran_archive <- function(version) { - - name <- sprintf("renv_%s.tar.gz", version) - repos <- renv_bootstrap_repos() - urls <- file.path(repos, "src/contrib/Archive/renv", name) - destfile <- file.path(tempdir(), name) - - for (url in urls) { - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (identical(status, 0L)) - return(destfile) - - } - - return(FALSE) - - } - - renv_bootstrap_download_tarball <- function(version) { - - # if the user has provided the path to a tarball via - # an environment variable, then use it - tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) - if (is.na(tarball)) - return() - - # allow directories - if (dir.exists(tarball)) { - name <- sprintf("renv_%s.tar.gz", version) - tarball <- file.path(tarball, name) - } - - # bail if it doesn't exist - if (!file.exists(tarball)) { - - # let the user know we weren't able to honour their request - fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." - msg <- sprintf(fmt, tarball) - warning(msg) - - # bail - return() - - } - - catf("- Using local tarball '%s'.", tarball) - tarball - - } - - renv_bootstrap_github_token <- function() { - for (envvar in c("GITHUB_TOKEN", "GITHUB_PAT", "GH_TOKEN")) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(envval) - } - } - - renv_bootstrap_download_github <- function(version) { - - enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") - if (!identical(enabled, "TRUE")) - return(FALSE) - - # prepare download options - token <- renv_bootstrap_github_token() - if (is.null(token)) - token <- "" - - if (nzchar(Sys.which("curl")) && nzchar(token)) { - fmt <- "--location --fail --header \"Authorization: token %s\"" - extra <- sprintf(fmt, token) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "curl", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } else if (nzchar(Sys.which("wget")) && nzchar(token)) { - fmt <- "--header=\"Authorization: token %s\"" - extra <- sprintf(fmt, token) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "wget", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } - - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) - name <- sprintf("renv_%s.tar.gz", version) - destfile <- file.path(tempdir(), name) - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (!identical(status, 0L)) - return(FALSE) - - renv_bootstrap_download_augment(destfile) - - return(destfile) - - } - - # Add Sha to DESCRIPTION. This is stop gap until #890, after which we - # can use renv::install() to fully capture metadata. - renv_bootstrap_download_augment <- function(destfile) { - sha <- renv_bootstrap_git_extract_sha1_tar(destfile) - if (is.null(sha)) { - return() - } - - # Untar - tempdir <- tempfile("renv-github-") - on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) - untar(destfile, exdir = tempdir) - pkgdir <- dir(tempdir, full.names = TRUE)[[1]] - - # Modify description - desc_path <- file.path(pkgdir, "DESCRIPTION") - desc_lines <- readLines(desc_path) - remotes_fields <- c( - "RemoteType: github", - "RemoteHost: api.github.com", - "RemoteRepo: renv", - "RemoteUsername: rstudio", - "RemotePkgRef: rstudio/renv", - paste("RemoteRef: ", sha), - paste("RemoteSha: ", sha) - ) - writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) - - # Re-tar - local({ - old <- setwd(tempdir) - on.exit(setwd(old), add = TRUE) - - tar(destfile, compression = "gzip") - }) - invisible() - } - - # Extract the commit hash from a git archive. Git archives include the SHA1 - # hash as the comment field of the tarball pax extended header - # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) - # For GitHub archives this should be the first header after the default one - # (512 byte) header. - renv_bootstrap_git_extract_sha1_tar <- function(bundle) { - - # open the bundle for reading - # We use gzcon for everything because (from ?gzcon) - # > Reading from a connection which does not supply a 'gzip' magic - # > header is equivalent to reading from the original connection - conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) - on.exit(close(conn)) - - # The default pax header is 512 bytes long and the first pax extended header - # with the comment should be 51 bytes long - # `52 comment=` (11 chars) + 40 byte SHA1 hash - len <- 0x200 + 0x33 - res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) - - if (grepl("^52 comment=", res)) { - sub("52 comment=", "", res) - } else { - NULL - } - } - - renv_bootstrap_install <- function(version, tarball, library) { - - # attempt to install it into project library - dir.create(library, showWarnings = FALSE, recursive = TRUE) - output <- renv_bootstrap_install_impl(library, tarball) - - # check for successful install - status <- attr(output, "status") - if (is.null(status) || identical(status, 0L)) - return(status) - - # an error occurred; report it - header <- "installation of renv failed" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- paste(c(header, lines, output), collapse = "\n") - stop(text) - - } - - renv_bootstrap_install_impl <- function(library, tarball) { - - # invoke using system2 so we can capture and report output - bin <- R.home("bin") - exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - R <- file.path(bin, exe) - - args <- c( - "--vanilla", "CMD", "INSTALL", "--no-multiarch", - "-l", shQuote(path.expand(library)), - shQuote(path.expand(tarball)) - ) - - system2(R, args, stdout = TRUE, stderr = TRUE) - - } - - renv_bootstrap_platform_prefix_default <- function() { - - # read version component - version <- Sys.getenv("RENV_PATHS_VERSION", unset = "R-%v") - - # expand placeholders - placeholders <- list( - list("%v", format(getRversion()[1, 1:2])), - list("%V", format(getRversion()[1, 1:3])) - ) - - for (placeholder in placeholders) - version <- gsub(placeholder[[1L]], placeholder[[2L]], version, fixed = TRUE) - - # include SVN revision for development versions of R - # (to avoid sharing platform-specific artefacts with released versions of R) - devel <- - identical(R.version[["status"]], "Under development (unstable)") || - identical(R.version[["nickname"]], "Unsuffered Consequences") - - if (devel) - version <- paste(version, R.version[["svn rev"]], sep = "-r") - - version - - } - - renv_bootstrap_platform_prefix <- function() { - - # construct version prefix - version <- renv_bootstrap_platform_prefix_default() - - # build list of path components - components <- c(version, R.version$platform) - - # include prefix if provided by user - prefix <- renv_bootstrap_platform_prefix_impl() - if (!is.na(prefix) && nzchar(prefix)) - components <- c(prefix, components) - - # build prefix - paste(components, collapse = "/") - - } - - renv_bootstrap_platform_prefix_impl <- function() { - - # if an explicit prefix has been supplied, use it - prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) - if (!is.na(prefix)) - return(prefix) - - # if the user has requested an automatic prefix, generate it - auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) - if (is.na(auto) && getRversion() >= "4.4.0") - auto <- "TRUE" - - if (auto %in% c("TRUE", "True", "true", "1")) - return(renv_bootstrap_platform_prefix_auto()) - - # empty string on failure - "" - - } - - renv_bootstrap_platform_prefix_auto <- function() { - - prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) - if (inherits(prefix, "error") || prefix %in% "unknown") { - - msg <- paste( - "failed to infer current operating system", - "please file a bug report at https://github.com/rstudio/renv/issues", - sep = "; " - ) - - warning(msg) - - } - - prefix - - } - - renv_bootstrap_platform_os <- function() { - - sysinfo <- Sys.info() - sysname <- sysinfo[["sysname"]] - - # handle Windows + macOS up front - if (sysname == "Windows") - return("windows") - else if (sysname == "Darwin") - return("macos") - - # check for os-release files - for (file in c("/etc/os-release", "/usr/lib/os-release")) - if (file.exists(file)) - return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) - - # check for redhat-release files - if (file.exists("/etc/redhat-release")) - return(renv_bootstrap_platform_os_via_redhat_release()) - - "unknown" - - } - - renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { - - # read /etc/os-release - release <- utils::read.table( - file = file, - sep = "=", - quote = c("\"", "'"), - col.names = c("Key", "Value"), - comment.char = "#", - stringsAsFactors = FALSE - ) - - vars <- as.list(release$Value) - names(vars) <- release$Key - - # get os name - os <- tolower(sysinfo[["sysname"]]) - - # read id - id <- "unknown" - for (field in c("ID", "ID_LIKE")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - id <- vars[[field]] - break - } - } - - # read version - version <- "unknown" - for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - version <- vars[[field]] - break - } - } - - # join together - paste(c(os, id, version), collapse = "-") - - } - - renv_bootstrap_platform_os_via_redhat_release <- function() { - - # read /etc/redhat-release - contents <- readLines("/etc/redhat-release", warn = FALSE) - - # infer id - id <- if (grepl("centos", contents, ignore.case = TRUE)) - "centos" - else if (grepl("redhat", contents, ignore.case = TRUE)) - "redhat" - else - "unknown" - - # try to find a version component (very hacky) - version <- "unknown" - - parts <- strsplit(contents, "[[:space:]]")[[1L]] - for (part in parts) { - - nv <- tryCatch(numeric_version(part), error = identity) - if (inherits(nv, "error")) - next - - version <- nv[1, 1] - break - - } - - paste(c("linux", id, version), collapse = "-") - - } - - renv_bootstrap_library_root_name <- function(project) { - - # use project name as-is if requested - asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") - if (asis) - return(basename(project)) - - # otherwise, disambiguate based on project's path - id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) - paste(basename(project), id, sep = "-") - - } - - renv_bootstrap_library_root <- function(project) { - - prefix <- renv_bootstrap_profile_prefix() - - path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) - if (!is.na(path)) - return(paste(c(path, prefix), collapse = "/")) - - path <- renv_bootstrap_library_root_impl(project) - if (!is.null(path)) { - name <- renv_bootstrap_library_root_name(project) - return(paste(c(path, prefix, name), collapse = "/")) - } - - renv_bootstrap_paths_renv("library", project = project) - - } - - renv_bootstrap_library_root_impl <- function(project) { - - root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) - if (!is.na(root)) - return(root) - - type <- renv_bootstrap_project_type(project) - if (identical(type, "package")) { - userdir <- renv_bootstrap_user_dir() - return(file.path(userdir, "library")) - } - - } - - renv_bootstrap_validate_version <- function(version, description = NULL) { - - # resolve description file - # - # avoid passing lib.loc to `packageDescription()` below, since R will - # use the loaded version of the package by default anyhow. note that - # this function should only be called after 'renv' is loaded - # https://github.com/rstudio/renv/issues/1625 - description <- description %||% packageDescription("renv") - - # check whether requested version 'version' matches loaded version of renv - sha <- attr(version, "sha", exact = TRUE) - valid <- if (!is.null(sha)) - renv_bootstrap_validate_version_dev(sha, description) - else - renv_bootstrap_validate_version_release(version, description) - - if (valid) - return(TRUE) - - # the loaded version of renv doesn't match the requested version; - # give the user instructions on how to proceed - dev <- identical(description[["RemoteType"]], "github") - remote <- if (dev) - paste("rstudio/renv", description[["RemoteSha"]], sep = "@") - else - paste("renv", description[["Version"]], sep = "@") - - # display both loaded version + sha if available - friendly <- renv_bootstrap_version_friendly( - version = description[["Version"]], - sha = if (dev) description[["RemoteSha"]] - ) - - fmt <- heredoc(" - renv %1$s was loaded from project library, but this project is configured to use renv %2$s. - - Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile. - - Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library. - ") - catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) - - FALSE - - } - - renv_bootstrap_validate_version_dev <- function(version, description) { - - expected <- description[["RemoteSha"]] - if (!is.character(expected)) - return(FALSE) - - pattern <- sprintf("^\\Q%s\\E", version) - grepl(pattern, expected, perl = TRUE) - - } - - renv_bootstrap_validate_version_release <- function(version, description) { - expected <- description[["Version"]] - is.character(expected) && identical(expected, version) - } - - renv_bootstrap_hash_text <- function(text) { - - hashfile <- tempfile("renv-hash-") - on.exit(unlink(hashfile), add = TRUE) - - writeLines(text, con = hashfile) - tools::md5sum(hashfile) - - } - - renv_bootstrap_load <- function(project, libpath, version) { - - # try to load renv from the project library - if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) - return(FALSE) - - # warn if the version of renv loaded does not match - renv_bootstrap_validate_version(version) - - # execute renv load hooks, if any - hooks <- getHook("renv::autoload") - for (hook in hooks) - if (is.function(hook)) - tryCatch(hook(), error = warnify) - - # load the project - renv::load(project) - - TRUE - - } - - renv_bootstrap_profile_load <- function(project) { - - # if RENV_PROFILE is already set, just use that - profile <- Sys.getenv("RENV_PROFILE", unset = NA) - if (!is.na(profile) && nzchar(profile)) - return(profile) - - # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) - if (!file.exists(path)) - return(NULL) - - # read the profile, and set it if it exists - contents <- readLines(path, warn = FALSE) - if (length(contents) == 0L) - return(NULL) - - # set RENV_PROFILE - profile <- contents[[1L]] - if (!profile %in% c("", "default")) - Sys.setenv(RENV_PROFILE = profile) - - profile - - } - - renv_bootstrap_profile_prefix <- function() { - profile <- renv_bootstrap_profile_get() - if (!is.null(profile)) - return(file.path("profiles", profile, "renv")) - } - - renv_bootstrap_profile_get <- function() { - profile <- Sys.getenv("RENV_PROFILE", unset = "") - renv_bootstrap_profile_normalize(profile) - } - - renv_bootstrap_profile_set <- function(profile) { - profile <- renv_bootstrap_profile_normalize(profile) - if (is.null(profile)) - Sys.unsetenv("RENV_PROFILE") - else - Sys.setenv(RENV_PROFILE = profile) - } - - renv_bootstrap_profile_normalize <- function(profile) { - - if (is.null(profile) || profile %in% c("", "default")) - return(NULL) - - profile - - } - - renv_bootstrap_path_absolute <- function(path) { - - substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( - substr(path, 1L, 1L) %in% c(letters, LETTERS) && - substr(path, 2L, 3L) %in% c(":/", ":\\") - ) - - } - - renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { - renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") - root <- if (renv_bootstrap_path_absolute(renv)) NULL else project - prefix <- if (profile) renv_bootstrap_profile_prefix() - components <- c(root, renv, prefix, ...) - paste(components, collapse = "/") - } - - renv_bootstrap_project_type <- function(path) { - - descpath <- file.path(path, "DESCRIPTION") - if (!file.exists(descpath)) - return("unknown") - - desc <- tryCatch( - read.dcf(descpath, all = TRUE), - error = identity - ) - - if (inherits(desc, "error")) - return("unknown") - - type <- desc$Type - if (!is.null(type)) - return(tolower(type)) - - package <- desc$Package - if (!is.null(package)) - return("package") - - "unknown" - - } - - renv_bootstrap_user_dir <- function() { - dir <- renv_bootstrap_user_dir_impl() - path.expand(chartr("\\", "/", dir)) - } - - renv_bootstrap_user_dir_impl <- function() { - - # use local override if set - override <- getOption("renv.userdir.override") - if (!is.null(override)) - return(override) - - # use R_user_dir if available - tools <- asNamespace("tools") - if (is.function(tools$R_user_dir)) - return(tools$R_user_dir("renv", "cache")) - - # try using our own backfill for older versions of R - envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") - for (envvar in envvars) { - root <- Sys.getenv(envvar, unset = NA) - if (!is.na(root)) - return(file.path(root, "R/renv")) - } - - # use platform-specific default fallbacks - if (Sys.info()[["sysname"]] == "Windows") - file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") - else if (Sys.info()[["sysname"]] == "Darwin") - "~/Library/Caches/org.R-project.R/R/renv" - else - "~/.cache/R/renv" - - } - - renv_bootstrap_version_friendly <- function(version, shafmt = NULL, sha = NULL) { - sha <- sha %||% attr(version, "sha", exact = TRUE) - parts <- c(version, sprintf(shafmt %||% " [sha: %s]", substring(sha, 1L, 7L))) - paste(parts, collapse = "") - } - - renv_bootstrap_exec <- function(project, libpath, version) { - if (!renv_bootstrap_load(project, libpath, version)) - renv_bootstrap_run(project, libpath, version) - } - - renv_bootstrap_run <- function(project, libpath, version) { - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - return(renv::load(project = project)) - } - - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) - - warning(paste(msg, collapse = "\n"), call. = FALSE) - - } - - renv_json_read <- function(file = NULL, text = NULL) { - - jlerr <- NULL - - # if jsonlite is loaded, use that instead - if ("jsonlite" %in% loadedNamespaces()) { - - json <- tryCatch(renv_json_read_jsonlite(file, text), error = identity) - if (!inherits(json, "error")) - return(json) - - jlerr <- json - - } - - # otherwise, fall back to the default JSON reader - json <- tryCatch(renv_json_read_default(file, text), error = identity) - if (!inherits(json, "error")) - return(json) - - # report an error - if (!is.null(jlerr)) - stop(jlerr) - else - stop(json) - - } - - renv_json_read_jsonlite <- function(file = NULL, text = NULL) { - text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") - jsonlite::fromJSON(txt = text, simplifyVector = FALSE) - } - - renv_json_read_patterns <- function() { - - list( - - # objects - list("{", "\t\n\tobject(\t\n\t", TRUE), - list("}", "\t\n\t)\t\n\t", TRUE), - - # arrays - list("[", "\t\n\tarray(\t\n\t", TRUE), - list("]", "\n\t\n)\n\t\n", TRUE), - - # maps - list(":", "\t\n\t=\t\n\t", TRUE), - - # newlines - list("\\u000a", "\n", FALSE) - - ) - - } - - renv_json_read_envir <- function() { - - envir <- new.env(parent = emptyenv()) - - envir[["+"]] <- `+` - envir[["-"]] <- `-` - - envir[["object"]] <- function(...) { - result <- list(...) - names(result) <- as.character(names(result)) - result - } - - envir[["array"]] <- list - - envir[["true"]] <- TRUE - envir[["false"]] <- FALSE - envir[["null"]] <- NULL - - envir - - } - - renv_json_read_remap <- function(object, patterns) { - - # repair names if necessary - if (!is.null(names(object))) { - - nms <- names(object) - for (pattern in patterns) - nms <- gsub(pattern[[2L]], pattern[[1L]], nms, fixed = TRUE) - names(object) <- nms - - } - - # repair strings if necessary - if (is.character(object)) { - for (pattern in patterns) - object <- gsub(pattern[[2L]], pattern[[1L]], object, fixed = TRUE) - } - - # recurse for other objects - if (is.recursive(object)) - for (i in seq_along(object)) - object[i] <- list(renv_json_read_remap(object[[i]], patterns)) - - # return remapped object - object - - } - - renv_json_read_default <- function(file = NULL, text = NULL) { - - # read json text - text <- paste(text %||% readLines(file, warn = FALSE), collapse = "\n") - - # convert into something the R parser will understand - patterns <- renv_json_read_patterns() - transformed <- text - for (pattern in patterns) - transformed <- gsub(pattern[[1L]], pattern[[2L]], transformed, fixed = TRUE) - - # parse it - rfile <- tempfile("renv-json-", fileext = ".R") - on.exit(unlink(rfile), add = TRUE) - writeLines(transformed, con = rfile) - json <- parse(rfile, keep.source = FALSE, srcfile = NULL)[[1L]] - - # evaluate in safe environment - result <- eval(json, envir = renv_json_read_envir()) - - # fix up strings if necessary -- do so only with reversible patterns - patterns <- Filter(function(pattern) pattern[[3L]], patterns) - renv_json_read_remap(result, patterns) - - } - - - # load the renv profile, if any - renv_bootstrap_profile_load(project) - - # construct path to library root - root <- renv_bootstrap_library_root(project) - - # construct library prefix for platform - prefix <- renv_bootstrap_platform_prefix() - - # construct full libpath - libpath <- file.path(root, prefix) - - # run bootstrap code - renv_bootstrap_exec(project, libpath, version) - - invisible() - -}) diff --git a/renv/settings.json b/renv/settings.json deleted file mode 100644 index ffdbb32..0000000 --- a/renv/settings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "bioconductor.version": null, - "external.libraries": [], - "ignored.packages": [], - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "ppm.enabled": null, - "ppm.ignored.urls": [], - "r.version": null, - "snapshot.type": "implicit", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} diff --git a/rproject.toml b/rproject.toml new file mode 100644 index 0000000..7667d7f --- /dev/null +++ b/rproject.toml @@ -0,0 +1,44 @@ +[project] +name = "fairenough" +r_version = "4.5.1" + +repositories = [ + { alias = "CRAN", url = "https://cloud.r-project.org" }, + {alias = "QUARTO", url = "https://quarto-dev.r-universe.dev"} +] + +dependencies = [ + "cli", + "desc", + "devtools", + "dplyr", + "fs", + "here", + "janitor", + "readr", + "readxl", + "roxygen2", + "tools", + "usethis", + "whisker", + "cffr", + "pkgdown", + "rmarkdown", + "quarto", + "knitr", + "withr", + "ellmer", + "glue", + "jsonlite", + "tibble", + "spelling", + "rstudioapi", + "goodpractice", + "gt", + "fontawesome", + "stringr" +] + +dev_dependencies = [ +"testthat" +] \ No newline at end of file diff --git a/rv.lock b/rv.lock new file mode 100644 index 0000000..021091b --- /dev/null +++ b/rv.lock @@ -0,0 +1,1644 @@ +# This file is automatically @generated by rv. +# It is not intended for manual editing. +version = 2 +r_version = "4.5" + +[[packages]] +name = "R6" +version = "2.6.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "RColorBrewer" +version = "1.1-3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "Rcpp" +version = "1.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "S7" +version = "0.2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "V8" +version = "6.0.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "Rcpp", requirement = "(>= 0.12.12)" }, + { name = "jsonlite", requirement = "(>= 1.0)" }, + { name = "curl", requirement = "(>= 1.0)" }, +] + +[[packages]] +name = "askpass" +version = "1.2.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "sys", requirement = "(>= 2.1)" }, +] + +[[packages]] +name = "backports" +version = "1.5.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "base64enc" +version = "0.1-3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "bigD" +version = "0.3.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "bit" +version = "4.6.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "bit64" +version = "4.6.0-1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "bit", requirement = "(>= 4.0.0)" }, +] + +[[packages]] +name = "bitops" +version = "1.0-9" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "brew" +version = "1.0-10" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "brio" +version = "1.1.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "bslib" +version = "0.9.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "base64enc", + "cachem", + { name = "fastmap", requirement = "(>= 1.1.1)" }, + { name = "htmltools", requirement = "(>= 0.5.8)" }, + { name = "jquerylib", requirement = "(>= 0.1.3)" }, + "jsonlite", + "lifecycle", + { name = "memoise", requirement = "(>= 2.0.1)" }, + "mime", + "rlang", + { name = "sass", requirement = "(>= 0.4.9)" }, +] + +[[packages]] +name = "cachem" +version = "1.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "rlang", + { name = "fastmap", requirement = "(>= 1.2.0)" }, +] + +[[packages]] +name = "callr" +version = "3.7.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "processx", requirement = "(>= 3.6.1)" }, + "R6", +] + +[[packages]] +name = "cellranger" +version = "1.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "rematch", + "tibble", +] + +[[packages]] +name = "cffr" +version = "1.2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 2.0.0)" }, + { name = "desc", requirement = "(>= 1.3.0)" }, + { name = "jsonlite", requirement = "(>= 1.7.2)" }, + { name = "jsonvalidate", requirement = "(>= 1.1.0)" }, + { name = "yaml", requirement = "(>= 2.2.1)" }, +] + +[[packages]] +name = "cli" +version = "3.6.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "clipr" +version = "0.8.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "clisymbols" +version = "1.2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "codetools" +version = "0.2-20" +source = { builtin = true } +force_source = false +dependencies = [] + +[[packages]] +name = "commonmark" +version = "2.0.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "coro" +version = "1.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "rlang", requirement = "(>= 0.4.12)" }, +] + +[[packages]] +name = "covr" +version = "3.6.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "digest", + "jsonlite", + "rex", + "httr", + "crayon", + { name = "withr", requirement = "(>= 1.0.2)" }, + "yaml", +] + +[[packages]] +name = "cpp11" +version = "0.5.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "crayon" +version = "1.5.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "credentials" +version = "2.0.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "openssl", requirement = "(>= 1.3)" }, + { name = "sys", requirement = "(>= 2.1)" }, + "curl", + "jsonlite", + "askpass", +] + +[[packages]] +name = "curl" +version = "7.0.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "cyclocomp" +version = "1.1.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "callr", + "crayon", + "desc", + "remotes", + "withr", +] + +[[packages]] +name = "desc" +version = "1.4.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + "R6", +] + +[[packages]] +name = "devtools" +version = "2.4.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "usethis", requirement = "(>= 2.1.6)" }, + { name = "cli", requirement = "(>= 3.3.0)" }, + { name = "desc", requirement = "(>= 1.4.1)" }, + { name = "ellipsis", requirement = "(>= 0.3.2)" }, + { name = "fs", requirement = "(>= 1.5.2)" }, + { name = "lifecycle", requirement = "(>= 1.0.1)" }, + { name = "memoise", requirement = "(>= 2.0.1)" }, + { name = "miniUI", requirement = "(>= 0.1.1.1)" }, + { name = "pkgbuild", requirement = "(>= 1.3.1)" }, + { name = "pkgdown", requirement = "(>= 2.0.6)" }, + { name = "pkgload", requirement = "(>= 1.3.0)" }, + { name = "profvis", requirement = "(>= 0.3.7)" }, + { name = "rcmdcheck", requirement = "(>= 1.4.0)" }, + { name = "remotes", requirement = "(>= 2.4.2)" }, + { name = "rlang", requirement = "(>= 1.0.4)" }, + { name = "roxygen2", requirement = "(>= 7.2.1)" }, + { name = "rversions", requirement = "(>= 2.1.1)" }, + { name = "sessioninfo", requirement = "(>= 1.2.2)" }, + { name = "testthat", requirement = "(>= 3.1.5)" }, + { name = "urlchecker", requirement = "(>= 1.0.1)" }, + { name = "withr", requirement = "(>= 2.5.0)" }, +] + +[[packages]] +name = "diffobj" +version = "0.3.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "crayon", requirement = "(>= 1.3.2)" }, +] + +[[packages]] +name = "digest" +version = "0.6.37" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "downlit" +version = "0.4.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "brio", + "desc", + "digest", + "evaluate", + "fansi", + "memoise", + "rlang", + "vctrs", + "withr", + "yaml", +] + +[[packages]] +name = "dplyr" +version = "1.1.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.4.0)" }, + "generics", + { name = "glue", requirement = "(>= 1.3.2)" }, + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + { name = "magrittr", requirement = "(>= 1.5)" }, + { name = "pillar", requirement = "(>= 1.9.0)" }, + "R6", + { name = "rlang", requirement = "(>= 1.1.0)" }, + { name = "tibble", requirement = "(>= 3.2.0)" }, + { name = "tidyselect", requirement = "(>= 1.2.0)" }, + { name = "vctrs", requirement = "(>= 0.6.4)" }, +] + +[[packages]] +name = "ellipsis" +version = "0.3.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "rlang", requirement = "(>= 0.3.0)" }, +] + +[[packages]] +name = "ellmer" +version = "0.3.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + { name = "coro", requirement = "(>= 1.1.0)" }, + "glue", + { name = "httr2", requirement = "(>= 1.2.1)" }, + "jsonlite", + { name = "later", requirement = "(>= 1.4.0)" }, + "lifecycle", + { name = "promises", requirement = "(>= 1.3.1)" }, + "R6", + { name = "rlang", requirement = "(>= 1.1.0)" }, + { name = "S7", requirement = "(>= 0.2.0)" }, +] + +[[packages]] +name = "evaluate" +version = "1.0.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "fansi" +version = "1.0.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "farver" +version = "2.1.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "fastmap" +version = "1.2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "fontawesome" +version = "0.5.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "rlang", requirement = "(>= 1.0.6)" }, + { name = "htmltools", requirement = "(>= 0.5.1.1)" }, +] + +[[packages]] +name = "fs" +version = "1.6.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "generics" +version = "0.1.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "gert" +version = "2.1.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "askpass", + { name = "credentials", requirement = "(>= 1.2.1)" }, + { name = "openssl", requirement = "(>= 2.0.3)" }, + { name = "rstudioapi", requirement = "(>= 0.11)" }, + "sys", + { name = "zip", requirement = "(>= 2.1.0)" }, +] + +[[packages]] +name = "gh" +version = "1.5.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.0.1)" }, + "gitcreds", + "glue", + { name = "httr2", requirement = "(>= 1.0.6)" }, + "ini", + "jsonlite", + "lifecycle", + { name = "rlang", requirement = "(>= 1.0.0)" }, +] + +[[packages]] +name = "gitcreds" +version = "0.1.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "glue" +version = "1.8.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "goodpractice" +version = "1.0.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "clisymbols", + "covr", + "crayon", + { name = "cyclocomp", requirement = "(>= 1.1.0)" }, + "desc", + "jsonlite", + { name = "lintr", requirement = "(>= 3.0.0)" }, + "praise", + "rcmdcheck", + "rstudioapi", + "whoami", + "withr", + "xml2", + { name = "xmlparsedata", requirement = "(>= 1.0.1)" }, +] + +[[packages]] +name = "gt" +version = "1.0.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "base64enc", requirement = "(>= 0.1-3)" }, + { name = "bigD", requirement = "(>= 0.2)" }, + { name = "bitops", requirement = "(>= 1.0-7)" }, + { name = "cli", requirement = "(>= 3.6.3)" }, + { name = "commonmark", requirement = "(>= 1.9.1)" }, + { name = "dplyr", requirement = "(>= 1.1.4)" }, + { name = "fs", requirement = "(>= 1.6.4)" }, + { name = "glue", requirement = "(>= 1.8.0)" }, + { name = "htmltools", requirement = "(>= 0.5.8.1)" }, + { name = "htmlwidgets", requirement = "(>= 1.6.4)" }, + { name = "juicyjuice", requirement = "(>= 0.1.0)" }, + { name = "magrittr", requirement = "(>= 2.0.3)" }, + { name = "markdown", requirement = "(>= 1.13)" }, + { name = "reactable", requirement = "(>= 0.4.4)" }, + { name = "rlang", requirement = "(>= 1.1.4)" }, + { name = "sass", requirement = "(>= 0.4.9)" }, + { name = "scales", requirement = "(>= 1.3.0)" }, + { name = "tidyselect", requirement = "(>= 1.2.1)" }, + "vctrs", + { name = "xml2", requirement = "(>= 1.3.6)" }, +] + +[[packages]] +name = "here" +version = "1.0.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "rprojroot", requirement = "(>= 2.0.2)" }, +] + +[[packages]] +name = "highr" +version = "0.11" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "xfun", requirement = "(>= 0.18)" }, +] + +[[packages]] +name = "hms" +version = "1.1.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "lifecycle", + "pkgconfig", + { name = "rlang", requirement = "(>= 1.0.2)" }, + { name = "vctrs", requirement = "(>= 0.3.8)" }, +] + +[[packages]] +name = "htmltools" +version = "0.5.8.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "base64enc", + "digest", + { name = "fastmap", requirement = "(>= 1.1.0)" }, + { name = "rlang", requirement = "(>= 1.0.0)" }, +] + +[[packages]] +name = "htmlwidgets" +version = "1.6.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "htmltools", requirement = "(>= 0.5.7)" }, + { name = "jsonlite", requirement = "(>= 0.9.16)" }, + { name = "knitr", requirement = "(>= 1.8)" }, + "rmarkdown", + "yaml", +] + +[[packages]] +name = "httpuv" +version = "1.6.16" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "later", requirement = "(>= 0.8.0)" }, + "promises", + "R6", + { name = "Rcpp", requirement = "(>= 1.0.7)" }, +] + +[[packages]] +name = "httr" +version = "1.4.7" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "curl", requirement = "(>= 5.0.2)" }, + "jsonlite", + "mime", + { name = "openssl", requirement = "(>= 0.8)" }, + "R6", +] + +[[packages]] +name = "httr2" +version = "1.2.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.0.0)" }, + { name = "curl", requirement = "(>= 6.4.0)" }, + "glue", + "lifecycle", + "magrittr", + "openssl", + "R6", + "rappdirs", + { name = "rlang", requirement = "(>= 1.1.0)" }, + { name = "vctrs", requirement = "(>= 0.6.3)" }, + "withr", +] + +[[packages]] +name = "hunspell" +version = "3.0.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "Rcpp", + "digest", +] + +[[packages]] +name = "ini" +version = "0.3.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "janitor" +version = "2.2.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "dplyr", requirement = "(>= 1.0.0)" }, + "hms", + "lifecycle", + "lubridate", + "magrittr", + "purrr", + "rlang", + "stringi", + "stringr", + { name = "snakecase", requirement = "(>= 0.9.2)" }, + { name = "tidyselect", requirement = "(>= 1.0.0)" }, + { name = "tidyr", requirement = "(>= 0.7.0)" }, +] + +[[packages]] +name = "jquerylib" +version = "0.1.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "htmltools", +] + +[[packages]] +name = "jsonlite" +version = "2.0.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "jsonvalidate" +version = "1.5.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "R6", + "V8", +] + +[[packages]] +name = "juicyjuice" +version = "0.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "V8", requirement = "(>= 4.2.0)" }, +] + +[[packages]] +name = "knitr" +version = "1.50" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "evaluate", requirement = "(>= 0.15)" }, + { name = "highr", requirement = "(>= 0.11)" }, + { name = "xfun", requirement = "(>= 0.51)" }, + { name = "yaml", requirement = "(>= 2.1.19)" }, +] + +[[packages]] +name = "labeling" +version = "0.4.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "later" +version = "1.4.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "Rcpp", requirement = "(>= 0.12.9)" }, + "rlang", +] + +[[packages]] +name = "lazyeval" +version = "0.2.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "lifecycle" +version = "1.0.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.4.0)" }, + "glue", + { name = "rlang", requirement = "(>= 1.1.0)" }, +] + +[[packages]] +name = "lintr" +version = "3.2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "backports", requirement = "(>= 1.4.0)" }, + { name = "cli", requirement = "(>= 3.4.0)" }, + "codetools", + "digest", + "glue", + "knitr", + "rex", + { name = "xml2", requirement = "(>= 1.0.0)" }, + { name = "xmlparsedata", requirement = "(>= 1.0.5)" }, +] + +[[packages]] +name = "litedown" +version = "0.7" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "commonmark", requirement = "(>= 1.9.5)" }, + { name = "xfun", requirement = "(>= 0.52)" }, +] + +[[packages]] +name = "lubridate" +version = "1.9.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "generics", + { name = "timechange", requirement = "(>= 0.3.0)" }, +] + +[[packages]] +name = "magrittr" +version = "2.0.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "markdown" +version = "2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "xfun", + { name = "litedown", requirement = "(>= 0.6)" }, +] + +[[packages]] +name = "memoise" +version = "2.0.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "rlang", requirement = "(>= 0.4.10)" }, + "cachem", +] + +[[packages]] +name = "mime" +version = "0.13" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "miniUI" +version = "0.1.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "shiny", requirement = "(>= 0.13)" }, + { name = "htmltools", requirement = "(>= 0.3)" }, +] + +[[packages]] +name = "openssl" +version = "2.3.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "askpass", +] + +[[packages]] +name = "pillar" +version = "1.11.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 2.3.0)" }, + "glue", + "lifecycle", + { name = "rlang", requirement = "(>= 1.0.2)" }, + { name = "utf8", requirement = "(>= 1.1.0)" }, + { name = "vctrs", requirement = "(>= 0.5.0)" }, +] + +[[packages]] +name = "pkgbuild" +version = "1.4.8" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "callr", requirement = "(>= 3.2.0)" }, + { name = "cli", requirement = "(>= 3.4.0)" }, + "desc", + "processx", + "R6", +] + +[[packages]] +name = "pkgconfig" +version = "2.0.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "pkgdown" +version = "2.1.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "bslib", requirement = "(>= 0.5.1)" }, + { name = "callr", requirement = "(>= 3.7.3)" }, + { name = "cli", requirement = "(>= 3.6.1)" }, + { name = "desc", requirement = "(>= 1.4.0)" }, + { name = "downlit", requirement = "(>= 0.4.4)" }, + "fontawesome", + { name = "fs", requirement = "(>= 1.4.0)" }, + { name = "httr2", requirement = "(>= 1.0.2)" }, + "jsonlite", + "openssl", + { name = "purrr", requirement = "(>= 1.0.0)" }, + { name = "ragg", requirement = "(>= 1.4.0)" }, + { name = "rlang", requirement = "(>= 1.1.4)" }, + { name = "rmarkdown", requirement = "(>= 2.27)" }, + "tibble", + "whisker", + { name = "withr", requirement = "(>= 2.4.3)" }, + { name = "xml2", requirement = "(>= 1.3.1)" }, + "yaml", +] + +[[packages]] +name = "pkgload" +version = "1.4.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.3.0)" }, + "desc", + "fs", + "glue", + "lifecycle", + "pkgbuild", + "processx", + { name = "rlang", requirement = "(>= 1.1.1)" }, + "rprojroot", + { name = "withr", requirement = "(>= 2.4.3)" }, +] + +[[packages]] +name = "praise" +version = "1.0.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "prettyunits" +version = "1.2.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "processx" +version = "3.8.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "ps", requirement = "(>= 1.2.0)" }, + "R6", +] + +[[packages]] +name = "profvis" +version = "0.4.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "htmlwidgets", requirement = "(>= 0.3.2)" }, + { name = "rlang", requirement = "(>= 1.1.0)" }, + "vctrs", +] + +[[packages]] +name = "progress" +version = "1.2.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "crayon", + "hms", + "prettyunits", + "R6", +] + +[[packages]] +name = "promises" +version = "1.3.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "fastmap", requirement = "(>= 1.1.0)" }, + "later", + { name = "magrittr", requirement = "(>= 1.5)" }, + "R6", + "Rcpp", + "rlang", +] + +[[packages]] +name = "ps" +version = "1.9.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "purrr" +version = "1.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.6.1)" }, + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + { name = "magrittr", requirement = "(>= 1.5.0)" }, + { name = "rlang", requirement = "(>= 1.1.1)" }, + { name = "vctrs", requirement = "(>= 0.6.3)" }, +] + +[[packages]] +name = "quarto" +version = "1.4.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + "jsonlite", + "later", + "processx", + "rlang", + "rmarkdown", + "rstudioapi", + "yaml", +] + +[[packages]] +name = "ragg" +version = "1.4.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "systemfonts", requirement = "(>= 1.0.3)" }, + { name = "textshaping", requirement = "(>= 0.3.0)" }, +] + +[[packages]] +name = "rappdirs" +version = "0.3.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "rcmdcheck" +version = "1.4.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "callr", requirement = "(>= 3.1.1.9000)" }, + { name = "cli", requirement = "(>= 3.0.0)" }, + "curl", + { name = "desc", requirement = "(>= 1.2.0)" }, + "digest", + "pkgbuild", + "prettyunits", + "R6", + "rprojroot", + { name = "sessioninfo", requirement = "(>= 1.1.1)" }, + "withr", + "xopen", +] + +[[packages]] +name = "reactR" +version = "0.6.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "htmltools", +] + +[[packages]] +name = "reactable" +version = "0.4.4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "digest", + { name = "htmltools", requirement = "(>= 0.5.2)" }, + { name = "htmlwidgets", requirement = "(>= 1.5.3)" }, + "jsonlite", + "reactR", +] + +[[packages]] +name = "readr" +version = "2.1.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.2.0)" }, + "clipr", + "crayon", + { name = "hms", requirement = "(>= 0.4.1)" }, + { name = "lifecycle", requirement = "(>= 0.2.0)" }, + "R6", + "rlang", + "tibble", + { name = "vroom", requirement = "(>= 1.6.0)" }, + "cpp11", + { name = "tzdb", requirement = "(>= 0.1.1)" }, +] + +[[packages]] +name = "readxl" +version = "1.4.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cellranger", + { name = "tibble", requirement = "(>= 2.0.1)" }, + { name = "cpp11", requirement = "(>= 0.4.0)" }, + "progress", +] + +[[packages]] +name = "rematch" +version = "2.0.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "remotes" +version = "2.5.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "rex" +version = "1.2.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "lazyeval", +] + +[[packages]] +name = "rlang" +version = "1.1.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "rmarkdown" +version = "2.29" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "bslib", requirement = "(>= 0.2.5.1)" }, + { name = "evaluate", requirement = "(>= 0.13)" }, + { name = "fontawesome", requirement = "(>= 0.5.0)" }, + { name = "htmltools", requirement = "(>= 0.5.1)" }, + "jquerylib", + "jsonlite", + { name = "knitr", requirement = "(>= 1.43)" }, + { name = "tinytex", requirement = "(>= 0.31)" }, + { name = "xfun", requirement = "(>= 0.36)" }, + { name = "yaml", requirement = "(>= 2.1.19)" }, +] + +[[packages]] +name = "roxygen2" +version = "7.3.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "brew", + { name = "cli", requirement = "(>= 3.3.0)" }, + "commonmark", + { name = "desc", requirement = "(>= 1.2.0)" }, + "knitr", + { name = "pkgload", requirement = "(>= 1.0.2)" }, + { name = "purrr", requirement = "(>= 1.0.0)" }, + { name = "R6", requirement = "(>= 2.1.2)" }, + { name = "rlang", requirement = "(>= 1.0.6)" }, + "stringi", + { name = "stringr", requirement = "(>= 1.0.0)" }, + "withr", + "xml2", + "cpp11", +] + +[[packages]] +name = "rprojroot" +version = "2.1.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "rstudioapi" +version = "0.17.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "rversions" +version = "2.1.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "curl", + { name = "xml2", requirement = "(>= 1.0.0)" }, +] + +[[packages]] +name = "sass" +version = "0.4.10" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "fs", requirement = "(>= 1.2.4)" }, + { name = "rlang", requirement = "(>= 0.4.10)" }, + { name = "htmltools", requirement = "(>= 0.5.1)" }, + "R6", + "rappdirs", +] + +[[packages]] +name = "scales" +version = "1.4.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + { name = "farver", requirement = "(>= 2.0.3)" }, + "glue", + "labeling", + "lifecycle", + "R6", + "RColorBrewer", + { name = "rlang", requirement = "(>= 1.1.0)" }, + "viridisLite", +] + +[[packages]] +name = "sessioninfo" +version = "1.2.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.1.0)" }, +] + +[[packages]] +name = "shiny" +version = "1.11.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "httpuv", requirement = "(>= 1.5.2)" }, + { name = "mime", requirement = "(>= 0.3)" }, + { name = "jsonlite", requirement = "(>= 0.9.16)" }, + "xtable", + { name = "fontawesome", requirement = "(>= 0.4.0)" }, + { name = "htmltools", requirement = "(>= 0.5.4)" }, + { name = "R6", requirement = "(>= 2.0)" }, + "sourcetools", + { name = "later", requirement = "(>= 1.0.0)" }, + { name = "promises", requirement = "(>= 1.3.2)" }, + "cli", + { name = "rlang", requirement = "(>= 0.4.10)" }, + { name = "fastmap", requirement = "(>= 1.1.1)" }, + "withr", + { name = "commonmark", requirement = "(>= 1.7)" }, + { name = "glue", requirement = "(>= 1.3.2)" }, + { name = "bslib", requirement = "(>= 0.6.0)" }, + { name = "cachem", requirement = "(>= 1.1.0)" }, + { name = "lifecycle", requirement = "(>= 0.2.0)" }, +] + +[[packages]] +name = "snakecase" +version = "0.11.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "stringr", + "stringi", +] + +[[packages]] +name = "sourcetools" +version = "0.1.7-1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "spelling" +version = "2.3.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "commonmark", + "xml2", + { name = "hunspell", requirement = "(>= 3.0)" }, + "knitr", +] + +[[packages]] +name = "stringi" +version = "1.8.7" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "stringr" +version = "1.5.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + { name = "glue", requirement = "(>= 1.6.1)" }, + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + "magrittr", + { name = "rlang", requirement = "(>= 1.0.0)" }, + { name = "stringi", requirement = "(>= 1.5.3)" }, + { name = "vctrs", requirement = "(>= 0.4.0)" }, +] + +[[packages]] +name = "sys" +version = "3.4.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "systemfonts" +version = "1.2.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "base64enc", + "jsonlite", + "lifecycle", + { name = "cpp11", requirement = "(>= 0.2.1)" }, +] + +[[packages]] +name = "testthat" +version = "3.2.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "brio", requirement = "(>= 1.1.3)" }, + { name = "callr", requirement = "(>= 3.7.3)" }, + { name = "cli", requirement = "(>= 3.6.1)" }, + { name = "desc", requirement = "(>= 1.4.2)" }, + { name = "digest", requirement = "(>= 0.6.33)" }, + { name = "evaluate", requirement = "(>= 1.0.1)" }, + { name = "jsonlite", requirement = "(>= 1.8.7)" }, + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + { name = "magrittr", requirement = "(>= 2.0.3)" }, + { name = "pkgload", requirement = "(>= 1.3.2.1)" }, + { name = "praise", requirement = "(>= 1.0.0)" }, + { name = "processx", requirement = "(>= 3.8.2)" }, + { name = "ps", requirement = "(>= 1.7.5)" }, + { name = "R6", requirement = "(>= 2.5.1)" }, + { name = "rlang", requirement = "(>= 1.1.1)" }, + { name = "waldo", requirement = "(>= 0.6.0)" }, + { name = "withr", requirement = "(>= 3.0.2)" }, +] + +[[packages]] +name = "textshaping" +version = "1.0.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "lifecycle", + "stringi", + { name = "systemfonts", requirement = "(>= 1.1.0)" }, + { name = "cpp11", requirement = "(>= 0.2.1)" }, +] + +[[packages]] +name = "tibble" +version = "3.3.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + { name = "lifecycle", requirement = "(>= 1.0.0)" }, + "magrittr", + { name = "pillar", requirement = "(>= 1.8.1)" }, + "pkgconfig", + { name = "rlang", requirement = "(>= 1.0.2)" }, + { name = "vctrs", requirement = "(>= 0.5.0)" }, +] + +[[packages]] +name = "tidyr" +version = "1.3.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.4.1)" }, + { name = "dplyr", requirement = "(>= 1.0.10)" }, + "glue", + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + "magrittr", + { name = "purrr", requirement = "(>= 1.0.1)" }, + { name = "rlang", requirement = "(>= 1.1.1)" }, + { name = "stringr", requirement = "(>= 1.5.0)" }, + { name = "tibble", requirement = "(>= 2.1.1)" }, + { name = "tidyselect", requirement = "(>= 1.2.0)" }, + { name = "vctrs", requirement = "(>= 0.5.2)" }, + { name = "cpp11", requirement = "(>= 0.4.0)" }, +] + +[[packages]] +name = "tidyselect" +version = "1.2.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.3.0)" }, + { name = "glue", requirement = "(>= 1.3.0)" }, + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + { name = "rlang", requirement = "(>= 1.0.4)" }, + { name = "vctrs", requirement = "(>= 0.5.2)" }, + "withr", +] + +[[packages]] +name = "timechange" +version = "0.3.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cpp11", requirement = "(>= 0.2.7)" }, +] + +[[packages]] +name = "tinytex" +version = "0.57" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "xfun", requirement = "(>= 0.48)" }, +] + +[[packages]] +name = "tools" +version = "4.5.1" +source = { builtin = true } +force_source = false +dependencies = [] + +[[packages]] +name = "tzdb" +version = "0.5.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cpp11", requirement = "(>= 0.5.2)" }, +] + +[[packages]] +name = "urlchecker" +version = "1.0.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + "curl", + "xml2", +] + +[[packages]] +name = "usethis" +version = "3.1.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.0.1)" }, + { name = "clipr", requirement = "(>= 0.3.0)" }, + "crayon", + { name = "curl", requirement = "(>= 2.7)" }, + { name = "desc", requirement = "(>= 1.4.2)" }, + { name = "fs", requirement = "(>= 1.3.0)" }, + { name = "gert", requirement = "(>= 1.4.1)" }, + { name = "gh", requirement = "(>= 1.2.1)" }, + { name = "glue", requirement = "(>= 1.3.0)" }, + "jsonlite", + { name = "lifecycle", requirement = "(>= 1.0.0)" }, + "purrr", + "rappdirs", + { name = "rlang", requirement = "(>= 1.1.0)" }, + { name = "rprojroot", requirement = "(>= 1.2)" }, + "rstudioapi", + "whisker", + { name = "withr", requirement = "(>= 2.3.0)" }, + "yaml", +] + +[[packages]] +name = "utf8" +version = "1.2.6" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "vctrs" +version = "0.6.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + { name = "cli", requirement = "(>= 3.4.0)" }, + "glue", + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + { name = "rlang", requirement = "(>= 1.1.0)" }, +] + +[[packages]] +name = "viridisLite" +version = "0.4.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "vroom" +version = "1.6.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "bit64", + { name = "cli", requirement = "(>= 3.2.0)" }, + "crayon", + "glue", + "hms", + { name = "lifecycle", requirement = "(>= 1.0.3)" }, + { name = "rlang", requirement = "(>= 0.4.2)" }, + { name = "tibble", requirement = "(>= 2.0.0)" }, + "tidyselect", + { name = "tzdb", requirement = "(>= 0.1.1)" }, + { name = "vctrs", requirement = "(>= 0.2.0)" }, + "withr", + { name = "cpp11", requirement = "(>= 0.2.0)" }, + { name = "progress", requirement = "(>= 1.2.1)" }, +] + +[[packages]] +name = "waldo" +version = "0.6.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + { name = "diffobj", requirement = "(>= 0.3.4)" }, + "glue", + { name = "rlang", requirement = "(>= 1.1.0)" }, +] + +[[packages]] +name = "whisker" +version = "0.4.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "whoami" +version = "1.3.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "httr", + "jsonlite", +] + +[[packages]] +name = "withr" +version = "3.0.2" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "xfun" +version = "0.53" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "xml2" +version = "1.4.0" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "cli", + { name = "rlang", requirement = "(>= 1.1.0)" }, +] + +[[packages]] +name = "xmlparsedata" +version = "1.0.5" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "xopen" +version = "1.0.1" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [ + "processx", +] + +[[packages]] +name = "xtable" +version = "1.8-4" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "yaml" +version = "2.3.10" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] + +[[packages]] +name = "zip" +version = "2.3.3" +source = { repository = "https://cloud.r-project.org/" } +force_source = false +dependencies = [] diff --git a/tests/palmerpenguins b/tests/palmerpenguins index 15a9514..8ada220 160000 --- a/tests/palmerpenguins +++ b/tests/palmerpenguins @@ -1 +1 @@ -Subproject commit 15a9514b8df460dec364a7ba0706762b5a95e8b7 +Subproject commit 8ada2205556e0fd006497b1a55db948238708868 diff --git a/tests/testthat/helpers-testing.R b/tests/testthat/helpers-testing.R new file mode 100644 index 0000000..960fa4a --- /dev/null +++ b/tests/testthat/helpers-testing.R @@ -0,0 +1,33 @@ +# Test helpers for fairenough + +create_test_data <- function(temp_dir) { + # Create simple test datasets + iris_path <- file.path(temp_dir, "iris.csv") + mtcars_path <- file.path(temp_dir, "mtcars.csv") + + write.csv(iris, iris_path, row.names = FALSE) + write.csv(mtcars, mtcars_path, row.names = FALSE) + + return(c(iris_path, mtcars_path)) +} + +create_messy_data <- function(temp_dir) { + # Create data with column names that need janitor cleaning + messy_data <- data.frame( + `Bad Name!` = 1:3, + `Another Bad Name` = 4:6, + `spaces and symbols@#` = 7:9, + check.names = FALSE + ) + + messy_path <- file.path(temp_dir, "messy.csv") + write.csv(messy_data, messy_path, row.names = FALSE) + + return(messy_path) +} + +cleanup_temp_dir <- function(temp_dir) { + if (dir.exists(temp_dir)) { + unlink(temp_dir, recursive = TRUE, force = TRUE) + } +} \ No newline at end of file diff --git a/tests/testthat/test-consistency.R b/tests/testthat/test-consistency.R new file mode 100644 index 0000000..67f60e5 --- /dev/null +++ b/tests/testthat/test-consistency.R @@ -0,0 +1,80 @@ +# Test data consistency through pipeline + +test_that("row counts preserved through pipeline", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Create test data + test_files <- create_test_data(temp_dir) + + # Run setup and process + suppressMessages({ + setup(base_path = temp_dir, verbose = FALSE) + process(base_path = temp_dir, verbose = FALSE) + }) + + # Check row counts match + iris_rda_path <- file.path(temp_dir, "data", "iris.rda") + iris_csv_path <- file.path(temp_dir, "inst", "extdata", "iris.csv") + + if (file.exists(iris_rda_path) && file.exists(iris_csv_path)) { + # Load RDA + temp_env <- new.env() + load(iris_rda_path, envir = temp_env) + rda_data <- get(ls(temp_env)[1], envir = temp_env) + + # Load CSV + csv_data <- read.csv(iris_csv_path) + + expect_equal(nrow(rda_data), nrow(csv_data)) + expect_equal(nrow(rda_data), nrow(iris)) # Original data + } +}) + +test_that("janitor cleaning applied consistently", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Create messy data + create_messy_data(temp_dir) + + suppressMessages({ + setup(base_path = temp_dir, verbose = FALSE) + process(base_path = temp_dir, verbose = FALSE) + }) + + # Check that RDA and CSV have same cleaned names + rda_path <- file.path(temp_dir, "data", "messy.rda") + csv_path <- file.path(temp_dir, "inst", "extdata", "messy.csv") + + if (file.exists(rda_path) && file.exists(csv_path)) { + temp_env <- new.env() + load(rda_path, envir = temp_env) + rda_data <- get(ls(temp_env)[1], envir = temp_env) + + csv_data <- read.csv(csv_path) + + # Names should be cleaned and identical + expect_equal(names(rda_data), names(csv_data)) + expect_false(any(grepl("[^a-zA-Z0-9_]", names(rda_data)))) # No special chars + } +}) + +test_that("file consistency check works correctly", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Create test data and process + create_test_data(temp_dir) + + suppressMessages({ + setup(base_path = temp_dir, verbose = FALSE) + process(base_path = temp_dir, verbose = FALSE) + }) + + # Should pass consistency check + expect_true(check_file_consistency(temp_dir)) +}) \ No newline at end of file diff --git a/tests/testthat/test-errors.R b/tests/testthat/test-errors.R new file mode 100644 index 0000000..2575c32 --- /dev/null +++ b/tests/testthat/test-errors.R @@ -0,0 +1,63 @@ +# Test error handling + +test_that("handles missing data_raw directory gracefully", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Setup basic structure but no data_raw + suppressMessages(setup(base_path = temp_dir, verbose = FALSE)) + unlink(file.path(temp_dir, "data_raw"), recursive = TRUE) + + # Should handle missing data_raw + expect_message( + process(base_path = temp_dir, verbose = TRUE), + "data_raw" + ) +}) + +test_that("handles empty directories appropriately", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + suppressMessages(setup(base_path = temp_dir, verbose = FALSE)) + + # Should handle empty data_raw + expect_message( + process(base_path = temp_dir, verbose = TRUE), + "No data files" + ) +}) + +test_that("handles invalid file paths", { + expect_false(check_description_exists("/nonexistent/path")) + expect_false(check_dirs_exist("/nonexistent/path")) + expect_false(check_raw_data_files("/nonexistent/path")) +}) + +test_that("validation works with missing base_path", { + # Should use current directory by default + result <- validate_setup_completed() + expect_type(result, "list") + expect_named(result, c("all_passed", "all_required_passed", "total_checks", + "passed_checks", "failed_checks", "items")) +}) + +test_that("file consistency handles edge cases", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Create required directories + dir.create(file.path(temp_dir, "data_raw")) + dir.create(file.path(temp_dir, "data")) + dir.create(file.path(temp_dir, "inst", "extdata"), recursive = TRUE) + + # No files - should return TRUE (consistent empty state) + expect_true(check_file_consistency(temp_dir)) + + # Add dictionary.csv - should still be consistent + write.csv(data.frame(x = 1), file.path(temp_dir, "inst", "extdata", "dictionary.csv")) + expect_true(check_file_consistency(temp_dir)) +}) \ No newline at end of file diff --git a/tests/testthat/test-file-formats.R b/tests/testthat/test-file-formats.R new file mode 100644 index 0000000..cdc87f2 --- /dev/null +++ b/tests/testthat/test-file-formats.R @@ -0,0 +1,40 @@ +# Test file format support + +test_that("reads CSV files correctly", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Create test CSV + test_data <- data.frame(x = 1:3, y = c("a", "b", "c")) + csv_path <- file.path(temp_dir, "test.csv") + write.csv(test_data, csv_path, row.names = FALSE) + + # Test reading + result <- read_data(csv_path) + + expect_equal(nrow(result), 3) + expect_equal(ncol(result), 2) + expect_equal(result$x, 1:3) +}) + +test_that("detects supported file formats", { + expect_true(is_supported_file_type("data.csv")) + expect_true(is_supported_file_type("data.xlsx")) + expect_true(is_supported_file_type("data.xls")) + expect_false(is_supported_file_type("data.txt")) + expect_false(is_supported_file_type("data.docx")) +}) + +test_that("filters supported files correctly", { + files <- c("data.csv", "readme.txt", "data.xlsx", "script.R", "data.xls") + result <- filter_supported_files(files) + + expected <- c("data.csv", "data.xlsx", "data.xls") + expect_equal(result, expected) +}) + +test_that("handles empty file lists", { + expect_equal(filter_supported_files(character(0)), character(0)) + expect_equal(filter_supported_files(c("readme.txt")), character(0)) +}) \ No newline at end of file diff --git a/tests/testthat/test-pipeline.R b/tests/testthat/test-pipeline.R new file mode 100644 index 0000000..b969be5 --- /dev/null +++ b/tests/testthat/test-pipeline.R @@ -0,0 +1,104 @@ +# Test pipeline steps using existing validation system + +test_that("setup creates proper structure", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Run setup + suppressMessages({ + result <- setup(base_path = temp_dir, verbose = FALSE) + }) + + # Check core components (skip .Rproj which may not be created in temp dirs) + expect_true(check_description_exists(temp_dir)) + expect_true(check_dirs_exist(temp_dir)) + + # Check that most validations pass + validation <- validate_setup_completed(temp_dir) + expect_gte(validation$passed_checks, 3) # At least 3 out of 4 should pass +}) + +test_that("process handles data files correctly", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Create test data and setup + create_test_data(temp_dir) + suppressMessages(setup(base_path = temp_dir, verbose = FALSE)) + + # Run process + suppressMessages({ + result <- process(base_path = temp_dir, verbose = FALSE) + }) + + # Use existing validation helpers + expect_true(check_rda_files(temp_dir)) + expect_true(check_csv_files(temp_dir)) + + # Full validation should pass + validation <- validate_processing_completed(temp_dir) + expect_true(validation$all_required_passed) +}) + +test_that("collect updates DESCRIPTION", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + suppressMessages(setup(base_path = temp_dir, verbose = FALSE)) + + # Skip collect test in non-interactive mode (requires user input) + skip("collect() requires interactive input or mocking") + + # Check that DESCRIPTION was created/updated + expect_true(check_description_exists(temp_dir)) +}) + +test_that("generate creates dictionary", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Setup with data + create_test_data(temp_dir) + suppressMessages({ + setup(base_path = temp_dir, verbose = FALSE) + process(base_path = temp_dir, verbose = FALSE) + }) + + # Run generate without LLM + suppressMessages({ + result <- generate(base_path = temp_dir, verbose = FALSE) + }) + + # Check dictionary was created + expect_true(check_dictionary_file(temp_dir)) + expect_true(check_dictionary_structure(temp_dir)) +}) + +test_that("pipeline steps complete in sequence", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + create_test_data(temp_dir) + + # Run each step and verify with validation + suppressMessages({ + setup(base_path = temp_dir, verbose = FALSE) + expect_gte(validate_setup_completed(temp_dir)$passed_checks, 3) + + process(base_path = temp_dir, verbose = FALSE) + expect_true(validate_processing_completed(temp_dir)$all_required_passed) + + # Skip collect in automated tests (needs interactive input) + # collect(base_path = temp_dir, interactive = FALSE, verbose = FALSE) + + generate(base_path = temp_dir, verbose = FALSE) + # Dictionary should at least be created, even if not fully filled + expect_true(check_dictionary_file(temp_dir)) + expect_true(check_dictionary_structure(temp_dir)) + }) +}) \ No newline at end of file diff --git a/tests/testthat/test-validation.R b/tests/testthat/test-validation.R new file mode 100644 index 0000000..64ec8d9 --- /dev/null +++ b/tests/testthat/test-validation.R @@ -0,0 +1,88 @@ +# Test validation system + +test_that("validation functions return consistent structure", { + validation_functions <- list( + validate_setup_completed(), + validate_processing_completed(), + validate_metadata_collected(), + validate_dictionary_completed(), + validate_build_completed() + ) + + expected_names <- c("all_passed", "all_required_passed", "total_checks", + "passed_checks", "failed_checks", "items") + + for (validation in validation_functions) { + expect_type(validation, "list") + expect_named(validation, expected_names) + expect_type(validation$all_passed, "logical") + expect_type(validation$all_required_passed, "logical") + expect_type(validation$items, "list") + } +}) + +test_that("validation helpers work correctly", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Test description check + expect_false(check_description_exists(temp_dir)) + writeLines("Package: test", file.path(temp_dir, "DESCRIPTION")) + expect_true(check_description_exists(temp_dir)) + + # Test directory check + expect_false(check_dirs_exist(temp_dir)) + dir.create(file.path(temp_dir, "data")) + dir.create(file.path(temp_dir, "data_raw")) + dir.create(file.path(temp_dir, "inst", "extdata"), recursive = TRUE) + expect_true(check_dirs_exist(temp_dir)) +}) + +test_that("file existence checks work", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + # Test data file checks + expect_false(check_raw_data_files(temp_dir)) + expect_false(check_rda_files(temp_dir)) + expect_false(check_csv_files(temp_dir)) + + # Create directories + dir.create(file.path(temp_dir, "data_raw")) + dir.create(file.path(temp_dir, "data")) + dir.create(file.path(temp_dir, "inst", "extdata"), recursive = TRUE) + + # Add files + write.csv(iris, file.path(temp_dir, "data_raw", "test.csv")) + save(iris, file = file.path(temp_dir, "data", "test.rda")) + write.csv(iris, file.path(temp_dir, "inst", "extdata", "test.csv")) + + expect_true(check_raw_data_files(temp_dir)) + expect_true(check_rda_files(temp_dir)) + expect_true(check_csv_files(temp_dir)) +}) + +test_that("dictionary checks work", { + temp_dir <- tempfile() + dir.create(temp_dir) + on.exit(cleanup_temp_dir(temp_dir)) + + expect_false(check_dictionary_file(temp_dir)) + + # Create dictionary + dir.create(file.path(temp_dir, "inst", "extdata"), recursive = TRUE) + dict <- data.frame( + directory = "data", + file_name = "test.rda", + variable_name = "x", + variable_type = "integer", + description = "test variable" + ) + write.csv(dict, file.path(temp_dir, "inst", "extdata", "dictionary.csv"), row.names = FALSE) + + expect_true(check_dictionary_file(temp_dir)) + expect_true(check_dictionary_structure(temp_dir)) + expect_true(check_descriptions_filled(temp_dir)) +}) \ No newline at end of file