diff --git a/.github/workflows/build-deploy-pr.yaml b/.github/workflows/build-deploy-pr.yaml index 10fc7ec..736a486 100644 --- a/.github/workflows/build-deploy-pr.yaml +++ b/.github/workflows/build-deploy-pr.yaml @@ -25,9 +25,9 @@ jobs: - name: build container run: | docker build -t ${{ env.container }} . - - name: test run container - run: | - docker run --rm -v "${PWD}/test":/tmp ${{ env.container }} my_address_file_geocoded.csv cchmc + # - name: test run container + # run: | + # docker run --rm -v "${PWD}/test":/tmp ${{ env.container }} my_address_file_geocoded.csv cchmc - name: login to ghcr uses: docker/login-action@v1 with: diff --git a/.gitignore b/.gitignore index f14f2b7..6ae07a4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ .DS_Store *.xlsx isochrones/ +isochrones_no_overlap.rds diff --git a/.renvignore b/.renvignore new file mode 100644 index 0000000..5a2b556 --- /dev/null +++ b/.renvignore @@ -0,0 +1,10 @@ +.Rproj.user +.Rhistory +.RData +.Ruserdata +.DS_Store +*.xlsx +isochrones/ +isochrones_no_overlap.rds +download_isochrones.R +create_readme_fig.R diff --git a/Dockerfile b/Dockerfile index f6cddbf..05a32e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,8 @@ -FROM rocker/r-ver:4.0.5 +FROM rocker/r-ver:4.3.0 # DeGAUSS container metadata ENV degauss_name="drivetime" -ENV degauss_version="1.2.0" +ENV degauss_version="1.3.0" ENV degauss_description="distance and drive time to care sites" ENV degauss_argument="care_site [default: none]" @@ -14,7 +14,7 @@ LABEL "org.degauss.argument"="${degauss_argument}" RUN R --quiet -e "install.packages('remotes', repos = c(CRAN = 'https://packagemanager.rstudio.com/all/__linux__/focal/latest'))" -RUN R --quiet -e "remotes::install_github('rstudio/renv@0.15.4')" +RUN R --quiet -e "remotes::install_github('rstudio/renv@v1.0.2')" WORKDIR /app @@ -37,6 +37,8 @@ ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/atlanta_is ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/bch_isochrones.rds isochrones/bch_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/cc_isochrones.rds isochrones/cc_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/cchmc_isochrones.rds isochrones/cchmc_isochrones.rds +ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/chla_isochrones.rds isochrones/chla_isochrones.rds +ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/chnola_isochrones.rds isochrones/chnola_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/chop_isochrones.rds isochrones/chop_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/cnmc_isochrones.rds isochrones/cnmc_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/cohen_isochrones.rds isochrones/cohen_isochrones.rds @@ -69,6 +71,7 @@ ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/omaha_isoc ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/packard_isochrones.rds isochrones/packard_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/palmer_isochrones.rds isochrones/palmer_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/primary_isochrones.rds isochrones/primary_isochrones.rds +ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/rady_isochrones.rds isochrones/rady_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/rainbow_isochrones.rds isochrones/rainbow_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/riley_isochrones.rds isochrones/riley_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/seattle_isochrones.rds isochrones/seattle_isochrones.rds @@ -82,6 +85,7 @@ ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/umich_isoc ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/unc_isochrones.rds isochrones/unc_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/upmc_isochrones.rds isochrones/upmc_isochrones.rds ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/uva_isochrones.rds isochrones/uva_isochrones.rds +ADD https://geomarker.s3-us-east-2.amazonaws.com/drivetime/isochrones/vandy_isochrones.rds isochrones/vandy_isochrones.rds COPY entrypoint.R . WORKDIR /tmp diff --git a/README.md b/README.md index 009dcdf..8df9684 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,10 @@ If `my_address_file_geocoded.csv` is a file in the current working directory with coordinate columns named `lat` and `lon`, then the [DeGAUSS command](https://degauss.org/using_degauss.html#DeGAUSS_Commands): ```sh -docker run --rm -v $PWD:/tmp ghcr.io/degauss-org/drivetime:1.2.0 my_address_file_geocoded.csv cchmc +docker run --rm -v $PWD:/tmp ghcr.io/degauss-org/drivetime:1.3.0 my_address_file_geocoded.csv cchmc ``` -will produce `my_address_file_geocoded_drivetime_1.1.0_cchmc.csv` with added columns: +will produce `my_address_file_geocoded_drivetime_1.3.0_cchmc.csv` with added columns: - **`drive_time`**: drive time in minutes (6-minute intervals; "> 60" if more than 1 hour drive time) - **`distance`**: distance in meters @@ -74,6 +74,10 @@ A.I. duPont Hospital for Children | `dupont` Rainbow Babies and Children's Hospital | `rainbow` UNC Hospitals Children's Specialty Clinic | `unc` Barbara Bush Children's Hospital at Maine Medical | `maine` +Children's Hospital of New Orleans | `chnola` +Rady Children's Hospital | `rady` +Children's Hospital Los Angeles | `chla` +Monroe Carell Jr. Children's Hospital at Vanderbilt | `vandy` ## Geomarker Methods diff --git a/center_addresses.csv b/center_addresses.csv index 0b939a9..7e5f010 100644 --- a/center_addresses.csv +++ b/center_addresses.csv @@ -50,4 +50,8 @@ Dell Children's Medical Center of Central Texas,dell,4900 Mueller Boulevard Aust A.I. duPont Hospital for Children,dupont,1600 Rockland Rd Wilmington DE 19803,39.778732,-75.556624 Rainbow Babies and Children's Hospital,rainbow,11100 Euclid Ave Cleveland OH 44106,41.504317,-81.60584 UNC Hospitals Children's Specialty Clinic,unc,101 Manning Drive Chapel Hill NC 27514,35.904679,-79.050713 -Barbara Bush Children's Hospital at Maine Medical,maine,22 Bramhall St Portland ME 04102,43.653371,-70.275146 \ No newline at end of file +Barbara Bush Children's Hospital at Maine Medical,maine,22 Bramhall St Portland ME 04102,43.653371,-70.275146 +Children's Hospital of New Orleans,chnola,200 Henry Clay Ave New Orleans LA 70118,29.9177976,-90.1299919 +Rady Children's Hospital,rady,3020 Children's Way San Diego CA 92123,32.797762,-117.1539819 +Children's Hospital Los Angeles,chla,4650 Sunset Blvd Los Angeles CA 90027,34.0977464,-118.2924558 +Monroe Carell Jr. Children's Hospital at Vanderbilt,vandy,2200 Children's Way Nashville TN 37232,36.1393484,-86.8049943 \ No newline at end of file diff --git a/download_isochrones.R b/download_isochrones.R index cf59b33..47f3d25 100644 --- a/download_isochrones.R +++ b/download_isochrones.R @@ -22,6 +22,7 @@ get_isochrones <- function(x) { # geom_sf(data = ex[1,]) isochrones <- mappp::mappp(1:nrow(centers), get_isochrones) +# isochrones[[48]] <- get_isochrones(48) saveRDS(isochrones, 'isochrones/isochrones.rds') # isochrones <- readRDS('drivetime_distance/cf_isochrones.rds') @@ -47,4 +48,5 @@ purrr::walk(1:length(isochrones_no_overlap), ~saveRDS(isochrones_no_overlap[[.x]], glue::glue('isochrones/{names(isochrones_no_overlap)[.x]}_isochrones.rds'))) - +system2("aws s3 cp isochrones s3://geomarker/drivetime/isochrones --recursive") +system2("aws s3 cp center_addresses.csv s3://geomarker/drivetime/") diff --git a/drivetime.R b/drivetime.R deleted file mode 100755 index b392235..0000000 --- a/drivetime.R +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/local/bin/Rscript - -dht::greeting(geomarker_name = 'drivetime', version = '1.0', description = 'calculates drivetime to specified care center') - -suppressPackageStartupMessages(library(argparser)) -p <- arg_parser('return drive time and distance (m) for geocoded CSV file') -p <- add_argument(p, 'file_name', help = 'name of geocoded csv file') -p <- add_argument(p, 'site', help = 'abbreviation for care center') -args <- parse_args(p) - -old_warn <- getOption("warn") -options(warn = -1) - -suppressPackageStartupMessages(library(sf)) -suppressPackageStartupMessages(library(dplyr)) -suppressPackageStartupMessages(library(readr)) - -options(warn = old_warn) - -centers <- read_csv('/app/center_addresses.csv') -# centers <- read_csv('center_addresses.csv') - -selected_site <- args$site -## selected_site <- 'cchmc' # for testing - -if (! selected_site %in% centers$abbreviation){ - stop('site argument is invalid or missing; please consult documentation for details', call. = FALSE) -} - -message('\nloading and projecting input file...') -raw_data <- suppressMessages(read_csv(args$file_name)) -## raw_data <- suppressMessages(read_csv('test/my_address_file_geocoded.csv')) - -d_cc <- complete.cases(raw_data[ , c('lat','lon')]) - -if (! all(d_cc)) { - message('\nWARNING: input file contains ', sum(!d_cc), ' rows with missing coordinates.') - message('\nWill return NA for drive time and distance for these rows.') -} - -d <- raw_data[d_cc, ] - -# store coords as separate numeric columns because -# trans and back trans lead to rounding errors, making them unsuitable for merging -d$old_lat <- d$lat -d$old_lon <- d$lon - -d <- d %>% - st_as_sf(coords = c('lon', 'lat'), crs = 4326) %>% - st_transform(5072) - -message('\nloading isochrone shape files...') -isochrones_no_overlap <- readRDS("/app/isochrones_no_overlap.rds") # 5072 projection -# isochrones_no_overlap <- readRDS("isochrones_no_overlap.rds") - -dt_polygons <- - selected_site %>% - isochrones_no_overlap[[.]] - -message('\nfinding drive time for each point...') -d <- st_join(d, dt_polygons) %>% - mutate(drive_time = ifelse(!is.na(drive_time), as.character(drive_time), "> 60")) - -message('\nfinding distance (m) for each point...') - -centers <- centers %>% - st_as_sf(coords = c('lon', 'lat'), crs = 4326) %>% - st_transform(5072) - -d$distance <- - st_distance(centers %>% filter(abbreviation == selected_site), - d, - by_element = TRUE) - -# remove transformed coords and add back "old" coords -d <- d %>% - st_set_geometry(NULL) %>% - rename(lon = old_lon, - lat = old_lat) - -# add back in original missing coords data for output file -out_file <- suppressWarnings(bind_rows(raw_data[!d_cc, ], d)) - -out_file_name <- paste0(tools::file_path_sans_ext(args$file_name), '_drivetime_v1.0_', selected_site, '.csv') - -write_csv(out_file, out_file_name) - -message('\nFINISHED! output written to ', out_file_name) diff --git a/entrypoint.R b/entrypoint.R index a0d7e70..7f2e40d 100755 --- a/entrypoint.R +++ b/entrypoint.R @@ -15,7 +15,7 @@ doc <- " opt <- docopt::docopt(doc) ## for interactive testing -## opt <- docopt::docopt(doc, args = 'test/my_address_file_geocoded.csv') +## opt <- docopt::docopt(doc, args = c('my_address_file_geocoded.csv', 'cchmc')) centers <- readr::read_csv('/app/center_addresses.csv') selected_site <- opt$site diff --git a/isochrones_no_overlap.rds b/isochrones_no_overlap.rds deleted file mode 100644 index 026ab8a..0000000 Binary files a/isochrones_no_overlap.rds and /dev/null differ diff --git a/renv.lock b/renv.lock index b7c06b2..a97eb30 100644 --- a/renv.lock +++ b/renv.lock @@ -1,6 +1,6 @@ { "R": { - "Version": "4.0.4", + "Version": "4.3.0", "Repositories": [ { "Name": "CRAN", @@ -11,340 +11,168 @@ "Packages": { "DBI": { "Package": "DBI", - "Version": "1.1.1", + "Version": "1.1.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "030aaec5bc6553f35347cbb1e70b1a17", - "Requirements": [] + "Requirements": [ + "R", + "methods" + ], + "Hash": "b2866e62bab9378c3cc9476a1954226b" }, "KernSmooth": { "Package": "KernSmooth", - "Version": "2.23-18", + "Version": "2.23-20", "Source": "Repository", "Repository": "CRAN", - "Hash": "9e703ad8bf0e99f3691f05da32dfe68b", - "Requirements": [] + "Requirements": [ + "R", + "stats" + ], + "Hash": "8dcfa99b14c296bc9f1fd64d52fd3ce7" }, "MASS": { "Package": "MASS", - "Version": "7.3-53", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d1bc1c8e9c0ace57ec9ffea01021d45f", - "Requirements": [] - }, - "Matrix": { - "Package": "Matrix", - "Version": "1.3-2", + "Version": "7.3-60", "Source": "Repository", "Repository": "CRAN", - "Hash": "ff280503079ad8623d3c4b1519b24ea2", "Requirements": [ - "lattice" - ] + "R", + "grDevices", + "graphics", + "methods", + "stats", + "utils" + ], + "Hash": "a56a6365b3fa73293ea8d084be0d9bb0" }, "R6": { "Package": "R6", "Version": "2.5.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "470851b6d5d0ac559e9d01bb352b4021", - "Requirements": [] - }, - "RColorBrewer": { - "Package": "RColorBrewer", - "Version": "1.1-2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e031418365a7f7a766181ab5a41a5716", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "470851b6d5d0ac559e9d01bb352b4021" }, "Rcpp": { "Package": "Rcpp", - "Version": "1.0.8.3", + "Version": "1.0.11", "Source": "Repository", "Repository": "CRAN", - "Hash": "32e79b908fda56ee57fe518a8d37b864", - "Requirements": [] - }, - "argparser": { - "Package": "argparser", - "Version": "0.7.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ef22bb1e708cb17be24197f9d85ff481", - "Requirements": [] - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e8a22846fff485f0be3770c2da758713", "Requirements": [ - "sys" - ] - }, - "assertthat": { - "Package": "assertthat", - "Version": "0.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "50c838a310445e954bc13f26f26a6ecf", - "Requirements": [] - }, - "backports": { - "Package": "backports", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "644043219fc24e190c2f620c1a380a69", - "Requirements": [] - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "543776ae6848fde2f48ff3816d0628bc", - "Requirements": [] + "methods", + "utils" + ], + "Hash": "ae6cbbe1492f4de79c45fce06f967ce8" }, "bit": { "Package": "bit", - "Version": "4.0.4", + "Version": "4.0.5", "Source": "Repository", "Repository": "CRAN", - "Hash": "f36715f14d94678eea9933af927bc15d", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "d242abec29412ce988848d0294b208fd" }, "bit64": { "Package": "bit64", "Version": "4.0.5", "Source": "Repository", "Repository": "CRAN", - "Hash": "9fe98599ca456d6552421db0d6772d8f", - "Requirements": [ - "bit" - ] - }, - "blob": { - "Package": "blob", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "9addc7e2c5954eca5719928131fed98c", - "Requirements": [ - "rlang", - "vctrs" - ] - }, - "brew": { - "Package": "brew", - "Version": "1.0-6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "92a5f887f9ae3035ac7afde22ba73ee9", - "Requirements": [] - }, - "broom": { - "Package": "broom", - "Version": "0.7.9", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "9b1e2c1f75b349e3ffa7e9c69eec0c52", - "Requirements": [ - "backports", - "dplyr", - "ellipsis", - "generics", - "glue", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyr" - ] - }, - "cachem": { - "Package": "cachem", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5346f76a33eb7417812c270b04a5581b", "Requirements": [ - "fastmap", - "rlang" - ] - }, - "callr": { - "Package": "callr", - "Version": "3.7.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "461aa75a11ce2400245190ef5d3995df", - "Requirements": [ - "R6", - "processx" - ] - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c", - "Requirements": [ - "rematch", - "tibble" - ] + "R", + "bit", + "methods", + "stats", + "utils" + ], + "Hash": "9fe98599ca456d6552421db0d6772d8f" }, "class": { "Package": "class", - "Version": "7.3-18", + "Version": "7.3-22", "Source": "Repository", "Repository": "CRAN", - "Hash": "15ef288688a6919417ade6251deea2b3", "Requirements": [ - "MASS" - ] + "MASS", + "R", + "stats", + "utils" + ], + "Hash": "f91f6b29f38b8c280f2b9477787d4bb2" }, "classInt": { "Package": "classInt", - "Version": "0.4-3", + "Version": "0.4-10", "Source": "Repository", "Repository": "CRAN", - "Hash": "17bdfa3c51df4a6c82484d13b11fb380", "Requirements": [ "KernSmooth", + "R", "class", - "e1071" - ] + "e1071", + "grDevices", + "graphics", + "stats" + ], + "Hash": "f5a40793b1ae463a7ffb3902a95bf864" }, "cli": { "Package": "cli", - "Version": "3.2.0", + "Version": "3.6.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "1bdb126893e9ce6aae50ad1d6fc32faf", "Requirements": [ - "glue" - ] + "R", + "utils" + ], + "Hash": "89e6d8219950eac806ae0c489052048a" }, "clipr": { "Package": "clipr", "Version": "0.8.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042", - "Requirements": [] - }, - "colorspace": { - "Package": "colorspace", - "Version": "2.0-3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "bb4341986bc8b914f0f0acf2e4a3f2f7", - "Requirements": [] + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" }, "cpp11": { "Package": "cpp11", - "Version": "0.4.2", + "Version": "0.4.6", "Source": "Repository", "Repository": "CRAN", - "Hash": "fa53ce256cd280f468c080a58ea5ba8c", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "707fae4bbf73697ec8d85f9d7076c061" }, "crayon": { "Package": "crayon", - "Version": "1.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8dc45fd8a1ee067a92b85ef274e66d6a", - "Requirements": [] - }, - "credentials": { - "Package": "credentials", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "93762d0a34d78e6a025efdbfb5c6bb41", - "Requirements": [ - "askpass", - "curl", - "jsonlite", - "openssl", - "sys" - ] - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6aa54f69598c32177e920eb3402e8293", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ] - }, - "curl": { - "Package": "curl", - "Version": "4.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "022c42d49c28e95d69ca60446dbabf88", - "Requirements": [] - }, - "dbplyr": { - "Package": "dbplyr", - "Version": "2.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f30247ffeeebe8d9842dc68fe63e043b", - "Requirements": [ - "DBI", - "R6", - "assertthat", - "blob", - "dplyr", - "ellipsis", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "tibble", - "tidyselect", - "vctrs", - "withr" - ] - }, - "desc": { - "Package": "desc", - "Version": "1.4.1", + "Version": "1.5.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "eebd27ee58fcc58714eedb7aa07d8ad1", "Requirements": [ - "R6", - "cli", - "rprojroot" - ] + "grDevices", + "methods", + "utils" + ], + "Hash": "e8a1e41acf02548751f45c718d55aa6a" }, "dht": { "Package": "dht", - "Version": "1.0.3", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteRepo": "dht", - "RemoteUsername": "degauss-org", + "Version": "1.2.3", + "Source": "Repository", + "Repository": "https://geomarker-io.r-universe.dev", + "RemoteUrl": "https://github.com/degauss-org/dht", "RemoteRef": "HEAD", - "RemoteSha": "c9839a24c19c795d28bfb93ed18176f2e784ea04", - "Hash": "df41f7fed40f7002924f42bb53daca44", + "RemoteSha": "4d10437461416e688ea259a37c2ce3b5bae96238", "Requirements": [ + "R", "cli", "dplyr", "fs", @@ -354,805 +182,237 @@ "ps", "purrr", "readr", - "renv", "stringr", "tidyr", - "usethis", + "tidyselect", "whisker", "withr" - ] - }, - "digest": { - "Package": "digest", - "Version": "0.6.29", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "cf6b206a045a684728c3267ef7596190", - "Requirements": [] + ], + "Hash": "e6c0fc217d4a523d92d002184e1e6618" }, "docopt": { "Package": "docopt", "Version": "0.7.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "e9eeef7931ee99ca0093f3f20b88e09b", - "Requirements": [] + "Requirements": [ + "methods" + ], + "Hash": "e9eeef7931ee99ca0093f3f20b88e09b" }, "dplyr": { "Package": "dplyr", - "Version": "1.0.8", + "Version": "1.1.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "ef47665e64228a17609d6df877bf86f2", "Requirements": [ + "R", "R6", + "cli", "generics", "glue", "lifecycle", "magrittr", + "methods", "pillar", "rlang", "tibble", "tidyselect", - "vctrs" - ] - }, - "e1071": { - "Package": "e1071", - "Version": "1.7-8", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "28e8460677280027c8580b5450aa091e", - "Requirements": [ - "class", - "proxy" - ] - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077", - "Requirements": [ - "rlang" - ] - }, - "evaluate": { - "Package": "evaluate", - "Version": "0.14", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ec8ca05cffcc70569eaaad8469d2a3a7", - "Requirements": [] - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "83a8afdbe71839506baa9f90eebad7ec", - "Requirements": [] - }, - "farver": { - "Package": "farver", - "Version": "2.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c98eb5133d9cb9e1622b8691487f11bb", - "Requirements": [] - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "77bd60a6157420d4ffa93b27cf6a58b8", - "Requirements": [] - }, - "forcats": { - "Package": "forcats", - "Version": "0.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "81c3244cab67468aac4c60550832655d", - "Requirements": [ - "ellipsis", - "magrittr", - "rlang", - "tibble" - ] - }, - "fs": { - "Package": "fs", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7c89603d81793f0d5486d91ab1fc6f1d", - "Requirements": [] - }, - "generics": { - "Package": "generics", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "177475892cf4a55865868527654a7741", - "Requirements": [] - }, - "geojsonsf": { - "Package": "geojsonsf", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "1d436c89b02dc6b9bce41a084d371b6a", - "Requirements": [ - "Rcpp", - "geometries", - "jsonify", - "rapidjsonr", - "sfheaders" - ] - }, - "geometries": { - "Package": "geometries", - "Version": "0.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "be29054e97e756ade56d13a89c6d5243", - "Requirements": [ - "Rcpp" - ] - }, - "gert": { - "Package": "gert", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8fddce7cbd59467106266a6e93e253b4", - "Requirements": [ - "askpass", - "credentials", - "openssl", - "rstudioapi", - "sys", - "zip" - ] - }, - "ggplot2": { - "Package": "ggplot2", - "Version": "3.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d7566c471c7b17e095dd023b9ef155ad", - "Requirements": [ - "MASS", - "digest", - "glue", - "gtable", - "isoband", - "mgcv", - "rlang", - "scales", - "tibble", - "withr" - ] - }, - "gh": { - "Package": "gh", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "38c2580abbda249bd6afeec00d14f531", - "Requirements": [ - "cli", - "gitcreds", - "httr", - "ini", - "jsonlite" - ] - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f3aefccc1cc50de6338146b62f115de8", - "Requirements": [] - }, - "glue": { - "Package": "glue", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e", - "Requirements": [] - }, - "gridExtra": { - "Package": "gridExtra", - "Version": "2.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7d7f283939f563670a697165b2cf5560", - "Requirements": [ - "gtable" - ] - }, - "gtable": { - "Package": "gtable", - "Version": "0.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ac5c6baf7822ce8732b343f14c072c4d", - "Requirements": [] - }, - "haven": { - "Package": "haven", - "Version": "2.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "221d0ad75dfa03ebf17b1a4cc5c31dfc", - "Requirements": [ - "Rcpp", - "forcats", - "hms", - "readr", - "rlang", - "tibble", - "tidyselect", - "vctrs" - ] - }, - "highr": { - "Package": "highr", - "Version": "0.8", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4dc5bb88961e347a0f4d8aad597cbfac", - "Requirements": [] - }, - "hms": { - "Package": "hms", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5b8a2dd0fdbe2ab4f6081e6c7be6dfca", - "Requirements": [ - "ellipsis", - "lifecycle", - "pkgconfig", - "rlang", - "vctrs" - ] - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "526c484233f42522278ab06fb185cb26", - "Requirements": [ - "base64enc", - "digest", - "fastmap", - "rlang" - ] - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.5.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "76147821cd3fcd8c4b04e1ef0498e7fb", - "Requirements": [ - "htmltools", - "jsonlite", - "yaml" - ] - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a42959b003aad9fc351b10250c5a6b77", - "Requirements": [ - "R6", - "Rcpp", - "later", - "promises" - ] - }, - "httr": { - "Package": "httr", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a525aba14184fec243f9eaec62fbed43", - "Requirements": [ - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ] - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6154ec2223172bce8162d4153cda21f7", - "Requirements": [] - }, - "isoband": { - "Package": "isoband", - "Version": "0.2.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7ab57a6de7f48a8dc84910d1eca42883", - "Requirements": [] - }, - "jsonify": { - "Package": "jsonify", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f435875f0eb7de52ade944ed82ee9089", - "Requirements": [ - "Rcpp", - "rapidjsonr" - ] - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d07e729b27b372429d42d24d503613a0", - "Requirements": [] - }, - "knitr": { - "Package": "knitr", - "Version": "1.31", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c3994c036d19fc22c5e2a209c8298bfb", - "Requirements": [ - "evaluate", - "highr", - "markdown", - "stringr", - "xfun", - "yaml" - ] - }, - "labeling": { - "Package": "labeling", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "3d5108641f47470611a32d0bdf357a72", - "Requirements": [] - }, - "later": { - "Package": "later", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e", - "Requirements": [ - "Rcpp", - "rlang" - ] - }, - "lattice": { - "Package": "lattice", - "Version": "0.20-41", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "fbd9285028b0263d76d18c95ae51a53d", - "Requirements": [] - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d908914ae53b04d4c0c0fd72ecc35370", - "Requirements": [] - }, - "leafem": { - "Package": "leafem", - "Version": "0.1.6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "39682b851cfb151d02be19c5575bdc00", - "Requirements": [ - "base64enc", - "geojsonsf", - "htmltools", - "htmlwidgets", - "leaflet", - "png", - "raster", - "sf" - ] - }, - "leaflet": { - "Package": "leaflet", - "Version": "2.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "97fadb60ef6eb8524b9f6e2c4a69ee93", - "Requirements": [ - "RColorBrewer", - "base64enc", - "crosstalk", - "htmltools", - "htmlwidgets", - "leaflet.providers", - "magrittr", - "markdown", - "png", - "raster", - "scales", - "sp", - "viridis" - ] - }, - "leaflet.providers": { - "Package": "leaflet.providers", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d3082a7beac4a1aeb96100ff06265d7e", - "Requirements": [] - }, - "leafpop": { - "Package": "leafpop", - "Version": "0.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "0c1e9e9a79598ec5acb1820d1948dae8", - "Requirements": [ - "base64enc", - "brew", - "htmltools", - "htmlwidgets", - "sf", - "svglite", - "uuid" - ] - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a6b6d352e3ed897373ab19d8395c98d0", - "Requirements": [ - "glue", - "rlang" - ] - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.7.10", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "1ebfdc8a3cfe8fe19184f5481972b092", - "Requirements": [ - "Rcpp", - "generics" - ] - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "cdc87ecd81934679d1557633d8e1fe51", - "Requirements": [] - }, - "mappp": { - "Package": "mappp", - "Version": "0.2.1", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteRepo": "mappp", - "RemoteUsername": "cole-brokamp", - "RemoteRef": "HEAD", - "RemoteSha": "2f561b25614adc302802ac6fe45a7ae15bb6e39f", - "Hash": "a09ccc6cf1a90b770033bbe42f23b7b7", - "Requirements": [ - "memoise", - "parallelly", - "pbmcapply", - "progress", - "purrr" - ] - }, - "mapview": { - "Package": "mapview", - "Version": "2.10.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "70cc642e96759a1b81f7528a46aeb7a7", - "Requirements": [ - "base64enc", - "htmltools", - "htmlwidgets", - "lattice", - "leafem", - "leaflet", - "leafpop", - "png", - "raster", - "satellite", - "scales", - "servr", - "sf", - "sp", - "webshot" - ] - }, - "markdown": { - "Package": "markdown", - "Version": "1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "61e4a10781dd00d7d81dd06ca9b94e95", - "Requirements": [ - "mime", - "xfun" - ] - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a0bc51650201a56d00a4798523cc91b3", - "Requirements": [ - "cachem", - "rlang" - ] + "utils", + "vctrs" + ], + "Hash": "e85ffbebaad5f70e1a2e2ef4302b4949" }, - "mgcv": { - "Package": "mgcv", - "Version": "1.8-33", + "e1071": { + "Package": "e1071", + "Version": "1.7-13", "Source": "Repository", "Repository": "CRAN", - "Hash": "eb7b6439bc6d812eed2cddba5edc6be3", "Requirements": [ - "Matrix", - "nlme" - ] + "class", + "grDevices", + "graphics", + "methods", + "proxy", + "stats", + "utils" + ], + "Hash": "1046cb48d06cb40c2900d8878f03a0fe" }, - "mime": { - "Package": "mime", - "Version": "0.12", + "fansi": { + "Package": "fansi", + "Version": "1.0.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "18e9c28c1d3ca1560ce30658b22ce104", - "Requirements": [] + "Requirements": [ + "R", + "grDevices", + "utils" + ], + "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" }, - "modelr": { - "Package": "modelr", - "Version": "0.1.8", + "fs": { + "Package": "fs", + "Version": "1.6.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "9fd59716311ee82cba83dc2826fc5577", "Requirements": [ - "broom", - "magrittr", - "purrr", - "rlang", - "tibble", - "tidyr", - "tidyselect", - "vctrs" - ] + "R", + "methods" + ], + "Hash": "47b5f30c720c23999b913a1a635cf0bb" }, - "munsell": { - "Package": "munsell", - "Version": "0.5.0", + "generics": { + "Package": "generics", + "Version": "0.1.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "6dfe8bf774944bd5595785e3229d8771", "Requirements": [ - "colorspace" - ] + "R", + "methods" + ], + "Hash": "15e9634c0fcd294799e9b2e929ed1b86" }, - "nlme": { - "Package": "nlme", - "Version": "3.1-152", + "glue": { + "Package": "glue", + "Version": "1.6.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "35de1ce639f20b5e10f7f46260730c65", "Requirements": [ - "lattice" - ] + "R", + "methods" + ], + "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" }, - "openssl": { - "Package": "openssl", - "Version": "2.0.0", + "hms": { + "Package": "hms", + "Version": "1.1.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "cf4329aac12c2c44089974559c18e446", "Requirements": [ - "askpass" - ] + "lifecycle", + "methods", + "pkgconfig", + "rlang", + "vctrs" + ], + "Hash": "b59377caa7ed00fa41808342002138f9" }, - "parallelly": { - "Package": "parallelly", - "Version": "1.25.0", + "lifecycle": { + "Package": "lifecycle", + "Version": "1.0.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "bc53006c11a08ba955ccbf85b586875f", - "Requirements": [] + "Requirements": [ + "R", + "cli", + "glue", + "rlang" + ], + "Hash": "001cecbeac1cff9301bdc3775ee46a86" }, - "pbmcapply": { - "Package": "pbmcapply", - "Version": "1.5.0", + "magrittr": { + "Package": "magrittr", + "Version": "2.0.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "4332529a23c4995d743ef489be54a839", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "7ce2733a9826b3aeb1775d56fd305472" }, "pillar": { "Package": "pillar", - "Version": "1.7.0", + "Version": "1.9.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "51dfc97e1b7069e9f7e6f83f3589c22e", "Requirements": [ "cli", - "crayon", - "ellipsis", "fansi", "glue", "lifecycle", "rlang", "utf8", + "utils", "vctrs" - ] + ], + "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "01f28d4278f15c76cddbea05899c5d6f", - "Requirements": [] - }, - "plyr": { - "Package": "plyr", - "Version": "1.8.6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ec0e5ab4e5f851f6ef32cd1d1984957f", "Requirements": [ - "Rcpp" - ] - }, - "png": { - "Package": "png", - "Version": "0.1-7", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "03b7076c234cb3331288919983326c55", - "Requirements": [] + "utils" + ], + "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, "prettyunits": { "Package": "prettyunits", "Version": "1.1.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e", - "Requirements": [] - }, - "processx": { - "Package": "processx", - "Version": "3.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "0cbca2bc4d16525d009c4dbba156b37c", - "Requirements": [ - "R6", - "ps" - ] + "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" }, "progress": { "Package": "progress", "Version": "1.2.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061", "Requirements": [ "R6", "crayon", "hms", "prettyunits" - ] - }, - "promises": { - "Package": "promises", - "Version": "1.2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4ab2c43adb4d4699cf3690acd378d75d", - "Requirements": [ - "R6", - "Rcpp", - "later", - "magrittr", - "rlang" - ] + ], + "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" }, "proxy": { "Package": "proxy", - "Version": "0.4-26", + "Version": "0.4-27", "Source": "Repository", "Repository": "CRAN", - "Hash": "50b405c6419e921b9e9360cc9ebbcf2d", - "Requirements": [] + "Requirements": [ + "R", + "stats", + "utils" + ], + "Hash": "e0ef355c12942cf7a6b91a6cfaea8b3e" }, "ps": { "Package": "ps", - "Version": "1.6.0", + "Version": "1.7.5", "Source": "Repository", "Repository": "CRAN", - "Hash": "32620e2001c1dce1af49c49dccbb9420", - "Requirements": [] + "Requirements": [ + "R", + "utils" + ], + "Hash": "709d852d33178db54b17c722e5b1e594" }, "purrr": { "Package": "purrr", - "Version": "0.3.4", + "Version": "1.0.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "97def703420c8ab10d8f0e6c72101e02", "Requirements": [ + "R", + "cli", + "lifecycle", "magrittr", - "rlang" - ] - }, - "rapidjsonr": { - "Package": "rapidjsonr", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "88b9f48c93d17cdb811b54079a6a414f", - "Requirements": [] - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5e3c5dc0b071b21fa128676560dbe94d", - "Requirements": [] - }, - "raster": { - "Package": "raster", - "Version": "3.5-15", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "70cf51235e017702ed77427797572ef0", - "Requirements": [ - "Rcpp", - "sp", - "terra" - ] + "rlang", + "vctrs" + ], + "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" }, "readr": { "Package": "readr", - "Version": "2.1.2", + "Version": "2.1.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "9c59de1357dc209868b5feb5c9f0fe2f", "Requirements": [ + "R", "R6", "cli", "clipr", @@ -1160,473 +420,212 @@ "crayon", "hms", "lifecycle", + "methods", "rlang", "tibble", "tzdb", + "utils", "vroom" - ] - }, - "readxl": { - "Package": "readxl", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "63537c483c2dbec8d9e3183b3735254a", - "Requirements": [ - "Rcpp", - "cellranger", - "progress", - "tibble" - ] - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c", - "Requirements": [] + ], + "Hash": "b5047343b3825f37ad9d3b5d89aa1078" }, "renv": { "Package": "renv", - "Version": "0.15.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c1078316e1d4f70275fc1ea60c0bc431", - "Requirements": [] - }, - "reprex": { - "Package": "reprex", - "Version": "1.0.0", + "Version": "0.17.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "cb4d6f77f163b8d685833f2a59e7cb4c", "Requirements": [ - "callr", - "cli", - "clipr", - "fs", - "glue", - "knitr", - "rlang", - "rmarkdown", - "withr" - ] + "utils" + ], + "Hash": "4543b8cd233ae25c6aba8548be9e747e" }, "rlang": { "Package": "rlang", - "Version": "1.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "04884d9a75d778aca22c7154b8333ec9", - "Requirements": [] - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.7", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "edbf4cb1aefae783fd8d3a008ae51943", - "Requirements": [ - "evaluate", - "htmltools", - "jsonlite", - "knitr", - "stringr", - "tinytex", - "xfun", - "yaml" - ] - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "249d8cd1e74a8f6a26194a91b47f21d1", - "Requirements": [] - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.13", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "06c85365a03fdaf699966cc1d3cf53ea", - "Requirements": [] - }, - "rvest": { - "Package": "rvest", - "Version": "1.0.0", + "Version": "1.1.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "74b905b0076e1de6e27f540c95ba68d5", "Requirements": [ - "httr", - "lifecycle", - "magrittr", - "rlang", - "selectr", - "tibble", - "xml2" - ] + "R", + "utils" + ], + "Hash": "a85c767b55f0bf9b7ad16c6d7baee5bb" }, "s2": { "Package": "s2", - "Version": "1.0.6", + "Version": "1.1.4", "Source": "Repository", "Repository": "CRAN", - "Hash": "fb018249cc4b7ae7147d511fd33ddf82", "Requirements": [ + "R", "Rcpp", "wk" - ] - }, - "satellite": { - "Package": "satellite", - "Version": "1.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ee6f12377077643b0822de5130a9f597", - "Requirements": [ - "Rcpp", - "plyr", - "raster" - ] - }, - "scales": { - "Package": "scales", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6f76f71042411426ec8df6c54f34e6dd", - "Requirements": [ - "R6", - "RColorBrewer", - "farver", - "labeling", - "lifecycle", - "munsell", - "viridisLite" - ] - }, - "selectr": { - "Package": "selectr", - "Version": "0.4-2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "3838071b66e0c566d55cc26bd6e27bf4", - "Requirements": [ - "R6", - "stringr" - ] - }, - "servr": { - "Package": "servr", - "Version": "0.23", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "75a40cd4f8503fe175be6b213009767f", - "Requirements": [ - "httpuv", - "jsonlite", - "mime", - "xfun" - ] + ], + "Hash": "f1cbe03bb3346f8e817518ffa20f9f5a" }, "sf": { "Package": "sf", - "Version": "1.0-2", + "Version": "1.0-14", "Source": "Repository", "Repository": "CRAN", - "Hash": "464dca3e4f0bb13cf202630bfed2753a", "Requirements": [ "DBI", + "R", "Rcpp", "classInt", + "grDevices", + "graphics", + "grid", "magrittr", + "methods", "s2", - "units" - ] - }, - "sfheaders": { - "Package": "sfheaders", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c1bd5fbd6bed3c16a20df15d9bc20c55", - "Requirements": [ - "Rcpp", - "geometries" - ] - }, - "sp": { - "Package": "sp", - "Version": "1.4-6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ce8613f4e8c84ef4da9eba65b874ebe9", - "Requirements": [ - "lattice" - ] + "stats", + "tools", + "units", + "utils" + ], + "Hash": "e2111252a76984ca50bf8d6314348681" }, "stringi": { "Package": "stringi", - "Version": "1.7.6", + "Version": "1.7.12", "Source": "Repository", "Repository": "CRAN", - "Hash": "bba431031d30789535745a9627ac9271", - "Requirements": [] + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "ca8bd84263c77310739d2cf64d84d7c9" }, "stringr": { "Package": "stringr", - "Version": "1.4.0", + "Version": "1.5.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "0759e6b6c0957edb1311028a49a35e76", "Requirements": [ + "R", + "cli", "glue", + "lifecycle", "magrittr", - "stringi" - ] - }, - "svglite": { - "Package": "svglite", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8fb6188960bf0f90996ce52f9c2106ac", - "Requirements": [ - "cpp11", - "systemfonts" - ] - }, - "sys": { - "Package": "sys", - "Version": "3.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "b227d13e29222b4574486cfcbde077fa", - "Requirements": [] - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f2e17ba09737e2e7e2ec40fc1f9b6e08", - "Requirements": [ - "cpp11" - ] - }, - "terra": { - "Package": "terra", - "Version": "1.5-21", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a713f0d9f9a2b68af112a991adbfe5d5", - "Requirements": [ - "Rcpp" - ] + "rlang", + "stringi", + "vctrs" + ], + "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" }, "tibble": { "Package": "tibble", - "Version": "3.1.6", + "Version": "3.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "8a8f02d1934dfd6431c671361510dd0b", "Requirements": [ - "ellipsis", + "R", "fansi", "lifecycle", "magrittr", + "methods", "pillar", "pkgconfig", "rlang", + "utils", "vctrs" - ] + ], + "Hash": "a84e2cc86d07289b3b6f5069df7a004c" }, "tidyr": { "Package": "tidyr", - "Version": "1.2.0", + "Version": "1.3.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "d8b95b7fee945d7da6888cf7eb71a49c", "Requirements": [ + "R", + "cli", "cpp11", "dplyr", - "ellipsis", "glue", "lifecycle", "magrittr", "purrr", "rlang", + "stringr", "tibble", "tidyselect", + "utils", "vctrs" - ] + ], + "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" }, "tidyselect": { "Package": "tidyselect", - "Version": "1.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "17f6da8cfd7002760a859915ce7eef8f", - "Requirements": [ - "ellipsis", - "glue", - "purrr", - "rlang", - "vctrs" - ] - }, - "tidyverse": { - "Package": "tidyverse", - "Version": "1.3.0", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "bd51be662f359fa99021f3d51e911490", "Requirements": [ - "broom", + "R", "cli", - "crayon", - "dbplyr", - "dplyr", - "forcats", - "ggplot2", - "haven", - "hms", - "httr", - "jsonlite", - "lubridate", - "magrittr", - "modelr", - "pillar", - "purrr", - "readr", - "readxl", - "reprex", + "glue", + "lifecycle", "rlang", - "rstudioapi", - "rvest", - "stringr", - "tibble", - "tidyr", - "xml2" - ] - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.31", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "25b572f764f3c19fef9aac33b5724f3d", - "Requirements": [ - "xfun" - ] + "vctrs", + "withr" + ], + "Hash": "79540e5fcd9e0435af547d885f184fd5" }, "tzdb": { "Package": "tzdb", - "Version": "0.3.0", + "Version": "0.4.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "b2e1cbce7c903eaf23ec05c58e59fb5e", "Requirements": [ + "R", "cpp11" - ] + ], + "Hash": "f561504ec2897f4d46f0c7657e488ae1" }, "units": { "Package": "units", - "Version": "0.7-2", + "Version": "0.8-4", "Source": "Repository", "Repository": "CRAN", - "Hash": "e0f85712d5371ab2841f63cdb33fe0f0", "Requirements": [ + "R", "Rcpp" - ] - }, - "usethis": { - "Package": "usethis", - "Version": "2.1.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c499f488e6dd7718accffaee5bc5a79b", - "Requirements": [ - "cli", - "clipr", - "crayon", - "curl", - "desc", - "fs", - "gert", - "gh", - "glue", - "jsonlite", - "lifecycle", - "purrr", - "rappdirs", - "rlang", - "rprojroot", - "rstudioapi", - "whisker", - "withr", - "yaml" - ] + ], + "Hash": "e0fbcea25008a7540c83c2c294135de0" }, "utf8": { "Package": "utf8", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c9c462b759a5cc844ae25b5942654d13", - "Requirements": [] - }, - "uuid": { - "Package": "uuid", - "Version": "0.1-4", + "Version": "1.2.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "e4169eb989a5d03ccb6b628cad1b1b50", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "1fe17157424bb09c48a8b3b550c753bc" }, "vctrs": { "Package": "vctrs", - "Version": "0.3.8", + "Version": "0.6.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "ecf749a1b39ea72bd9b51b76292261f1", "Requirements": [ - "ellipsis", + "R", + "cli", "glue", + "lifecycle", "rlang" - ] - }, - "viridis": { - "Package": "viridis", - "Version": "0.6.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ee96aee95a7a563e5496f8991e9fde4b", - "Requirements": [ - "ggplot2", - "gridExtra", - "viridisLite" - ] - }, - "viridisLite": { - "Package": "viridisLite", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "55e157e2aa88161bdb0754218470d204", - "Requirements": [] + ], + "Hash": "d0ef2856b83dc33ea6e255caf6229ee2" }, "vroom": { "Package": "vroom", - "Version": "1.5.7", + "Version": "1.6.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "976507b5a105bc3bdf6a5a5f29e0684f", "Requirements": [ + "R", "bit64", "cli", "cpp11", @@ -1634,84 +633,47 @@ "glue", "hms", "lifecycle", + "methods", "progress", "rlang", + "stats", "tibble", "tidyselect", "tzdb", "vctrs", "withr" - ] - }, - "webshot": { - "Package": "webshot", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e99d80ad34457a4853674e89d5e806de", - "Requirements": [ - "callr", - "jsonlite", - "magrittr" - ] + ], + "Hash": "8318e64ffb3a70e652494017ec455561" }, "whisker": { "Package": "whisker", - "Version": "0.4", + "Version": "0.4.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "ca970b96d894e90397ed20637a0c1bbe", - "Requirements": [] + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" }, "withr": { "Package": "withr", "Version": "2.5.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "c0e49a9760983e81e55cdd9be92e7182", - "Requirements": [] + "Requirements": [ + "R", + "grDevices", + "graphics", + "stats" + ], + "Hash": "c0e49a9760983e81e55cdd9be92e7182" }, "wk": { "Package": "wk", - "Version": "0.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "60e191a866c5649a8f58a458f5e60edf", - "Requirements": [ - "cpp11" - ] - }, - "xfun": { - "Package": "xfun", - "Version": "0.30", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e83f48136b041845e50a6658feffb197", - "Requirements": [] - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "40682ed6a969ea5abfd351eb67833adc", - "Requirements": [] - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "458bb38374d73bf83b1bb85e353da200", - "Requirements": [] - }, - "zip": { - "Package": "zip", - "Version": "2.2.0", + "Version": "0.8.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "c7eef2996ac270a18c2715c997a727c5", - "Requirements": [] + "Requirements": [ + "R" + ], + "Hash": "aaf7e20556e3125a09d53453814ad339" } } } diff --git a/renv/.gitignore b/renv/.gitignore index cb06864..63b9ec4 100644 --- a/renv/.gitignore +++ b/renv/.gitignore @@ -1,3 +1,4 @@ +sandbox/ cellar/ library/ local/ diff --git a/renv/activate.R b/renv/activate.R index e961251..a8fdc32 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,7 +2,7 @@ local({ # the requested version of renv - version <- "0.15.4" + version <- "0.17.3" # the project directory project <- getwd() @@ -54,7 +54,7 @@ local({ # mask 'utils' packages, will come first on the search path library(utils, lib.loc = .Library) - # unload renv if it's already been laoded + # unload renv if it's already been loaded if ("renv" %in% loadedNamespaces()) unloadNamespace("renv") @@ -63,6 +63,10 @@ local({ if (is.environment(x) || length(x)) x else y } + `%??%` <- function(x, y) { + if (is.null(x)) y else x + } + bootstrap <- function(version, library) { # attempt to download renv @@ -83,28 +87,39 @@ local({ 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)) + 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) # if we're testing, re-use the test repositories - if (renv_bootstrap_tests_running()) - return(getOption("renv.tests.repos")) + if (renv_bootstrap_tests_running()) { + repos <- getOption("renv.tests.repos") + if (!is.null(repos)) + return(repos) + } # retrieve current repos repos <- getOption("repos") # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- getOption( - "renv.repos.cran", - "https://cloud.r-project.org" - ) + repos[repos == "@CRAN@"] <- cran # add in renv.bootstrap.repos if set default <- c(FALLBACK = "https://cloud.r-project.org") @@ -185,43 +200,80 @@ local({ if (fixup) mode <- "w+b" - utils::download.file( + args <- list( url = url, destfile = destfile, mode = mode, quiet = TRUE ) + if ("headers" %in% names(formals(utils::download.file))) + args$headers <- renv_bootstrap_download_custom_headers(url) + + 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 message("* Downloading renv ", version, " ... ", appendLF = FALSE) - 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 = "/") - info <- tryCatch( - utils::download.packages( - pkgs = "renv", - destdir = tempdir(), - repos = repos, - type = type, - quiet = TRUE - ), + destfile <- file.path(tempdir(), name) + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), condition = identity ) - if (inherits(info, "condition")) { + if (inherits(status, "condition")) { message("FAILED") return(FALSE) } # report success and return message("OK (downloaded ", type, ")") - info[1, 2] + destfile } @@ -307,16 +359,24 @@ local({ return() # allow directories - info <- file.info(tarball, extra_cols = FALSE) - if (identical(info$isdir, TRUE)) { + 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)) + 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() + } + fmt <- "* Bootstrapping with tarball at path '%s'." msg <- sprintf(fmt, tarball) message(msg) @@ -613,8 +673,8 @@ local({ if (version == loadedversion) return(TRUE) - # assume four-component versions are from GitHub; three-component - # versions are from CRAN + # assume four-component versions are from GitHub; + # three-component versions are from CRAN components <- strsplit(loadedversion, "[.-]")[[1]] remote <- if (length(components) == 4L) paste("rstudio/renv", loadedversion, sep = "@") @@ -654,6 +714,12 @@ local({ # 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 = warning) + # load the project renv::load(project) @@ -669,7 +735,7 @@ local({ return(profile) # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE) + path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) if (!file.exists(path)) return(NULL) @@ -796,11 +862,43 @@ local({ renv_json_read <- function(file = NULL, text = NULL) { + jlerr <- NULL + + # if jsonlite is loaded, use that instead + if ("jsonlite" %in% loadedNamespaces()) { + + json <- catch(renv_json_read_jsonlite(file, text)) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- catch(renv_json_read_default(file, text)) + 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 %||% read(file), collapse = "\n") + jsonlite::fromJSON(txt = text, simplifyVector = FALSE) + } + + renv_json_read_default <- function(file = NULL, text = NULL) { # find strings in the JSON + text <- paste(text %||% read(file), collapse = "\n") pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' - locs <- gregexpr(pattern, text)[[1]] + locs <- gregexpr(pattern, text, perl = TRUE)[[1]] # if any are found, replace them with placeholders replaced <- text @@ -829,8 +927,9 @@ local({ # transform the JSON into something the R parser understands transformed <- replaced - transformed <- gsub("[[{]", "list(", transformed) - transformed <- gsub("[]}]", ")", transformed) + transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) + transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) + transformed <- gsub("[]}]", ")", transformed, perl = TRUE) transformed <- gsub(":", "=", transformed, fixed = TRUE) text <- paste(transformed, collapse = "\n") diff --git a/renv/settings.json b/renv/settings.json new file mode 100644 index 0000000..6238a3d --- /dev/null +++ b/renv/settings.json @@ -0,0 +1,17 @@ +{ + "bioconductor.version": null, + "external.libraries": [], + "ignored.packages": [], + "package.dependency.fields": [ + "Imports", + "Depends", + "LinkingTo" + ], + "r.version": [], + "snapshot.type": "implicit", + "use.cache": true, + "vcs.ignore.cellar": true, + "vcs.ignore.library": true, + "vcs.ignore.local": true, + "vcs.manage.ignores": true +}