From a7c11d40aa115fa5467e36a5b26b6a892b2c2b05 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 14:23:50 -0700 Subject: [PATCH 01/26] docs: prettify README image --- README.md | 2 +- man/figures/fb-cli-signal.png | Bin 36736 -> 134619 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cdc64710..6329602c 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ ggplot(epidata, aes(x = time_value, y = value)) + y = "CLI") ``` -Smoothed CLI from Facebook Survey +![Alt text](man/figures/fb-cli-signal.png) ## Installation diff --git a/man/figures/fb-cli-signal.png b/man/figures/fb-cli-signal.png index 5ad5cc6f4c5c578a76aab5734394134cae590819..dfb1ca4ceb1486e77ea69e2fe02c1c1e67b452a9 100644 GIT binary patch literal 134619 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�V6lU&D!tq^BCc11chv^)&(x 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%0DG==Qw#)N1j0$ct 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%0A5X4b4lS#Cwh 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 Date: Wed, 6 Sep 2023 14:50:32 -0700 Subject: [PATCH 02/26] docs: add covidcast blurb, updates, and more to README --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6329602c..b9f61620 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![License: MIT][mit-image]][mit-url] [![Github Actions][github-actions-image]][github-actions-url] [![codecov](https://codecov.io/gh/dsweber2/epidatr/branch/dev/graph/badge.svg?token=jVHL9eHZNZ)](https://codecov.io/gh/dsweber2/epidatr) -The [Delphi Epidata API](https://cmu-delphi.github.io/delphi-epidata/) provides real-time access to epidemiological surveillance data for influenza, COVID-19, and other diseases from both official government sources such as the [Center for Disease Control (CDC)](https://www.cdc.gov/datastatistics/index.html) and private partners such as [Quidel](https://www.quidel.com/), [Facebook](https://delphi.cmu.edu/blog/2020/08/26/covid-19-symptom-surveys-through-facebook/), and [Change Healthcare](https://www.changehealthcare.com/). It is built and maintained by the Carnegie Mellon University [Delphi research group](https://delphi.cmu.edu/). +The [Delphi Epidata API](https://cmu-delphi.github.io/delphi-epidata/) provides real-time access to epidemiological surveillance data for influenza, COVID-19, and other diseases from both official government sources such as the [Center for Disease Control (CDC)](https://www.cdc.gov/datastatistics/index.html) and [Google Trends](https://cmu-delphi.github.io/delphi-epidata/api/covidcast-signals/google-symptoms.html) and private partners such as [Facebook](https://delphi.cmu.edu/blog/2020/08/26/covid-19-symptom-surveys-through-facebook/) and [Change Healthcare](https://www.changehealthcare.com/). It is built and maintained by the Carnegie Mellon University [Delphi research group](https://delphi.cmu.edu/). This package is designed to streamline the downloading and usage of data from the [Delphi Epidata API](https://cmu-delphi.github.io/delphi-epidata/). It provides a simple R interface to the API, including functions for downloading data, parsing the results, and converting the data into a tidy format. The API stores a historical record of all data, including corrections and updates, which is particularly useful for accurately backtesting forecasting models. We also provide packages for downstream data processing ([epiprocess](https://github.com/cmu-delphi/epiprocess)) and modeling ([epipredict](https://github.com/cmu-delphi/epipredict)). @@ -52,7 +52,7 @@ ggplot(epidata, aes(x = time_value, y = value)) + y = "CLI") ``` -![Alt text](man/figures/fb-cli-signal.png) +![Smoothed CLI from Facebook Survey](man/figures/fb-cli-signal.png) ## Installation @@ -85,3 +85,11 @@ Note that for the time being, the private endpoints (i.e. those prefixed with [mit-url]: https://opensource.org/licenses/MIT [github-actions-image]: https://github.com/cmu-delphi/epidatr/workflows/ci/badge.svg [github-actions-url]: https://github.com/cmu-delphi/epidatr/actions + +## Get updates + +You should consider subscribing to the [API mailing list](https://lists.andrew.cmu.edu/mailman/listinfo/delphi-covidcast-api) to be notified of package updates, new data sources, corrections, and other updates. + +## For users of the `covidcast` R package + +The `epidatr` package is a complete rewrite of the [`covidcast` package](https://cmu-delphi.github.io/covidcast/covidcastR/), with a focus on speed, reliability, and ease of use. The `covidcast` package is deprecated and will no longer be updated. From f0a7cd453214646b90d8fe84b8750872d4e1f6be Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 6 Sep 2023 15:08:35 -0700 Subject: [PATCH 03/26] feat: don't adjust prune, better docs --- R/cache.R | 15 +++------------ _pkgdown.yml | 1 + tests/testthat/test-cache.R | 5 ++--- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/R/cache.R b/R/cache.R index 3cd01222..62738c9b 100644 --- a/R/cache.R +++ b/R/cache.R @@ -72,8 +72,7 @@ cache_environ$epidatr_cache <- NULL #' dir = "some/subdir", #' days = 14, #' max_size = 512, -#' logfile = "some/subdir/logs.txt", -#' prune_rate = 20L +#' logfile = "some/subdir/logs.txt" #' ) #' } #' @@ -90,11 +89,6 @@ cache_environ$epidatr_cache <- NULL #' @param logfile where cachem's log of transactions is stored, relative to the #' cache directory. By default, it is `"logfile.txt"`. The environmental #' variable is `EPIDATR_CACHE_LOGFILE`. -#' @param prune_rate how many calls to go between checking if any cache elements -#' are too old or if the cache overall is too large. Defaults to `2000L`. -#' Since cachem fixes the max time between prune checks to 5 seconds, there's -#' little reason to actually change this parameter. Doesn't have a -#' corresponding environmental variable. #' @param confirm whether to confirm directory creation. default is `TRUE`; #' should only be set in non-interactive scripts #' @seealso [clear_cache] to delete the old cache while making a new one, @@ -107,7 +101,6 @@ set_cache <- function(cache_dir = NULL, days = NULL, max_size = NULL, logfile = NULL, - prune_rate = 2000L, confirm = TRUE) { if (is.null(cache_dir) && sessionInfo()$R.version$major >= 4) { cache_dir <- Sys.getenv("EPIDATR_CACHE_DIR", unset = tools::R_user_dir("epidatr")) @@ -129,7 +122,7 @@ set_cache <- function(cache_dir = NULL, logfile <- Sys.getenv("EPIDATR_CACHE_LOGFILE", unset = "logfile.txt") } stopifnot(is.character(logfile)) - stopifnot(is.numeric(days), is.numeric(max_size), is.integer(prune_rate)) + stopifnot(is.numeric(days), is.numeric(max_size)) # # make sure that that directory exists and drag the user into that process cache_exists <- file.exists(cache_dir) @@ -171,8 +164,7 @@ set_cache <- function(cache_dir = NULL, dir = cache_dir, max_size = as.integer(max_size * 1024^2), max_age = days * 24 * 60 * 60, - logfile = file.path(cache_dir, logfile), - prune_rate = prune_rate + logfile = file.path(cache_dir, logfile) ) } } @@ -190,7 +182,6 @@ set_cache <- function(cache_dir = NULL, #' days = 14, #' max_size = 512, #' logfile = "some/subdir/logs.txt", -#' prune_rate = 20L #' ) #' } #' @param disable instead of setting a new cache, disable caching entirely; diff --git a/_pkgdown.yml b/_pkgdown.yml index 87c1dde5..abc7c2d3 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -16,6 +16,7 @@ reference: - epirange - timeset - title: Control Caching behavior + desc: configure an optional persistent cache - contents: - set_cache - clear_cache diff --git a/tests/testthat/test-cache.R b/tests/testthat/test-cache.R index e06924bd..1ba98e31 100644 --- a/tests/testthat/test-cache.R +++ b/tests/testthat/test-cache.R @@ -17,14 +17,12 @@ test_set_cache <- function(cache_dir = new_temp_dir, days = 1, max_size = 1, logfile = "logfile.txt", - prune_rate = 3L, confirm = FALSE) { set_cache( cache_dir = cache_dir, days = days, max_size = max_size, logfile = logfile, - prune_rate = prune_rate, confirm = confirm ) } @@ -41,7 +39,7 @@ test_that("cache set as expected", { } expect_equal(cache_info()$max_size, 1024^2) expect_equal(cache_info()$max_age, 24 * 60 * 60) - expect_equal(cache_info()$prune_rate, 3) + expect_equal(cache_info()$prune_rate, 20) expect_equal(cache_info()$logfile, file.path(new_temp_dir, "logfile.txt")) expect_equal(cache_info()$evict, "lru") expect_equal(cache_info()$max_n, Inf) @@ -198,6 +196,7 @@ test_that("check_is_cachable", { }) test_set_cache() +cache_environ$epidatr_cache$prune() clear_cache(disable = TRUE) rm(new_temp_dir) From 3f7008802331f5b6f135e1ee047542ade623ecfa Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 6 Sep 2023 15:13:12 -0700 Subject: [PATCH 04/26] when merged we're at 1.0; David is maintainer --- DESCRIPTION | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 441b6139..87103255 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,13 +1,13 @@ Package: epidatr Type: Package Title: Client for Delphi's Epidata API -Version: 0.9.0 +Version: 1.0.0 Authors@R: c( - person("Logan", "Brooks", email = "lcbrooks@andrew.cmu.edu", role = c("aut", "cre")), + person("Logan", "Brooks", email = "lcbrooks@andrew.cmu.edu", role = c("aut")), person("Dmitry", "Shemetov", email = "dshemeto@andrew.cmu.edu", role = c("aut")), person("Samuel", "Gratzl", email = "sam@sgratzl.com", role = c("aut")), - person("David", "Weber", email = "davidweb@andrew.cmu.edu", role = c("ctb")), + person("David", "Weber", email = "davidweb@andrew.cmu.edu", role = c("ctb", "cre")), person("Alex", "Reinhart", role = c("ctb")), person("Daniel", "McDonald", role = c("ctb")), person("Kean Ming", "Tan", role = c("ctb")), From f034c02f6d05bdc5a0a8bd9ef5719ac474ee39a1 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 6 Sep 2023 22:24:37 +0000 Subject: [PATCH 05/26] docs: document (GHA) --- man/clear_cache.Rd | 1 - man/epidatr-package.Rd | 4 ++-- man/set_cache.Rd | 10 +--------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/man/clear_cache.Rd b/man/clear_cache.Rd index 37b5ac8e..d3c892ad 100644 --- a/man/clear_cache.Rd +++ b/man/clear_cache.Rd @@ -25,7 +25,6 @@ clear_cache( days = 14, max_size = 512, logfile = "some/subdir/logs.txt", - prune_rate = 20L ) } } diff --git a/man/epidatr-package.Rd b/man/epidatr-package.Rd index 28d4a660..ae5695fa 100644 --- a/man/epidatr-package.Rd +++ b/man/epidatr-package.Rd @@ -18,17 +18,17 @@ Useful links: } \author{ -\strong{Maintainer}: Logan Brooks \email{lcbrooks@andrew.cmu.edu} +\strong{Maintainer}: David Weber \email{davidweb@andrew.cmu.edu} [contributor] Authors: \itemize{ + \item Logan Brooks \email{lcbrooks@andrew.cmu.edu} \item Dmitry Shemetov \email{dshemeto@andrew.cmu.edu} \item Samuel Gratzl \email{sam@sgratzl.com} } Other contributors: \itemize{ - \item David Weber \email{davidweb@andrew.cmu.edu} [contributor] \item Alex Reinhart [contributor] \item Daniel McDonald [contributor] \item Kean Ming Tan [contributor] diff --git a/man/set_cache.Rd b/man/set_cache.Rd index 06935aac..cc9bcfa6 100644 --- a/man/set_cache.Rd +++ b/man/set_cache.Rd @@ -9,7 +9,6 @@ set_cache( days = NULL, max_size = NULL, logfile = NULL, - prune_rate = 2000L, confirm = TRUE ) } @@ -31,12 +30,6 @@ variable is \code{EPIDATR_CACHE_MAX_SIZE_MB}.} cache directory. By default, it is \code{"logfile.txt"}. The environmental variable is \code{EPIDATR_CACHE_LOGFILE}.} -\item{prune_rate}{how many calls to go between checking if any cache elements -are too old or if the cache overall is too large. Defaults to \code{2000L}. -Since cachem fixes the max time between prune checks to 5 seconds, there's -little reason to actually change this parameter. Doesn't have a -corresponding environmental variable.} - \item{confirm}{whether to confirm directory creation. default is \code{TRUE}; should only be set in non-interactive scripts} } @@ -109,8 +102,7 @@ set_cache( dir = "some/subdir", days = 14, max_size = 512, - logfile = "some/subdir/logs.txt", - prune_rate = 20L + logfile = "some/subdir/logs.txt" ) } From 59544c37fed50edbf1053b9a305ea5d9ebe22aa7 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 6 Sep 2023 16:09:53 -0700 Subject: [PATCH 06/26] docs: resembling same format for link --- R/endpoints.R | 74 ++++++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/R/endpoints.R b/R/endpoints.R index 17b275b8..4c65e824 100644 --- a/R/endpoints.R +++ b/R/endpoints.R @@ -1,5 +1,5 @@ #' CDC page hits -#' +#' @description #' API docs: #' #' @examples @@ -51,13 +51,14 @@ pvt_cdc <- function(auth, locations, epiweeks, fetch_args = fetch_args_list()) { } #' COVID hospitalization facility identifiers +#' @description +#' API docs: +#' #' #' Obtains unique identifiers and other metadata for COVID hospitalization #' facilities of interest. #' This is a companinon endpoint to the [covid_hosp_facility()] endpoint. #' -#' API docs: -#' #' #' @details Only one argument needs to be specified. #' Combinations of the arguments are not currently supported. @@ -133,14 +134,14 @@ covid_hosp_facility_lookup <- function( } #' COVID hospitalization data for specific facilities +#' @description +#' API docs: +#' #' #' Obtains the COVID-19 reported patient impact and hospital capacity data by #' facility. This dataset is provided by the US Department of Health & Human #' Services via healthdata.gov. #' -#' API docs: -#' -#' #' @details Starting October 1, 2022, some facilities are only required to #' report annually. The companion function [covid_hosp_facility_lookup()] can be #' used to look up facility identifiers in a variety of ways. @@ -436,13 +437,13 @@ covid_hosp_facility <- function( } #' COVID Hospitalization Data by State +#' @description +#' API docs: . #' #' Obtains the COVID-19 reported patient impact and hospital capacity data by #' state. This dataset is provided by the US Department of Health & Human #' Services via healthdata.gov. #' -#' API docs: . -#' #' @details Starting October 1, 2022, some facilities are only required to #' report annually. #' @@ -598,13 +599,14 @@ covid_hosp_state_timeseries <- function(states, dates, ..., issues = NULL, fetch } #' Metadata for covidcast endpoint +#' @description +#' API docs: +#' . #' #' Fetch a summary of metadata for all sources and signals that are available in #' the API, along with basic summary statistics such as the dates they are #' available, the geographic levels at which they are reported, and etc. #' -#' API docs: -#' . #' #' @param fetch_args [`fetch_args`]. Additional arguments to pass to `fetch()`. #' @@ -646,7 +648,7 @@ covidcast_meta <- function(fetch_args = fetch_args_list()) { } #' COVID data via the covidcast endpoint -#' +#' @description #' API docs: #' #' COVIDcast public dashboard: @@ -783,7 +785,7 @@ covidcast <- function( } #' Delphi's ILINet forecasts -#' +#' @description #' API docs: #' #' @examples @@ -814,7 +816,7 @@ delphi <- function(system, epiweek, fetch_args = fetch_args_list()) { } #' Delphi's PAHO Dengue nowcast -#' +#' @description #' API docs: #' #' @examples @@ -848,7 +850,7 @@ dengue_nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) } #' Dengue digital surveillance sensors in PAHO member countries -#' +#' @description #' API docs: #' #' @examples @@ -893,11 +895,12 @@ pvt_dengue_sensors <- function(auth, names, locations, epiweeks, fetch_args = fe } #' ECDC ILI data +#' @description +#' API docs: . #' #' Obtain information on influenza-like-illness from the European Centre for #' Disease Prevention and Control. #' -#' API docs: . #' #' @details The list of location argument can be found in #' . @@ -948,11 +951,12 @@ ecdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_ar } #' FluSurv hospitalization data +#' @description +#' API docs: . #' #' Obtain information on flu hospitalization rates from the Center of Disease #' Control. #' -#' API docs: . #' See also . #' #' @details The list of location argument can be found in @@ -1009,7 +1013,7 @@ flusurv <- function(locations, epiweeks, ..., issues = NULL, lag = NULL, fetch_a } #' FluView virological data from clinical labs -#' +#' @description #' API docs: #' #' @examples @@ -1065,7 +1069,7 @@ fluview_clinical <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, } #' FluView metadata -#' +#' @description #' API docs: #' @examples #' \dontrun{ @@ -1091,11 +1095,12 @@ fluview_meta <- function(fetch_args = fetch_args_list()) { #' FluView ILINet data +#' @description +#' API docs: . For #' #' Obtains information on outpatient inluenza-like-illness (ILI) from U.S. #' Outpatient Influenza-like Illness Surveillance Network (ILINet). #' -#' API docs: . For #' more information on ILINet, see #' . #' @@ -1164,11 +1169,12 @@ fluview <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, auth = NU } #' Google Flu Trends data +#' @description +#' API docs: #' #' Obtains estimates of inluenza activity based on volume of certain search #' queries from Google. #' -#' API docs: #' #' @details Google has discontinued Flu Trends and this is now a static #' endpoint. Possibile input for locations can be found in @@ -1205,7 +1211,7 @@ gft <- function(locations, epiweeks, fetch_args = fetch_args_list()) { } #' Google Health Trends data -#' +#' @description #' API docs: #' #' @examples @@ -1249,7 +1255,7 @@ pvt_ght <- function(auth, locations, epiweeks, query, fetch_args = fetch_args_li } #' KCDC ILI data -#' +#' @description #' API docs: #' #' @examples @@ -1298,7 +1304,7 @@ kcdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_ar } #' NoroSTAT metadata -#' +#' @description #' API docs: #' #' @examples @@ -1321,7 +1327,7 @@ pvt_meta_norostat <- function(auth, fetch_args = fetch_args_list()) { } #' Api metadata -#' +#' @description #' API docs: #' #' @param fetch_args [`fetch_args`]. Additional arguments to pass to `fetch()`. @@ -1334,11 +1340,12 @@ meta <- function(fetch_args = fetch_args_list()) { } #' NIDSS dengue data +#' @description +#' API docs: #' #' Obtains counts of confirmed dengue cases in Taiwan from Taiwan National #' Infectious Disease Statistical System. #' -#' API docs: #' #' @details Possible location inputs can be found in #' @@ -1373,11 +1380,12 @@ nidss_dengue <- function(locations, epiweeks, fetch_args = fetch_args_list()) { } #' NIDSS flu data +#' @description +#' API docs: #' #' Obtains information on outpatient inluenza-like-illness from Taiwan National #' Infectious Disease Statistical System. #' -#' API docs: #' #' @examples #' \dontrun{ @@ -1428,7 +1436,7 @@ nidss_flu <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_a #' NoroSTAT data (point data, no min/max) -#' +#' @description #' API docs: #' #' @examples @@ -1468,7 +1476,7 @@ pvt_norostat <- function(auth, locations, epiweeks, fetch_args = fetch_args_list } #' Delphi's ILI nowcast -#' +#' @description #' API docs: . #' #' Obtains information on outpatient inluenza-like-illness (ILI) from Delphi's @@ -1505,7 +1513,7 @@ nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { } #' PAHO Dengue data -#' +#' @description #' API docs: #' #' @examples @@ -1556,7 +1564,7 @@ paho_dengue <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch } #' Quidel COVID-19 and influenza testing data -#' +#' @description #' API docs: #' #' @examples @@ -1596,7 +1604,7 @@ pvt_quidel <- function(auth, locations, epiweeks, fetch_args = fetch_args_list() } #' Digital surveillance sensors -#' +#' @description #' API docs: #' #' @examples @@ -1641,7 +1649,7 @@ pvt_sensors <- function(auth, names, locations, epiweeks, fetch_args = fetch_arg } #' HealthTweets data -#' +#' @description #' API docs: #' #' @examples @@ -1697,7 +1705,7 @@ pvt_twitter <- function(auth, locations, ..., dates = NULL, epiweeks = NULL, fet } #' Wikipedia access data -#' +#' @description #' API docs: #' #' ```{r results="asis", echo = FALSE} From 4646efc944ec50158871855c676eb66fd6e05ac4 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:12:35 -0700 Subject: [PATCH 07/26] fix: avail_endpoints print 50 lines --- R/avail_endpoints.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/avail_endpoints.R b/R/avail_endpoints.R index a183967c..c65e58e7 100644 --- a/R/avail_endpoints.R +++ b/R/avail_endpoints.R @@ -17,5 +17,5 @@ avail_endpoints <- function() { Endpoint = paste0(h$Name, "()"), Description = h$Title ) - tib + tib %>% print(n = 50) } From 1c4d4c112e0ab405fa4baa827d3febb8499fdc8b Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:13:08 -0700 Subject: [PATCH 08/26] docs: capitalize --- R/cache.R | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/R/cache.R b/R/cache.R index 62738c9b..c27c2217 100644 --- a/R/cache.R +++ b/R/cache.R @@ -3,7 +3,8 @@ cache_environ <- new.env(parent = emptyenv()) cache_environ$use_cache <- NULL cache_environ$epidatr_cache <- NULL -#' create or renew a cache for this session + +#' Create or renew a cache for this session #' @aliases set_cache #' @description #' By default, epidatr re-requests data from the API on every call of `fetch`. @@ -169,7 +170,7 @@ set_cache <- function(cache_dir = NULL, } } -#' manually reset the cache, deleting all currently saved data and starting afresh +#' Manually reset the cache, deleting all currently saved data and starting afresh #' @description #' deletes the current cache and resets a new cache. Deletes local data! If you #' are using a session unique cache, you will have to pass the arguments you @@ -201,7 +202,7 @@ clear_cache <- function(disable = FALSE, ...) { } } -#' turn off the caching for this session +#' Turn off the caching for this session #' @description #' Disable caching until you call `set_cache` or restart R. The files defining #' the cache are untouched. If you are looking to disable the caching more @@ -215,7 +216,7 @@ disable_cache <- function() { cache_environ$epidatr_cache <- NULL } -#' describe current cache +#' Describe current cache #' @description #' Print out the information about the cache (as would be returned by cachem's #' `info()` method) @@ -231,7 +232,7 @@ cache_info <- function() { } } -#' dispatch caching +#' Dispatch caching #' #' @description #' the guts of caching, its interposed between fetch and the specific fetch From 94c683aa3eedc51288a63d42a50a349362bc077f Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:13:23 -0700 Subject: [PATCH 09/26] feat: add pub_ to endpoints --- R/endpoints.R | 92 +++++++++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/R/endpoints.R b/R/endpoints.R index 4c65e824..1f5e6933 100644 --- a/R/endpoints.R +++ b/R/endpoints.R @@ -66,8 +66,8 @@ pvt_cdc <- function(auth, locations, epiweeks, fetch_args = fetch_args_list()) { #' #' @examples #' \dontrun{ -#' covid_hosp_facility_lookup(state = "fl") -#' covid_hosp_facility_lookup(city = "southlake") +#' pub_covid_hosp_facility_lookup(state = "fl") +#' pub_covid_hosp_facility_lookup(city = "southlake") #' } #' @param ... not used for values, forces later arguments to bind by name #' @param state string. A two-letter character state abbreviation. @@ -78,10 +78,10 @@ pvt_cdc <- function(auth, locations, epiweeks, fetch_args = fetch_args_list()) { #' @param fetch_args [`fetch_args`]. Additional arguments to pass to `fetch()`. #' @return [`epidata_call`] #' -#' @seealso [covid_hosp_facility()] +#' @seealso [pub_covid_hosp_facility()] #' @keywords endpoint #' @export -covid_hosp_facility_lookup <- function( +pub_covid_hosp_facility_lookup <- function( ..., state = NULL, ccn = NULL, @@ -151,7 +151,7 @@ covid_hosp_facility_lookup <- function( #' #' @examples #' \dontrun{ -#' covid_hosp_facility( +#' pub_covid_hosp_facility( #' hospital_pks = "100075", #' collection_weeks = epirange(20200101, 20200501) #' ) @@ -164,11 +164,11 @@ covid_hosp_facility_lookup <- function( #' @return [`epidata_call`] #' #' -#' @seealso [covid_hosp_facility_lookup()], [epirange()] +#' @seealso [pub_covid_hosp_facility()], [epirange()] #' @keywords endpoint #' @export # -covid_hosp_facility <- function( +pub_covid_hosp_facility <- function( hospital_pks, collection_weeks, ..., @@ -452,7 +452,7 @@ covid_hosp_facility <- function( #' #' @examples #' \dontrun{ -#' covid_hosp_state_timeseries( +#' pub_covid_hosp_state_timeseries( #' states = "fl", #' dates = epirange(20200101, 20200501) #' ) @@ -469,7 +469,7 @@ covid_hosp_facility <- function( #' @keywords endpoint #' @export # -covid_hosp_state_timeseries <- function(states, dates, ..., issues = NULL, fetch_args = fetch_args_list()) { +pub_covid_hosp_state_timeseries <- function(states, dates, ..., issues = NULL, fetch_args = fetch_args_list()) { assert_character_param("states", states) assert_timeset_param("dates", dates) assert_timeset_param("issues", issues, required = FALSE) @@ -615,13 +615,13 @@ covid_hosp_state_timeseries <- function(states, dates, ..., issues = NULL, fetch #' #' @examples #' \dontrun{ -#' covidcast_meta() +#' pub_covidcast_meta() #' } #' -#' @seealso [covidcast()],[covidcast_epidata()] +#' @seealso [pub_covidcast()],[covidcast_epidata()] #' @keywords endpoint #' @export -covidcast_meta <- function(fetch_args = fetch_args_list()) { +pub_covidcast_meta <- function(fetch_args = fetch_args_list()) { create_epidata_call( "covidcast_meta/", list(), @@ -655,7 +655,7 @@ covidcast_meta <- function(fetch_args = fetch_args_list()) { #' #' @examples #' \dontrun{ -#' covidcast( +#' pub_covidcast( #' source = "jhu-csse", #' signals = "confirmed_7dav_incidence_prop", #' geo_type = "state", @@ -663,7 +663,7 @@ covidcast_meta <- function(fetch_args = fetch_args_list()) { #' geo_values = "ca,fl", #' time_values = epirange(20200601, 20200801) #' ) -#' covidcast( +#' pub_covidcast( #' source = "jhu-csse", #' signals = "confirmed_7dav_incidence_prop", #' geo_type = "state", @@ -699,10 +699,10 @@ covidcast_meta <- function(fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' #' -#' @seealso [covidcast_meta()], [covidcast_epidata()], [epirange()] +#' @seealso [pub_covidcast_meta()], [covidcast_epidata()], [epirange()] #' @keywords endpoint #' @export -covidcast <- function( +pub_covidcast <- function( source, signals, geo_type, @@ -790,7 +790,7 @@ covidcast <- function( #' #' @examples #' \dontrun{ -#' delphi(system = "ec", epiweek = 201501) +#' pub_delphi(system = "ec", epiweek = 201501) #' } #' @param system character. System name to fetch. #' @param epiweek [`timeset`]. Epiweeks to fetch. @@ -798,7 +798,7 @@ covidcast <- function( #' @return [`epidata_call`] #' @keywords endpoint #' @export -delphi <- function(system, epiweek, fetch_args = fetch_args_list()) { +pub_delphi <- function(system, epiweek, fetch_args = fetch_args_list()) { assert_character_param("system", system) assert_timeset_param("epiweek", epiweek, len = 1) epiweek <- parse_timeset_input(epiweek) @@ -821,7 +821,7 @@ delphi <- function(system, epiweek, fetch_args = fetch_args_list()) { #' #' @examples #' \dontrun{ -#' dengue_nowcast( +#' pub_dengue_nowcast( #' locations = "pr", #' epiweeks = epirange(201401, 202301) #' ) @@ -832,7 +832,7 @@ delphi <- function(system, epiweek, fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -dengue_nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { +pub_dengue_nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { assert_character_param("locations", locations) assert_timeset_param("epiweeks", epiweeks) epiweeks <- parse_timeset_input(epiweeks) @@ -907,7 +907,7 @@ pvt_dengue_sensors <- function(auth, names, locations, epiweeks, fetch_args = fe #' #' @examples #' \dontrun{ -#' ecdc_ili(regions = "austria", epiweeks = epirange(201901, 202001)) +#' pub_ecdc_ili(regions = "austria", epiweeks = epirange(201901, 202001)) #' } #' @param regions character. Regions to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -920,7 +920,7 @@ pvt_dengue_sensors <- function(auth, names, locations, epiweeks, fetch_args = fe #' @return [`epidata_call`] #' @keywords endpoint #' @export -ecdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { +pub_ecdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -964,7 +964,7 @@ ecdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_ar #' #' @examples #' \dontrun{ -#' flusurv(locations = "CA", epiweeks = epirange(201701, 201801)) +#' pub_flusurv(locations = "CA", epiweeks = epirange(201701, 201801)) #' } #' @param locations character. Character vector indicating location. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -977,7 +977,7 @@ ecdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_ar #' @return [`epidata_call`] #' @keywords endpoint #' @export -flusurv <- function(locations, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { +pub_flusurv <- function(locations, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { assert_character_param("locations", locations) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -1018,7 +1018,7 @@ flusurv <- function(locations, epiweeks, ..., issues = NULL, lag = NULL, fetch_a #' #' @examples #' \dontrun{ -#' fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) +#' pub_fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) #' } #' @param regions character. Regions to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch in the form @@ -1033,7 +1033,7 @@ flusurv <- function(locations, epiweeks, ..., issues = NULL, lag = NULL, fetch_a #' @return [`epidata_call`] #' @keywords endpoint #' @export -fluview_clinical <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { +pub_fluview_clinical <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -1073,7 +1073,7 @@ fluview_clinical <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, #' API docs: #' @examples #' \dontrun{ -#' fluview_meta() +#' pub_fluview_meta() #' } #' #' @param fetch_args [`fetch_args`]. Additional arguments to pass to `fetch()`. @@ -1081,7 +1081,7 @@ fluview_clinical <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, #' @return [`epidata_call`] #' @keywords endpoint #' @export -fluview_meta <- function(fetch_args = fetch_args_list()) { +pub_fluview_meta <- function(fetch_args = fetch_args_list()) { create_epidata_call( "fluview_meta/", list(), @@ -1108,7 +1108,7 @@ fluview_meta <- function(fetch_args = fetch_args_list()) { #' . #' #' @examples -#' fluview(regions = "nat", epiweeks = epirange(201201, 202001)) +#' pub_fluview(regions = "nat", epiweeks = epirange(201201, 202001)) #' @param regions character. Locations to fetch. Can be any string IDs in #' national, HHS region, census division, most states and territories, and so #' on. Full list link below. @@ -1126,7 +1126,7 @@ fluview_meta <- function(fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -fluview <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, auth = NULL, fetch_args = fetch_args_list()) { +pub_fluview <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, auth = NULL, fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -1185,7 +1185,7 @@ fluview <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, auth = NU #' #' @examples #' \dontrun{ -#' gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) +#' pub_gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) #' } #' @param locations character. Locations to fetch. #' @param epiweeks [`timeset`] Epiweeks to fetch. @@ -1194,7 +1194,7 @@ fluview <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, auth = NU #' @return [`epidata_call`] #' @keywords endpoint #' @export -gft <- function(locations, epiweeks, fetch_args = fetch_args_list()) { +pub_gft <- function(locations, epiweeks, fetch_args = fetch_args_list()) { assert_character_param("locations", locations) assert_timeset_param("epiweeks", epiweeks) epiweeks <- parse_timeset_input(epiweeks) @@ -1260,7 +1260,7 @@ pvt_ght <- function(auth, locations, epiweeks, query, fetch_args = fetch_args_li #' #' @examples #' \dontrun{ -#' kcdc_ili(regions = "ROK", epiweeks = 200436) +#' pub_kcdc_ili(regions = "ROK", epiweeks = 200436) #' } #' @param regions character. Regions to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -1273,7 +1273,7 @@ pvt_ght <- function(auth, locations, epiweeks, query, fetch_args = fetch_args_li #' @return [`epidata_call`] #' @keywords endpoint #' @export -kcdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { +pub_kcdc_ili <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -1326,7 +1326,7 @@ pvt_meta_norostat <- function(auth, fetch_args = fetch_args_list()) { ) %>% fetch(fetch_args = fetch_args) } -#' Api metadata +#' API metadata #' @description #' API docs: #' @@ -1335,7 +1335,7 @@ pvt_meta_norostat <- function(auth, fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -meta <- function(fetch_args = fetch_args_list()) { +pub_meta <- function(fetch_args = fetch_args_list()) { create_epidata_call("meta/", list(), only_supports_classic = TRUE) %>% fetch(fetch_args = fetch_args) } @@ -1354,7 +1354,7 @@ meta <- function(fetch_args = fetch_args_list()) { #' #' @examples #' \dontrun{ -#' nidss_dengue(locations = "taipei", epiweeks = epirange(201201, 201301)) +#' pub_nidss_dengue(locations = "taipei", epiweeks = epirange(201201, 201301)) #' } #' @param locations character. Locations to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -1363,7 +1363,7 @@ meta <- function(fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -nidss_dengue <- function(locations, epiweeks, fetch_args = fetch_args_list()) { +pub_nidss_dengue <- function(locations, epiweeks, fetch_args = fetch_args_list()) { assert_character_param("locations", locations) assert_timeset_param("epiweeks", epiweeks) epiweeks <- parse_timeset_input(epiweeks) @@ -1389,7 +1389,7 @@ nidss_dengue <- function(locations, epiweeks, fetch_args = fetch_args_list()) { #' #' @examples #' \dontrun{ -#' nidss_flu(regions = "taipei", epiweeks = epirange(201501, 201601)) +#' pub_nidss_flu(regions = "taipei", epiweeks = epirange(201501, 201601)) #' } #' @param regions character. Regions to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -1402,7 +1402,7 @@ nidss_dengue <- function(locations, epiweeks, fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -nidss_flu <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { +pub_nidss_flu <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -1487,7 +1487,7 @@ pvt_norostat <- function(auth, locations, epiweeks, fetch_args = fetch_args_list #' #' @examples #' \dontrun{ -#' nowcast(locations = "ca", epiweeks = epirange(201201, 201301)) +#' pub_nowcast(locations = "ca", epiweeks = epirange(201201, 201301)) #' } #' @param locations character. Locations to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -1495,7 +1495,7 @@ pvt_norostat <- function(auth, locations, epiweeks, fetch_args = fetch_args_list #' @return [`epidata_call`] #' @keywords endpoint #' @export -nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { +pub_nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { assert_character_param("locations", locations) assert_timeset_param("epiweeks", epiweeks) epiweeks <- parse_timeset_input(epiweeks) @@ -1518,7 +1518,7 @@ nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { #' #' @examples #' \dontrun{ -#' paho_dengue(regions = "ca", epiweeks = epirange(201401, 201501)) +#' pub_paho_dengue(regions = "ca", epiweeks = epirange(201401, 201501)) #' } #' @param regions character. Regions to fetch. #' @param epiweeks [`timeset`]. Epiweeks to fetch. @@ -1531,7 +1531,7 @@ nowcast <- function(locations, epiweeks, fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -paho_dengue <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { +pub_paho_dengue <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) @@ -1717,7 +1717,7 @@ pvt_twitter <- function(auth, locations, ..., dates = NULL, epiweeks = NULL, fet #' #' @examples #' \dontrun{ -#' wiki(articles = "avian_influenza", epiweeks = epirange(201501, 201601)) +#' pub_wiki(articles = "avian_influenza", epiweeks = epirange(201501, 201601)) #' } #' @param articles character. Articles to fetch. #' @param ... not used for values, forces later arguments to bind by name @@ -1730,7 +1730,7 @@ pvt_twitter <- function(auth, locations, ..., dates = NULL, epiweeks = NULL, fet #' @return [`epidata_call`] #' @keywords endpoint #' @export -wiki <- function( +pub_wiki <- function( articles, ..., dates = NULL, From 3423881180d5d90a7994cd34935e3ac321e8002a Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:13:43 -0700 Subject: [PATCH 10/26] docs: fix some utils --- R/model.R | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/R/model.R b/R/model.R index 650f06f3..92574ae5 100644 --- a/R/model.R +++ b/R/model.R @@ -1,16 +1,17 @@ #' Specify a date range (in days or epiweeks) for an API request. #' -#' Epiweeks, also known as MMWR weeks number the weeks of the year from 1 to 53, -#' each week spanning from Sunday to Saturday. The numbering is [defined by the -#' CDC](https://ndc.services.cdc.gov/wp-content/uploads/MMWR_Week_overview.pdf). -#' #' @param from A `Date`, integer-like value, or integer-like string that takes the #' form YYYYMMDD for dates or YYYYWW for epiweeks. #' @param to A `Date`, integer-like value, or integer-like string that takes the #' form YYYYMMDD for dates or YYYYWW for epiweeks. -#' @return EpiRange instance +#' @return An `EpiRange` object. #' @importFrom checkmate check_integerish check_character check_date assert #' +#' @details +#' Epiweeks, also known as MMWR weeks number the weeks of the year from 1 to 53, +#' each week spanning from Sunday to Saturday. The numbering is [defined by the +#' CDC](https://ndc.services.cdc.gov/wp-content/uploads/MMWR_Week_overview.pdf). +#' #' @examples #' # Represents 2021-01-01 to 2021-01-07, inclusive #' epirange(20210101, 20210107) @@ -58,7 +59,7 @@ epirange <- function(from, to) { } -#' timeset +#' Timeset #' #' Many API calls accept timesets to specify the time ranges of data being #' requested. Timesets can be specified with `epirange()`, as `Date` objects, or @@ -72,8 +73,8 @@ epirange <- function(from, to) { #' take the form YYYYMMDD. #' - Epiweeks: Integer-like values or integer-like strings that take the form #' YYYYWW. -#' - EpiRanges: A range returned by `epirange()`, or a list of multiple ranges -#' - Wildcard: The string `"*"`, which request all available time values +#' - EpiRanges: A range returned by `epirange()`, or a list of multiple ranges. +#' - Wildcard: The string `"*"`, which request all available time values. #' #' Please refer to the specific endpoint documentation for guidance on using #' dates vs weeks. Most endpoints support only one or the other. Some (less @@ -152,14 +153,15 @@ parse_data_frame <- function(epidata_call, df, disable_date_parsing = FALSE) { df } +#' @keywords internal parse_api_date <- function(value) { as.Date(as.character(value), format = "%Y%m%d") } -#' parses a week #' @param value value to be converted to an epiweek #' @importFrom MMWRweek MMWRweek2Date #' @return a date +#' @keywords internal parse_api_week <- function(value) { v <- as.integer(value) years <- floor(v / 100) @@ -168,6 +170,7 @@ parse_api_week <- function(value) { } #' @importFrom checkmate test_character test_class test_date test_integerish test_list +#' @keywords internal parse_timeset_input <- function(value) { if (is.null(value)) { return(NULL) From eb914beeb860f3df0a17bedf3803b2c33f1fb792 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:50:14 -0700 Subject: [PATCH 11/26] docs: fix cache docs --- R/cache.R | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/R/cache.R b/R/cache.R index c27c2217..ddbd54f6 100644 --- a/R/cache.R +++ b/R/cache.R @@ -92,8 +92,8 @@ cache_environ$epidatr_cache <- NULL #' variable is `EPIDATR_CACHE_LOGFILE`. #' @param confirm whether to confirm directory creation. default is `TRUE`; #' should only be set in non-interactive scripts -#' @seealso [clear_cache] to delete the old cache while making a new one, -#' [disable_cache] to disable without deleting, and [cache_info] +#' @seealso [`clear_cache`] to delete the old cache while making a new one, +#' [`disable_cache`] to disable without deleting, and [`cache_info`] #' @export #' @import cachem #' @import glue @@ -172,7 +172,7 @@ set_cache <- function(cache_dir = NULL, #' Manually reset the cache, deleting all currently saved data and starting afresh #' @description -#' deletes the current cache and resets a new cache. Deletes local data! If you +#' Deletes the current cache and resets a new cache. Deletes local data! If you #' are using a session unique cache, you will have to pass the arguments you #' used for `set_cache` earlier, otherwise the system-wide `.Renviron`-based #' defaults will be used. @@ -186,11 +186,10 @@ set_cache <- function(cache_dir = NULL, #' ) #' } #' @param disable instead of setting a new cache, disable caching entirely; -#' defaults to `FALSE` -#' @param ... see the `set_cache` arguments below -#' @inheritParams set_cache -#' @seealso [set_cache] to start a new cache (and general caching info), -#' [disable_cache] to only disable without deleting, and [cache_info] +#' defaults to `FALSE` +#' @param ... arguments passed to `set_cache` +#' @seealso [`set_cache`] to start a new cache (and general caching info), +#' [`disable_cache`] to only disable without deleting, and [`cache_info`] #' @export #' @import cachem clear_cache <- function(disable = FALSE, ...) { @@ -209,8 +208,8 @@ clear_cache <- function(disable = FALSE, ...) { #' permanently, set `EPIDATR_USE_CACHE=FALSE` as environmental variable in #' your `.Renviron`. #' @export -#' @seealso [set_cache] to start a new cache (and general caching info), -#' [clear_cache] to delete the cache and set a new one, and [cache_info] +#' @seealso [`set_cache`] to start a new cache (and general caching info), +#' [`clear_cache`] to delete the cache and set a new one, and [`cache_info`] #' @import cachem disable_cache <- function() { cache_environ$epidatr_cache <- NULL @@ -220,8 +219,8 @@ disable_cache <- function() { #' @description #' Print out the information about the cache (as would be returned by cachem's #' `info()` method) -#' @seealso [set_cache] to start a new cache (and general caching info), -#' [clear_cache] to delete the cache and set a new one, and [disable_cache] to +#' @seealso [`set_cache`] to start a new cache (and general caching info), +#' [`clear_cache`] to delete the cache and set a new one, and [`disable_cache`] to #' disable without deleting #' @export cache_info <- function() { @@ -239,7 +238,7 @@ cache_info <- function() { #' methods. Internal method only. #' #' @param call the `epidata_call` object -#' @param fetch_args the args list for fetch as generated by [fetch_args_list()] +#' @param fetch_args the args list for fetch as generated by [`fetch_args_list()``] #' @keywords internal #' @import cachem openssl cache_epidata_call <- function(epidata_call, fetch_args = fetch_args_list()) { From 32db0c3e9599b79cc0877cd227b041c8f594210b Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:50:31 -0700 Subject: [PATCH 12/26] fix: covidcast_epidata tibble --- R/covidcast.R | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/R/covidcast.R b/R/covidcast.R index b0331e70..3844b079 100644 --- a/R/covidcast.R +++ b/R/covidcast.R @@ -24,7 +24,7 @@ parse_signal <- function(signal, base_url) { fetch_args = fetch_args_list()) { stopifnot(is.character(geo_type) & length(geo_type) == 1) - covidcast( + pub_covidcast( source = signal$source, signals = signal$signal, geo_type = geo_type, @@ -77,34 +77,15 @@ as_tibble.covidcast_data_signal_list <- function(x, ...) { tib$format <- unname(map_chr(x, "format")) tib$category <- unname(map_chr(x, "category")) tib$high_values_are <- unname(map_chr(x, "high_values_are")) - if ("is_smoothed" %in% names(x)) { - tib$is_smoothed <- unname(map_lgl(x, "is_smoothed")) - } else { - tib$is_smoothed <- NA - } - if ("is_weighted" %in% names(x)) { - tib$is_weighted <- unname(map_lgl(x, "is_weighted")) - } else { - tib$is_weighted <- NA - } - if ("is_cumulative" %in% names(x)) { - tib$is_cumulative <- unname(map_lgl(x, "is_cumulative")) - } else { - tib$is_cumulative <- NA - } - if ("has_stderr" %in% names(x)) { - tib$has_stderr <- unname(map_lgl(x, "has_stderr")) - } else { - tib$has_stderr <- NA - } - if ("has_sample_size" %in% names(x)) { - tib$has_sample_size <- unname(map_lgl(x, "has_sample_size")) - } else { - tib$has_sample_size <- NA - } as_tibble(tib) } +#' @export +print.covidcast_data_signal_list <- function(x, ...) { + tib <- as_tibble(x) + print(tib[, c("source", "signal", "short_description")], ...) +} + #' @export print.covidcast_data_source <- function(x, ...) { print(x$name, ...) From 684f837ce373aad71e29da1f225db90ce728a322 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:50:46 -0700 Subject: [PATCH 13/26] fix: example covidcast call --- R/epidatacall.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/epidatacall.R b/R/epidatacall.R index 67e0a364..5f558ee4 100644 --- a/R/epidatacall.R +++ b/R/epidatacall.R @@ -20,7 +20,7 @@ #' #' @examples #' \dontrun{ -#' call <- covidcast( +#' call <- pub_covidcast( #' source = "jhu-csse", #' signals = "confirmed_7dav_incidence_prop", #' time_type = "day", From d6a7f8a392d3c85956308a35d348e1a188f4d440 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:50:59 -0700 Subject: [PATCH 14/26] docs: parse_api_week docstring --- R/model.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/model.R b/R/model.R index 92574ae5..1ea606c2 100644 --- a/R/model.R +++ b/R/model.R @@ -158,9 +158,10 @@ parse_api_date <- function(value) { as.Date(as.character(value), format = "%Y%m%d") } +#' parse_api_week converts an integer to a date #' @param value value to be converted to an epiweek -#' @importFrom MMWRweek MMWRweek2Date #' @return a date +#' @importFrom MMWRweek MMWRweek2Date #' @keywords internal parse_api_week <- function(value) { v <- as.integer(value) From 84ab63ee303700420d5f029a6a62555de08f176c Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 15:51:21 -0700 Subject: [PATCH 15/26] docs: document --- NAMESPACE | 41 ++++++++++--------- man/cache_epidata_call.Rd | 4 +- man/cache_info.Rd | 6 +-- man/clear_cache.Rd | 10 ++--- man/disable_cache.Rd | 6 +-- man/epidata_call.Rd | 2 +- man/epirange.Rd | 5 ++- man/parse_api_week.Rd | 5 ++- ...facility.Rd => pub_covid_hosp_facility.Rd} | 10 ++--- ...p.Rd => pub_covid_hosp_facility_lookup.Rd} | 12 +++--- ....Rd => pub_covid_hosp_state_timeseries.Rd} | 8 ++-- man/{covidcast.Rd => pub_covidcast.Rd} | 12 +++--- ...ovidcast_meta.Rd => pub_covidcast_meta.Rd} | 10 ++--- man/{delphi.Rd => pub_delphi.Rd} | 8 ++-- ...engue_nowcast.Rd => pub_dengue_nowcast.Rd} | 8 ++-- man/{ecdc_ili.Rd => pub_ecdc_ili.Rd} | 8 ++-- man/{flusurv.Rd => pub_flusurv.Rd} | 8 ++-- man/{fluview.Rd => pub_fluview.Rd} | 8 ++-- ...ew_clinical.Rd => pub_fluview_clinical.Rd} | 8 ++-- man/{fluview_meta.Rd => pub_fluview_meta.Rd} | 8 ++-- man/{gft.Rd => pub_gft.Rd} | 8 ++-- man/{kcdc_ili.Rd => pub_kcdc_ili.Rd} | 8 ++-- man/{meta.Rd => pub_meta.Rd} | 8 ++-- man/{nidss_dengue.Rd => pub_nidss_dengue.Rd} | 8 ++-- man/{nidss_flu.Rd => pub_nidss_flu.Rd} | 8 ++-- man/{nowcast.Rd => pub_nowcast.Rd} | 8 ++-- man/{paho_dengue.Rd => pub_paho_dengue.Rd} | 8 ++-- man/{wiki.Rd => pub_wiki.Rd} | 8 ++-- man/set_cache.Rd | 6 +-- man/timeset.Rd | 6 +-- 30 files changed, 134 insertions(+), 129 deletions(-) rename man/{covid_hosp_facility.Rd => pub_covid_hosp_facility.Rd} (87%) rename man/{covid_hosp_facility_lookup.Rd => pub_covid_hosp_facility_lookup.Rd} (82%) rename man/{covid_hosp_state_timeseries.Rd => pub_covid_hosp_state_timeseries.Rd} (89%) rename man/{covidcast.Rd => pub_covidcast.Rd} (91%) rename man/{covidcast_meta.Rd => pub_covidcast_meta.Rd} (74%) rename man/{delphi.Rd => pub_delphi.Rd} (78%) rename man/{dengue_nowcast.Rd => pub_dengue_nowcast.Rd} (80%) rename man/{ecdc_ili.Rd => pub_ecdc_ili.Rd} (90%) rename man/{flusurv.Rd => pub_flusurv.Rd} (91%) rename man/{fluview.Rd => pub_fluview.Rd} (93%) rename man/{fluview_clinical.Rd => pub_fluview_clinical.Rd} (88%) rename man/{fluview_meta.Rd => pub_fluview_meta.Rd} (77%) rename man/{gft.Rd => pub_gft.Rd} (86%) rename man/{kcdc_ili.Rd => pub_kcdc_ili.Rd} (90%) rename man/{meta.Rd => pub_meta.Rd} (78%) rename man/{nidss_dengue.Rd => pub_nidss_dengue.Rd} (81%) rename man/{nidss_flu.Rd => pub_nidss_flu.Rd} (89%) rename man/{nowcast.Rd => pub_nowcast.Rd} (82%) rename man/{paho_dengue.Rd => pub_paho_dengue.Rd} (88%) rename man/{wiki.Rd => pub_wiki.Rd} (96%) diff --git a/NAMESPACE b/NAMESPACE index d15f33e5..9d39a295 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,6 +3,7 @@ S3method(as_tibble,covidcast_data_signal_list) S3method(as_tibble,covidcast_data_source_list) S3method(print,covidcast_data_signal) +S3method(print,covidcast_data_signal_list) S3method(print,covidcast_data_source) S3method(print,covidcast_epidata) S3method(print,epidata_call) @@ -10,31 +11,32 @@ export("%>%") export(avail_endpoints) export(cache_info) export(clear_cache) -export(covid_hosp_facility) -export(covid_hosp_facility_lookup) -export(covid_hosp_state_timeseries) -export(covidcast) export(covidcast_epidata) -export(covidcast_meta) -export(delphi) -export(dengue_nowcast) export(disable_cache) -export(ecdc_ili) export(epirange) export(fetch) export(fetch_args_list) -export(flusurv) -export(fluview) -export(fluview_clinical) -export(fluview_meta) export(get_auth_key) -export(gft) -export(kcdc_ili) -export(meta) -export(nidss_dengue) -export(nidss_flu) -export(nowcast) -export(paho_dengue) +export(pub_covid_hosp_facility) +export(pub_covid_hosp_facility_lookup) +export(pub_covid_hosp_state_timeseries) +export(pub_covidcast) +export(pub_covidcast_meta) +export(pub_delphi) +export(pub_dengue_nowcast) +export(pub_ecdc_ili) +export(pub_flusurv) +export(pub_fluview) +export(pub_fluview_clinical) +export(pub_fluview_meta) +export(pub_gft) +export(pub_kcdc_ili) +export(pub_meta) +export(pub_nidss_dengue) +export(pub_nidss_flu) +export(pub_nowcast) +export(pub_paho_dengue) +export(pub_wiki) export(pvt_cdc) export(pvt_dengue_sensors) export(pvt_ght) @@ -44,7 +46,6 @@ export(pvt_quidel) export(pvt_sensors) export(pvt_twitter) export(set_cache) -export(wiki) import(cachem) import(glue) import(openssl) diff --git a/man/cache_epidata_call.Rd b/man/cache_epidata_call.Rd index ecdc0c97..60a86ff6 100644 --- a/man/cache_epidata_call.Rd +++ b/man/cache_epidata_call.Rd @@ -2,12 +2,12 @@ % Please edit documentation in R/cache.R \name{cache_epidata_call} \alias{cache_epidata_call} -\title{dispatch caching} +\title{Dispatch caching} \usage{ cache_epidata_call(epidata_call, fetch_args = fetch_args_list()) } \arguments{ -\item{fetch_args}{the args list for fetch as generated by \code{\link[=fetch_args_list]{fetch_args_list()}}} +\item{fetch_args}{the args list for fetch as generated by \link{`fetch_args_list()``}} \item{call}{the \code{epidata_call} object} } diff --git a/man/cache_info.Rd b/man/cache_info.Rd index 729ff756..418a0389 100644 --- a/man/cache_info.Rd +++ b/man/cache_info.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/cache.R \name{cache_info} \alias{cache_info} -\title{describe current cache} +\title{Describe current cache} \usage{ cache_info() } @@ -11,7 +11,7 @@ Print out the information about the cache (as would be returned by cachem's \code{info()} method) } \seealso{ -\link{set_cache} to start a new cache (and general caching info), -\link{clear_cache} to delete the cache and set a new one, and \link{disable_cache} to +\code{\link{set_cache}} to start a new cache (and general caching info), +\code{\link{clear_cache}} to delete the cache and set a new one, and \code{\link{disable_cache}} to disable without deleting } diff --git a/man/clear_cache.Rd b/man/clear_cache.Rd index d3c892ad..7e938b9b 100644 --- a/man/clear_cache.Rd +++ b/man/clear_cache.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/cache.R \name{clear_cache} \alias{clear_cache} -\title{manually reset the cache, deleting all currently saved data and starting afresh} +\title{Manually reset the cache, deleting all currently saved data and starting afresh} \usage{ clear_cache(disable = FALSE, ...) } @@ -10,10 +10,10 @@ clear_cache(disable = FALSE, ...) \item{disable}{instead of setting a new cache, disable caching entirely; defaults to \code{FALSE}} -\item{...}{see the \code{set_cache} arguments below} +\item{...}{arguments passed to \code{set_cache}} } \description{ -deletes the current cache and resets a new cache. Deletes local data! If you +Deletes the current cache and resets a new cache. Deletes local data! If you are using a session unique cache, you will have to pass the arguments you used for \code{set_cache} earlier, otherwise the system-wide \code{.Renviron}-based defaults will be used. @@ -29,6 +29,6 @@ clear_cache( } } \seealso{ -\link{set_cache} to start a new cache (and general caching info), -\link{disable_cache} to only disable without deleting, and \link{cache_info} +\code{\link{set_cache}} to start a new cache (and general caching info), +\code{\link{disable_cache}} to only disable without deleting, and \code{\link{cache_info}} } diff --git a/man/disable_cache.Rd b/man/disable_cache.Rd index 5ca72617..580c30dd 100644 --- a/man/disable_cache.Rd +++ b/man/disable_cache.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/cache.R \name{disable_cache} \alias{disable_cache} -\title{turn off the caching for this session} +\title{Turn off the caching for this session} \usage{ disable_cache() } @@ -13,6 +13,6 @@ permanently, set \code{EPIDATR_USE_CACHE=FALSE} as environmental variable in your \code{.Renviron}. } \seealso{ -\link{set_cache} to start a new cache (and general caching info), -\link{clear_cache} to delete the cache and set a new one, and \link{cache_info} +\code{\link{set_cache}} to start a new cache (and general caching info), +\code{\link{clear_cache}} to delete the cache and set a new one, and \code{\link{cache_info}} } diff --git a/man/epidata_call.Rd b/man/epidata_call.Rd index 00fa0fe0..456cc97c 100644 --- a/man/epidata_call.Rd +++ b/man/epidata_call.Rd @@ -59,7 +59,7 @@ In that case a JSON-like nested list structure is returned instead. } \examples{ \dontrun{ -call <- covidcast( +call <- pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", time_type = "day", diff --git a/man/epirange.Rd b/man/epirange.Rd index e1732122..921644c3 100644 --- a/man/epirange.Rd +++ b/man/epirange.Rd @@ -14,9 +14,12 @@ form YYYYMMDD for dates or YYYYWW for epiweeks.} form YYYYMMDD for dates or YYYYWW for epiweeks.} } \value{ -EpiRange instance +An \code{EpiRange} object. } \description{ +Specify a date range (in days or epiweeks) for an API request. +} +\details{ Epiweeks, also known as MMWR weeks number the weeks of the year from 1 to 53, each week spanning from Sunday to Saturday. The numbering is \href{https://ndc.services.cdc.gov/wp-content/uploads/MMWR_Week_overview.pdf}{defined by the CDC}. } diff --git a/man/parse_api_week.Rd b/man/parse_api_week.Rd index 119eb709..a877d210 100644 --- a/man/parse_api_week.Rd +++ b/man/parse_api_week.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/model.R \name{parse_api_week} \alias{parse_api_week} -\title{parses a week} +\title{parse_api_week converts an integer to a date} \usage{ parse_api_week(value) } @@ -13,5 +13,6 @@ parse_api_week(value) a date } \description{ -parses a week +parse_api_week converts an integer to a date } +\keyword{internal} diff --git a/man/covid_hosp_facility.Rd b/man/pub_covid_hosp_facility.Rd similarity index 87% rename from man/covid_hosp_facility.Rd rename to man/pub_covid_hosp_facility.Rd index f7f5a8ed..edabb8eb 100644 --- a/man/covid_hosp_facility.Rd +++ b/man/pub_covid_hosp_facility.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{covid_hosp_facility} -\alias{covid_hosp_facility} +\name{pub_covid_hosp_facility} +\alias{pub_covid_hosp_facility} \title{COVID hospitalization data for specific facilities} \usage{ -covid_hosp_facility( +pub_covid_hosp_facility( hospital_pks, collection_weeks, ..., @@ -44,13 +44,13 @@ more information. } \examples{ \dontrun{ -covid_hosp_facility( +pub_covid_hosp_facility( hospital_pks = "100075", collection_weeks = epirange(20200101, 20200501) ) } } \seealso{ -\code{\link[=covid_hosp_facility_lookup]{covid_hosp_facility_lookup()}}, \code{\link[=epirange]{epirange()}} +\code{\link[=pub_covid_hosp_facility]{pub_covid_hosp_facility()}}, \code{\link[=epirange]{epirange()}} } \keyword{endpoint} diff --git a/man/covid_hosp_facility_lookup.Rd b/man/pub_covid_hosp_facility_lookup.Rd similarity index 82% rename from man/covid_hosp_facility_lookup.Rd rename to man/pub_covid_hosp_facility_lookup.Rd index 6e5524d7..12b7fccb 100644 --- a/man/covid_hosp_facility_lookup.Rd +++ b/man/pub_covid_hosp_facility_lookup.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{covid_hosp_facility_lookup} -\alias{covid_hosp_facility_lookup} +\name{pub_covid_hosp_facility_lookup} +\alias{pub_covid_hosp_facility_lookup} \title{COVID hospitalization facility identifiers} \usage{ -covid_hosp_facility_lookup( +pub_covid_hosp_facility_lookup( ..., state = NULL, ccn = NULL, @@ -47,11 +47,11 @@ For instance, specifying both city and state are not supported. } \examples{ \dontrun{ -covid_hosp_facility_lookup(state = "fl") -covid_hosp_facility_lookup(city = "southlake") +pub_covid_hosp_facility_lookup(state = "fl") +pub_covid_hosp_facility_lookup(city = "southlake") } } \seealso{ -\code{\link[=covid_hosp_facility]{covid_hosp_facility()}} +\code{\link[=pub_covid_hosp_facility]{pub_covid_hosp_facility()}} } \keyword{endpoint} diff --git a/man/covid_hosp_state_timeseries.Rd b/man/pub_covid_hosp_state_timeseries.Rd similarity index 89% rename from man/covid_hosp_state_timeseries.Rd rename to man/pub_covid_hosp_state_timeseries.Rd index 57913518..de13a690 100644 --- a/man/covid_hosp_state_timeseries.Rd +++ b/man/pub_covid_hosp_state_timeseries.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{covid_hosp_state_timeseries} -\alias{covid_hosp_state_timeseries} +\name{pub_covid_hosp_state_timeseries} +\alias{pub_covid_hosp_state_timeseries} \title{COVID Hospitalization Data by State} \usage{ -covid_hosp_state_timeseries( +pub_covid_hosp_state_timeseries( states, dates, ..., @@ -43,7 +43,7 @@ more information. } \examples{ \dontrun{ -covid_hosp_state_timeseries( +pub_covid_hosp_state_timeseries( states = "fl", dates = epirange(20200101, 20200501) ) diff --git a/man/covidcast.Rd b/man/pub_covidcast.Rd similarity index 91% rename from man/covidcast.Rd rename to man/pub_covidcast.Rd index 35c6c315..5775feef 100644 --- a/man/covidcast.Rd +++ b/man/pub_covidcast.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{covidcast} -\alias{covidcast} +\name{pub_covidcast} +\alias{pub_covidcast} \title{COVID data via the covidcast endpoint} \usage{ -covidcast( +pub_covidcast( source, signals, geo_type, @@ -64,7 +64,7 @@ COVIDcast public dashboard: \url{https://delphi.cmu.edu/covidcast/} } \examples{ \dontrun{ -covidcast( +pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", geo_type = "state", @@ -72,7 +72,7 @@ covidcast( geo_values = "ca,fl", time_values = epirange(20200601, 20200801) ) -covidcast( +pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", geo_type = "state", @@ -84,6 +84,6 @@ covidcast( } \seealso{ -\code{\link[=covidcast_meta]{covidcast_meta()}}, \code{\link[=covidcast_epidata]{covidcast_epidata()}}, \code{\link[=epirange]{epirange()}} +\code{\link[=pub_covidcast_meta]{pub_covidcast_meta()}}, \code{\link[=covidcast_epidata]{covidcast_epidata()}}, \code{\link[=epirange]{epirange()}} } \keyword{endpoint} diff --git a/man/covidcast_meta.Rd b/man/pub_covidcast_meta.Rd similarity index 74% rename from man/covidcast_meta.Rd rename to man/pub_covidcast_meta.Rd index 67a8843a..75c42c69 100644 --- a/man/covidcast_meta.Rd +++ b/man/pub_covidcast_meta.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{covidcast_meta} -\alias{covidcast_meta} +\name{pub_covidcast_meta} +\alias{pub_covidcast_meta} \title{Metadata for covidcast endpoint} \usage{ -covidcast_meta(fetch_args = fetch_args_list()) +pub_covidcast_meta(fetch_args = fetch_args_list()) } \arguments{ \item{fetch_args}{\code{\link{fetch_args}}. Additional arguments to pass to \code{fetch()}.} @@ -23,11 +23,11 @@ API docs: } \examples{ \dontrun{ -covidcast_meta() +pub_covidcast_meta() } } \seealso{ -\code{\link[=covidcast]{covidcast()}},\code{\link[=covidcast_epidata]{covidcast_epidata()}} +\code{\link[=pub_covidcast]{pub_covidcast()}},\code{\link[=covidcast_epidata]{covidcast_epidata()}} } \keyword{endpoint} diff --git a/man/delphi.Rd b/man/pub_delphi.Rd similarity index 78% rename from man/delphi.Rd rename to man/pub_delphi.Rd index e7ec6e1b..b877b38d 100644 --- a/man/delphi.Rd +++ b/man/pub_delphi.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{delphi} -\alias{delphi} +\name{pub_delphi} +\alias{pub_delphi} \title{Delphi's ILINet forecasts} \usage{ -delphi(system, epiweek, fetch_args = fetch_args_list()) +pub_delphi(system, epiweek, fetch_args = fetch_args_list()) } \arguments{ \item{system}{character. System name to fetch.} @@ -21,7 +21,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/delphi.html} } \examples{ \dontrun{ -delphi(system = "ec", epiweek = 201501) +pub_delphi(system = "ec", epiweek = 201501) } } \keyword{endpoint} diff --git a/man/dengue_nowcast.Rd b/man/pub_dengue_nowcast.Rd similarity index 80% rename from man/dengue_nowcast.Rd rename to man/pub_dengue_nowcast.Rd index 9eabe210..b2c6cb24 100644 --- a/man/dengue_nowcast.Rd +++ b/man/pub_dengue_nowcast.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{dengue_nowcast} -\alias{dengue_nowcast} +\name{pub_dengue_nowcast} +\alias{pub_dengue_nowcast} \title{Delphi's PAHO Dengue nowcast} \usage{ -dengue_nowcast(locations, epiweeks, fetch_args = fetch_args_list()) +pub_dengue_nowcast(locations, epiweeks, fetch_args = fetch_args_list()) } \arguments{ \item{locations}{character. Locations to fetch.} @@ -21,7 +21,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/dengue_nowcast.ht } \examples{ \dontrun{ -dengue_nowcast( +pub_dengue_nowcast( locations = "pr", epiweeks = epirange(201401, 202301) ) diff --git a/man/ecdc_ili.Rd b/man/pub_ecdc_ili.Rd similarity index 90% rename from man/ecdc_ili.Rd rename to man/pub_ecdc_ili.Rd index ff88906a..2dd26bcb 100644 --- a/man/ecdc_ili.Rd +++ b/man/pub_ecdc_ili.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{ecdc_ili} -\alias{ecdc_ili} +\name{pub_ecdc_ili} +\alias{pub_ecdc_ili} \title{ECDC ILI data} \usage{ -ecdc_ili( +pub_ecdc_ili( regions, epiweeks, ..., @@ -43,7 +43,7 @@ The list of location argument can be found in } \examples{ \dontrun{ -ecdc_ili(regions = "austria", epiweeks = epirange(201901, 202001)) +pub_ecdc_ili(regions = "austria", epiweeks = epirange(201901, 202001)) } } \keyword{endpoint} diff --git a/man/flusurv.Rd b/man/pub_flusurv.Rd similarity index 91% rename from man/flusurv.Rd rename to man/pub_flusurv.Rd index 6e469591..caa6e3e2 100644 --- a/man/flusurv.Rd +++ b/man/pub_flusurv.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{flusurv} -\alias{flusurv} +\name{pub_flusurv} +\alias{pub_flusurv} \title{FluSurv hospitalization data} \usage{ -flusurv( +pub_flusurv( locations, epiweeks, ..., @@ -44,7 +44,7 @@ The list of location argument can be found in } \examples{ \dontrun{ -flusurv(locations = "CA", epiweeks = epirange(201701, 201801)) +pub_flusurv(locations = "CA", epiweeks = epirange(201701, 201801)) } } \keyword{endpoint} diff --git a/man/fluview.Rd b/man/pub_fluview.Rd similarity index 93% rename from man/fluview.Rd rename to man/pub_fluview.Rd index 561c17df..389ff92c 100644 --- a/man/fluview.Rd +++ b/man/pub_fluview.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{fluview} -\alias{fluview} +\name{pub_fluview} +\alias{pub_fluview} \title{FluView ILINet data} \usage{ -fluview( +pub_fluview( regions, epiweeks, ..., @@ -52,6 +52,6 @@ The full list of location inputs can be accsssed at \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/src/acquisition/fluview/fluview_locations.py}. } \examples{ -fluview(regions = "nat", epiweeks = epirange(201201, 202001)) +pub_fluview(regions = "nat", epiweeks = epirange(201201, 202001)) } \keyword{endpoint} diff --git a/man/fluview_clinical.Rd b/man/pub_fluview_clinical.Rd similarity index 88% rename from man/fluview_clinical.Rd rename to man/pub_fluview_clinical.Rd index 906759cb..edfb096a 100644 --- a/man/fluview_clinical.Rd +++ b/man/pub_fluview_clinical.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{fluview_clinical} -\alias{fluview_clinical} +\name{pub_fluview_clinical} +\alias{pub_fluview_clinical} \title{FluView virological data from clinical labs} \usage{ -fluview_clinical( +pub_fluview_clinical( regions, epiweeks, ..., @@ -38,7 +38,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/fluview_clinical. } \examples{ \dontrun{ -fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) +pub_fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) } } \keyword{endpoint} diff --git a/man/fluview_meta.Rd b/man/pub_fluview_meta.Rd similarity index 77% rename from man/fluview_meta.Rd rename to man/pub_fluview_meta.Rd index 34764ae0..31beec17 100644 --- a/man/fluview_meta.Rd +++ b/man/pub_fluview_meta.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{fluview_meta} -\alias{fluview_meta} +\name{pub_fluview_meta} +\alias{pub_fluview_meta} \title{FluView metadata} \usage{ -fluview_meta(fetch_args = fetch_args_list()) +pub_fluview_meta(fetch_args = fetch_args_list()) } \arguments{ \item{fetch_args}{\code{\link{fetch_args}}. Additional arguments to pass to \code{fetch()}.} @@ -17,7 +17,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/fluview_meta.html } \examples{ \dontrun{ -fluview_meta() +pub_fluview_meta() } } diff --git a/man/gft.Rd b/man/pub_gft.Rd similarity index 86% rename from man/gft.Rd rename to man/pub_gft.Rd index 288ba54c..a3d23fb5 100644 --- a/man/gft.Rd +++ b/man/pub_gft.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{gft} -\alias{gft} +\name{pub_gft} +\alias{pub_gft} \title{Google Flu Trends data} \usage{ -gft(locations, epiweeks, fetch_args = fetch_args_list()) +pub_gft(locations, epiweeks, fetch_args = fetch_args_list()) } \arguments{ \item{locations}{character. Locations to fetch.} @@ -32,7 +32,7 @@ and } \examples{ \dontrun{ -gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) +pub_gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) } } \keyword{endpoint} diff --git a/man/kcdc_ili.Rd b/man/pub_kcdc_ili.Rd similarity index 90% rename from man/kcdc_ili.Rd rename to man/pub_kcdc_ili.Rd index 02fb0190..5dd8453f 100644 --- a/man/kcdc_ili.Rd +++ b/man/pub_kcdc_ili.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{kcdc_ili} -\alias{kcdc_ili} +\name{pub_kcdc_ili} +\alias{pub_kcdc_ili} \title{KCDC ILI data} \usage{ -kcdc_ili( +pub_kcdc_ili( regions, epiweeks, ..., @@ -36,7 +36,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/kcdc_ili.html} } \examples{ \dontrun{ -kcdc_ili(regions = "ROK", epiweeks = 200436) +pub_kcdc_ili(regions = "ROK", epiweeks = 200436) } } \keyword{endpoint} diff --git a/man/meta.Rd b/man/pub_meta.Rd similarity index 78% rename from man/meta.Rd rename to man/pub_meta.Rd index a5919137..46be9d86 100644 --- a/man/meta.Rd +++ b/man/pub_meta.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{meta} -\alias{meta} -\title{Api metadata} +\name{pub_meta} +\alias{pub_meta} +\title{API metadata} \usage{ -meta(fetch_args = fetch_args_list()) +pub_meta(fetch_args = fetch_args_list()) } \arguments{ \item{fetch_args}{\code{\link{fetch_args}}. Additional arguments to pass to \code{fetch()}.} diff --git a/man/nidss_dengue.Rd b/man/pub_nidss_dengue.Rd similarity index 81% rename from man/nidss_dengue.Rd rename to man/pub_nidss_dengue.Rd index 8f88f80e..4302eaad 100644 --- a/man/nidss_dengue.Rd +++ b/man/pub_nidss_dengue.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{nidss_dengue} -\alias{nidss_dengue} +\name{pub_nidss_dengue} +\alias{pub_nidss_dengue} \title{NIDSS dengue data} \usage{ -nidss_dengue(locations, epiweeks, fetch_args = fetch_args_list()) +pub_nidss_dengue(locations, epiweeks, fetch_args = fetch_args_list()) } \arguments{ \item{locations}{character. Locations to fetch.} @@ -30,7 +30,7 @@ and } \examples{ \dontrun{ -nidss_dengue(locations = "taipei", epiweeks = epirange(201201, 201301)) +pub_nidss_dengue(locations = "taipei", epiweeks = epirange(201201, 201301)) } } \keyword{endpoint} diff --git a/man/nidss_flu.Rd b/man/pub_nidss_flu.Rd similarity index 89% rename from man/nidss_flu.Rd rename to man/pub_nidss_flu.Rd index 6768d6de..e2af76e3 100644 --- a/man/nidss_flu.Rd +++ b/man/pub_nidss_flu.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{nidss_flu} -\alias{nidss_flu} +\name{pub_nidss_flu} +\alias{pub_nidss_flu} \title{NIDSS flu data} \usage{ -nidss_flu( +pub_nidss_flu( regions, epiweeks, ..., @@ -40,7 +40,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/nidss_flu.html} } \examples{ \dontrun{ -nidss_flu(regions = "taipei", epiweeks = epirange(201501, 201601)) +pub_nidss_flu(regions = "taipei", epiweeks = epirange(201501, 201601)) } } \keyword{endpoint} diff --git a/man/nowcast.Rd b/man/pub_nowcast.Rd similarity index 82% rename from man/nowcast.Rd rename to man/pub_nowcast.Rd index df3b04cf..dc7faaf8 100644 --- a/man/nowcast.Rd +++ b/man/pub_nowcast.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{nowcast} -\alias{nowcast} +\name{pub_nowcast} +\alias{pub_nowcast} \title{Delphi's ILI nowcast} \usage{ -nowcast(locations, epiweeks, fetch_args = fetch_args_list()) +pub_nowcast(locations, epiweeks, fetch_args = fetch_args_list()) } \arguments{ \item{locations}{character. Locations to fetch.} @@ -28,7 +28,7 @@ The full list of location inputs can be accsssed at } \examples{ \dontrun{ -nowcast(locations = "ca", epiweeks = epirange(201201, 201301)) +pub_nowcast(locations = "ca", epiweeks = epirange(201201, 201301)) } } \keyword{endpoint} diff --git a/man/paho_dengue.Rd b/man/pub_paho_dengue.Rd similarity index 88% rename from man/paho_dengue.Rd rename to man/pub_paho_dengue.Rd index e7d1645c..68b9659c 100644 --- a/man/paho_dengue.Rd +++ b/man/pub_paho_dengue.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{paho_dengue} -\alias{paho_dengue} +\name{pub_paho_dengue} +\alias{pub_paho_dengue} \title{PAHO Dengue data} \usage{ -paho_dengue( +pub_paho_dengue( regions, epiweeks, ..., @@ -36,7 +36,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/paho_dengue.html} } \examples{ \dontrun{ -paho_dengue(regions = "ca", epiweeks = epirange(201401, 201501)) +pub_paho_dengue(regions = "ca", epiweeks = epirange(201401, 201501)) } } \keyword{endpoint} diff --git a/man/wiki.Rd b/man/pub_wiki.Rd similarity index 96% rename from man/wiki.Rd rename to man/pub_wiki.Rd index efc38e08..d075e047 100644 --- a/man/wiki.Rd +++ b/man/pub_wiki.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/endpoints.R -\name{wiki} -\alias{wiki} +\name{pub_wiki} +\alias{pub_wiki} \title{Wikipedia access data} \usage{ -wiki( +pub_wiki( articles, ..., dates = NULL, @@ -78,7 +78,7 @@ available through our \href{https://delphi.cmu.edu/covidcast/export/}{data expor \examples{ \dontrun{ -wiki(articles = "avian_influenza", epiweeks = epirange(201501, 201601)) +pub_wiki(articles = "avian_influenza", epiweeks = epirange(201501, 201601)) } } \keyword{endpoint} diff --git a/man/set_cache.Rd b/man/set_cache.Rd index cc9bcfa6..56eb77f3 100644 --- a/man/set_cache.Rd +++ b/man/set_cache.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/cache.R \name{set_cache} \alias{set_cache} -\title{create or renew a cache for this session} +\title{Create or renew a cache for this session} \usage{ set_cache( cache_dir = NULL, @@ -108,6 +108,6 @@ set_cache( } \seealso{ -\link{clear_cache} to delete the old cache while making a new one, -\link{disable_cache} to disable without deleting, and \link{cache_info} +\code{\link{clear_cache}} to delete the old cache while making a new one, +\code{\link{disable_cache}} to disable without deleting, and \code{\link{cache_info}} } diff --git a/man/timeset.Rd b/man/timeset.Rd index 91c005b5..05c3f910 100644 --- a/man/timeset.Rd +++ b/man/timeset.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/model.R \name{timeset} \alias{timeset} -\title{timeset} +\title{Timeset} \description{ Many API calls accept timesets to specify the time ranges of data being requested. Timesets can be specified with \code{epirange()}, as \code{Date} objects, or @@ -17,8 +17,8 @@ The allowed values are: take the form YYYYMMDD. \item Epiweeks: Integer-like values or integer-like strings that take the form YYYYWW. -\item EpiRanges: A range returned by \code{epirange()}, or a list of multiple ranges -\item Wildcard: The string \code{"*"}, which request all available time values +\item EpiRanges: A range returned by \code{epirange()}, or a list of multiple ranges. +\item Wildcard: The string \code{"*"}, which request all available time values. } Please refer to the specific endpoint documentation for guidance on using From 2a150f9569769b367bb23a5a6c41fbc50a84e7c3 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:06:41 -0700 Subject: [PATCH 16/26] fix: move rlang to Suggests --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 87103255..6ef7d2ef 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: epidatr Type: Package Title: Client for Delphi's Epidata API -Version: 1.0.0 +Version: 0.9.0 Authors@R: c( person("Logan", "Brooks", email = "lcbrooks@andrew.cmu.edu", role = c("aut")), @@ -35,7 +35,6 @@ Imports: purrr, openssl, readr, - rlang, tibble, xml2 RoxygenNote: 7.2.3 @@ -44,6 +43,7 @@ Suggests: ggplot2, knitr, rmarkdown, + rlang, testthat (>= 3.1.5), withr VignetteBuilder: knitr From f63d594ce05ccc0f73a65a29665b71a7fed55b51 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:07:05 -0700 Subject: [PATCH 17/26] docs: correct docs links to pub_ --- R/cache.R | 2 +- R/endpoints.R | 8 ++++---- R/epidatacall.R | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/R/cache.R b/R/cache.R index ddbd54f6..f688594b 100644 --- a/R/cache.R +++ b/R/cache.R @@ -238,7 +238,7 @@ cache_info <- function() { #' methods. Internal method only. #' #' @param call the `epidata_call` object -#' @param fetch_args the args list for fetch as generated by [`fetch_args_list()``] +#' @param fetch_args the args list for fetch as generated by [`fetch_args_list()`] #' @keywords internal #' @import cachem openssl cache_epidata_call <- function(epidata_call, fetch_args = fetch_args_list()) { diff --git a/R/endpoints.R b/R/endpoints.R index 1f5e6933..d102ccba 100644 --- a/R/endpoints.R +++ b/R/endpoints.R @@ -57,7 +57,7 @@ pvt_cdc <- function(auth, locations, epiweeks, fetch_args = fetch_args_list()) { #' #' Obtains unique identifiers and other metadata for COVID hospitalization #' facilities of interest. -#' This is a companinon endpoint to the [covid_hosp_facility()] endpoint. +#' This is a companinon endpoint to the [`pub_covid_hosp_facility()`] endpoint. #' #' #' @details Only one argument needs to be specified. @@ -78,7 +78,7 @@ pvt_cdc <- function(auth, locations, epiweeks, fetch_args = fetch_args_list()) { #' @param fetch_args [`fetch_args`]. Additional arguments to pass to `fetch()`. #' @return [`epidata_call`] #' -#' @seealso [pub_covid_hosp_facility()] +#' @seealso [`pub_covid_hosp_facility()`] #' @keywords endpoint #' @export pub_covid_hosp_facility_lookup <- function( @@ -143,7 +143,7 @@ pub_covid_hosp_facility_lookup <- function( #' Services via healthdata.gov. #' #' @details Starting October 1, 2022, some facilities are only required to -#' report annually. The companion function [covid_hosp_facility_lookup()] can be +#' report annually. The companion function [`pub_covid_hosp_facility_lookup()`] can be #' used to look up facility identifiers in a variety of ways. #' #' See also the official description and data dictionary at for @@ -164,7 +164,7 @@ pub_covid_hosp_facility_lookup <- function( #' @return [`epidata_call`] #' #' -#' @seealso [pub_covid_hosp_facility()], [epirange()] +#' @seealso [`pub_covid_hosp_facility()`], [`epirange()`] #' @keywords endpoint #' @export # diff --git a/R/epidatacall.R b/R/epidatacall.R index 5f558ee4..ef117ae1 100644 --- a/R/epidatacall.R +++ b/R/epidatacall.R @@ -4,14 +4,14 @@ #' #' @description #' `epidata_call` objects are generated internally by endpoint functions like -#' [`covidcast`]; by default, they are piped directly into the `fetch` +#' [`pub_covidcast`]; by default, they are piped directly into the `fetch` #' function to fetch and format the data. For most endpoints this will return #' a tibble, but a few non-COVIDCAST endpoints only support will return a #' JSON-like list instead. #' #' `create_epidata_call` is the constructor for `epidata_call` objects, but you #' should not need to use it directly; instead, use an endpoint function, -#' e.g., [`covidcast`], to generate an `epidata_call` for the data of +#' e.g., [`pub_covidcast`], to generate an `epidata_call` for the data of #' interest. #' #' There are some other functions available for debugging and advanced usage: - From 4e2c0ebe065e09fc17f32e63b8e982a9d0bfcf30 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:07:15 -0700 Subject: [PATCH 18/26] docs: fix vignette --- vignettes/epidatr.Rmd | 49 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/vignettes/epidatr.Rmd b/vignettes/epidatr.Rmd index 16111d0f..6f9c8416 100644 --- a/vignettes/epidatr.Rmd +++ b/vignettes/epidatr.Rmd @@ -41,11 +41,11 @@ provides access to a range of data on COVID-19. Reviewing the endpoint documentation, we see that we need to specify a data source name, a signal name, a geographic level, a time resolution, and the location and times of interest. -In this case, the `covidcast()` function lets us specify these parameters for +In this case, the `pub_covidcast()` function lets us specify these parameters for the endpoint and returns a tibble with the results: ```{r} -epidata <- covidcast( +epidata <- pub_covidcast( "fb-survey", "smoothed_cli", "state", "day", "pa", epirange(20210105, 20210410) ) @@ -114,7 +114,7 @@ We can obtain the `epidata_call` object underlying a request by setting the `dry_run` argument to `TRUE` in `fetch_args_list`: ```{r} -covidcast( +pub_covidcast( "fb-survey", "smoothed_cli", "state", "day", "pa", epirange(20210405, 20210410), fetch_args = fetch_args_list(dry_run = TRUE) @@ -132,7 +132,7 @@ API docs: ```{r, eval = FALSE} -covid_hosp_facility_lookup(city = "southlake") -covid_hosp_facility_lookup(state = "WY") +pub_covid_hosp_facility_lookup(city = "southlake") +pub_covid_hosp_facility_lookup(state = "WY") # A non-example (there is no city called New York in Wyoming) -covid_hosp_facility_lookup(state = "WY", city = "New York") +pub_covid_hosp_facility_lookup(state = "WY", city = "New York") ``` #### COVID-19 Hospitalization by Facility @@ -173,7 +173,7 @@ covid_hosp_facility_lookup(state = "WY", city = "New York") API docs: ```{r, eval = FALSE} -covid_hosp_facility( +pub_covid_hosp_facility( hospital_pks = "100075", collection_weeks = epirange(20200101, 20200501) ) @@ -184,7 +184,7 @@ covid_hosp_facility( API docs: ```{r, eval = FALSE} -covid_hosp_state_timeseries(states = "MA", dates = "20200510") +pub_covid_hosp_state_timeseries(states = "MA", dates = "20200510") ``` ### Flu Endpoints @@ -194,7 +194,7 @@ covid_hosp_state_timeseries(states = "MA", dates = "20200510") API docs: ```{r, eval = FALSE} -del <- delphi(system = "ec", epiweek = 201501) +del <- pub_delphi(system = "ec", epiweek = 201501) names(del[[1L]]$forecast) ``` @@ -203,7 +203,7 @@ names(del[[1L]]$forecast) API docs: ```{r, eval = FALSE} -flusurv(locations = "ca", epiweeks = 202001) +pub_flusurv(locations = "ca", epiweeks = 202001) ``` #### Fluview data @@ -211,7 +211,7 @@ flusurv(locations = "ca", epiweeks = 202001) API docs: ```{r, eval = FALSE} -fluview(regions = "nat", epiweeks = epirange(201201, 202001)) +pub_fluview(regions = "nat", epiweeks = epirange(201201, 202001)) ``` #### Fluview virological data from clinical labs @@ -219,7 +219,7 @@ fluview(regions = "nat", epiweeks = epirange(201201, 202001)) API docs: ```{r, eval = FALSE} -fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) +pub_fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) ``` #### Fluview metadata @@ -227,7 +227,7 @@ fluview_clinical(regions = "nat", epiweeks = epirange(201601, 201701)) API docs: ```{r, eval = FALSE} -fluview_meta() +pub_fluview_meta() ``` #### Google Flu Trends data @@ -235,7 +235,7 @@ fluview_meta() API docs: ```{r, eval = FALSE} -gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) +pub_gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) ``` #### ECDC ILI @@ -243,7 +243,7 @@ gft(locations = "hhs1", epiweeks = epirange(201201, 202001)) API docs: ```{r, eval = FALSE} -ecdc_ili(regions = "Armenia", epiweeks = 201840) +pub_ecdc_ili(regions = "Armenia", epiweeks = 201840) ``` #### KCDC ILI @@ -251,7 +251,7 @@ ecdc_ili(regions = "Armenia", epiweeks = 201840) API docs: ```{r, eval = FALSE} -kcdc_ili(regions = "ROK", epiweeks = 200436) +pub_kcdc_ili(regions = "ROK", epiweeks = 200436) ``` #### NIDSS Flu @@ -259,7 +259,7 @@ kcdc_ili(regions = "ROK", epiweeks = 200436) API docs: ```{r, eval = FALSE} -nidss_flu(regions = "taipei", epiweeks = epirange(200901, 201301)) +pub_nidss_flu(regions = "taipei", epiweeks = epirange(200901, 201301)) ``` #### ILI Nearby Nowcast @@ -267,7 +267,7 @@ nidss_flu(regions = "taipei", epiweeks = epirange(200901, 201301)) API docs: ```{r, eval = FALSE} -nowcast(locations = "ca", epiweeks = epirange(202201, 202319)) +pub_nowcast(locations = "ca", epiweeks = epirange(202201, 202319)) ``` ### Dengue Endpoints @@ -277,7 +277,7 @@ nowcast(locations = "ca", epiweeks = epirange(202201, 202319)) API docs: ```{r, eval = FALSE} -dengue_nowcast(locations = "pr", epiweeks = epirange(201401, 202301)) +pub_dengue_nowcast(locations = "pr", epiweeks = epirange(201401, 202301)) ``` #### NIDSS dengue @@ -285,7 +285,7 @@ dengue_nowcast(locations = "pr", epiweeks = epirange(201401, 202301)) API docs: ```{r, eval = FALSE} -nidss_dengue(locations = "taipei", epiweeks = epirange(200301, 201301)) +pub_nidss_dengue(locations = "taipei", epiweeks = epirange(200301, 201301)) ``` ### PAHO Dengue @@ -293,7 +293,7 @@ nidss_dengue(locations = "taipei", epiweeks = epirange(200301, 201301)) API docs: ```{r, eval=FALSE} -paho_dengue(regions = "ca", epiweeks = epirange(200201, 202319)) +pub_paho_dengue(regions = "ca", epiweeks = epirange(200201, 202319)) ``` ### Other Endpoints @@ -303,7 +303,7 @@ paho_dengue(regions = "ca", epiweeks = epirange(200201, 202319)) API docs: ```{r, eval = FALSE} -wiki(language = "en", articles = "influenza", epiweeks = epirange(202001, 202319)) +pub_wiki(language = "en", articles = "influenza", epiweeks = epirange(202001, 202319)) ``` ### Private methods @@ -393,4 +393,3 @@ pvt_twitter( epiweeks = epirange(200301, 202105) ) ``` - From 66216d695bf1ef51746323a1c8a95bb5adb90ea7 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:07:24 -0700 Subject: [PATCH 19/26] tests: fix tests --- tests/testthat/test-cache.R | 4 ++-- tests/testthat/test-covidcast.R | 2 +- tests/testthat/test-endpoints.R | 40 +++++++++++++++---------------- tests/testthat/test-epidatacall.R | 6 ++--- tests/testthat/test-model.R | 2 +- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/testthat/test-cache.R b/tests/testthat/test-cache.R index 1ba98e31..522f97fb 100644 --- a/tests/testthat/test-cache.R +++ b/tests/testthat/test-cache.R @@ -49,7 +49,7 @@ test_that("cache set as expected", { # use an existing example to save, then load and compare the values test_that("cache saves & loads", { test_set_cache() - epidata_call <- covidcast( + epidata_call <- pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", time_type = "day", @@ -122,7 +122,7 @@ test_that("check_is_recent", { test_that("check_is_cachable", { check_fun <- function(..., fetch_args = fetch_args_list(), expected_result) { - epidata_call <- covidcast( + epidata_call <- pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", time_type = "day", diff --git a/tests/testthat/test-covidcast.R b/tests/testthat/test-covidcast.R index d470af24..2e816f14 100644 --- a/tests/testthat/test-covidcast.R +++ b/tests/testthat/test-covidcast.R @@ -7,7 +7,7 @@ test_that("covidcast", { epirange(20210405, 20210410), fetch_args = fetch_args_list(dry_run = TRUE) ), - covidcast( + pub_covidcast( "fb-survey", "smoothed_cli", "nation", diff --git a/tests/testthat/test-endpoints.R b/tests/testthat/test-endpoints.R index 3812314b..3c81dea1 100644 --- a/tests/testthat/test-endpoints.R +++ b/tests/testthat/test-endpoints.R @@ -5,24 +5,24 @@ test_that("basic_epidata_call", { epirange(201501, 201601), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(covid_hosp_facility_lookup( + expect_no_error(pub_covid_hosp_facility_lookup( state = "fl", fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(covid_hosp_facility( + expect_no_error(pub_covid_hosp_facility( hospital_pks = "100075", collection_weeks = epirange(20200101, 20200501), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(covid_hosp_state_timeseries( + expect_no_error(pub_covid_hosp_state_timeseries( states = "fl", dates = epirange(20200101, 20200501), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(covidcast_meta( + expect_no_error(pub_covidcast_meta( fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(covidcast( + expect_no_error(pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", time_type = "day", @@ -31,12 +31,12 @@ test_that("basic_epidata_call", { geo_values = "ca,fl", fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(delphi( + expect_no_error(pub_delphi( system = "ec", epiweek = 202006, fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(dengue_nowcast( + expect_no_error(pub_dengue_nowcast( locations = "?", epiweeks = epirange(201501, 202001), fetch_args = fetch_args_list(dry_run = TRUE) @@ -48,30 +48,30 @@ test_that("basic_epidata_call", { epiweeks = epirange(201501, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(ecdc_ili( + expect_no_error(pub_ecdc_ili( regions = "austria", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(flusurv( + expect_no_error(pub_flusurv( locations = "CA", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(fluview_clinical( + expect_no_error(pub_fluview_clinical( regions = "nat", epiweeks = epirange(201601, 201701), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(fluview_meta( + expect_no_error(pub_fluview_meta( fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(fluview( + expect_no_error(pub_fluview( regions = "nat", epiweeks = epirange(201601, 201701), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(gft( + expect_no_error(pub_gft( locations = "hhs1", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) @@ -83,7 +83,7 @@ test_that("basic_epidata_call", { query = "?", fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(kcdc_ili( + expect_no_error(pub_kcdc_ili( regions = "?", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) @@ -92,15 +92,15 @@ test_that("basic_epidata_call", { auth = "yourkey", fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(meta( + expect_no_error(pub_meta( fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(nidss_dengue( + expect_no_error(pub_nidss_dengue( locations = "taipei", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(nidss_flu( + expect_no_error(pub_nidss_flu( regions = "taipei", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) @@ -111,12 +111,12 @@ test_that("basic_epidata_call", { epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(nowcast( + expect_no_error(pub_nowcast( locations = "ca", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(paho_dengue( + expect_no_error(pub_paho_dengue( regions = "ca", epiweeks = epirange(201201, 202001), fetch_args = fetch_args_list(dry_run = TRUE) @@ -140,7 +140,7 @@ test_that("basic_epidata_call", { epiweeks = epirange(201501, 202001), fetch_args = fetch_args_list(dry_run = TRUE) ) %>% request_url()) - expect_no_error(wiki( + expect_no_error(pub_wiki( articles = "avian_influenza", epiweeks = epirange(201501, 202001), fetch_args = fetch_args_list(dry_run = TRUE) diff --git a/tests/testthat/test-epidatacall.R b/tests/testthat/test-epidatacall.R index 4a2945a6..b0d171d8 100644 --- a/tests/testthat/test-epidatacall.R +++ b/tests/testthat/test-epidatacall.R @@ -69,7 +69,7 @@ test_that("fetch_args", { }) test_that("fetch and fetch_tbl", { - epidata_call <- covidcast( + epidata_call <- pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", time_type = "day", @@ -103,7 +103,7 @@ test_that("fetch and fetch_tbl", { }) test_that("fetch_tbl warns on non-success", { - epidata_call <- covidcast( + epidata_call <- pub_covidcast( source = "jhu-csse", signals = "confirmed_7dav_incidence_prop", time_type = "day", @@ -142,7 +142,7 @@ test_that("fetch_tbl warns on non-success", { test_that("classic only fetch", { # delphi is an example endpoint that only suports the classic call - epidata_call <- delphi( + epidata_call <- pub_delphi( system = "ec", epiweek = 201501, fetch_args = fetch_args_list(dry_run = TRUE) diff --git a/tests/testthat/test-model.R b/tests/testthat/test-model.R index c0723d01..7a05aa0e 100644 --- a/tests/testthat/test-model.R +++ b/tests/testthat/test-model.R @@ -49,7 +49,7 @@ test_that("`parse_timeset_input` on valid inputs", { test_that("null parsing", { # parse_data_frame (df[[info$name]] = NULL)-> parse_value - epidata_call <- flusurv( + epidata_call <- pub_flusurv( locations = "ca", epiweeks = 202001, fetch_args = fetch_args_list(dry_run = TRUE) From 4993b7c2c2d88211cc9e170a6bb7fb5bddadc67a Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:07:31 -0700 Subject: [PATCH 20/26] docs: document --- man/cache_epidata_call.Rd | 2 +- man/epidata_call.Rd | 4 ++-- man/pub_covid_hosp_facility.Rd | 2 +- man/pub_covid_hosp_facility_lookup.Rd | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/man/cache_epidata_call.Rd b/man/cache_epidata_call.Rd index 60a86ff6..f9ae68a6 100644 --- a/man/cache_epidata_call.Rd +++ b/man/cache_epidata_call.Rd @@ -7,7 +7,7 @@ cache_epidata_call(epidata_call, fetch_args = fetch_args_list()) } \arguments{ -\item{fetch_args}{the args list for fetch as generated by \link{`fetch_args_list()``}} +\item{fetch_args}{the args list for fetch as generated by \code{\link[=fetch_args_list]{fetch_args_list()}}} \item{call}{the \code{epidata_call} object} } diff --git a/man/epidata_call.Rd b/man/epidata_call.Rd index 456cc97c..a835ac7c 100644 --- a/man/epidata_call.Rd +++ b/man/epidata_call.Rd @@ -39,14 +39,14 @@ fetch(epidata_call, fetch_args = fetch_args_list()) } \description{ \code{epidata_call} objects are generated internally by endpoint functions like -\code{\link{covidcast}}; by default, they are piped directly into the \code{fetch} +\code{\link{pub_covidcast}}; by default, they are piped directly into the \code{fetch} function to fetch and format the data. For most endpoints this will return a tibble, but a few non-COVIDCAST endpoints only support will return a JSON-like list instead. \code{create_epidata_call} is the constructor for \code{epidata_call} objects, but you should not need to use it directly; instead, use an endpoint function, -e.g., \code{\link{covidcast}}, to generate an \code{epidata_call} for the data of +e.g., \code{\link{pub_covidcast}}, to generate an \code{epidata_call} for the data of interest. There are some other functions available for debugging and advanced usage: - diff --git a/man/pub_covid_hosp_facility.Rd b/man/pub_covid_hosp_facility.Rd index edabb8eb..e56d255c 100644 --- a/man/pub_covid_hosp_facility.Rd +++ b/man/pub_covid_hosp_facility.Rd @@ -36,7 +36,7 @@ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp_facility.html} Starting October 1, 2022, some facilities are only required to -report annually. The companion function \code{\link[=covid_hosp_facility_lookup]{covid_hosp_facility_lookup()}} can be +report annually. The companion function \code{\link[=pub_covid_hosp_facility_lookup]{pub_covid_hosp_facility_lookup()}} can be used to look up facility identifiers in a variety of ways. See also the official description and data dictionary at for diff --git a/man/pub_covid_hosp_facility_lookup.Rd b/man/pub_covid_hosp_facility_lookup.Rd index 12b7fccb..21217a25 100644 --- a/man/pub_covid_hosp_facility_lookup.Rd +++ b/man/pub_covid_hosp_facility_lookup.Rd @@ -35,7 +35,7 @@ pub_covid_hosp_facility_lookup( \description{ Obtains unique identifiers and other metadata for COVID hospitalization facilities of interest. -This is a companinon endpoint to the \code{\link[=covid_hosp_facility]{covid_hosp_facility()}} endpoint. +This is a companinon endpoint to the \code{\link[=pub_covid_hosp_facility]{pub_covid_hosp_facility()}} endpoint. } \details{ API docs: From 29317834eedc30b41ea8b8c3df5b958764a67772 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:10:26 -0700 Subject: [PATCH 21/26] chore: bump version to 1.0.0 and add news --- .bumpversion.cfg | 2 +- DESCRIPTION | 2 +- NEWS.md | 20 ++++++++++++++------ R/constants.R | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 7565dd9d..c4459027 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.9.0 +current_version = 1.0.0 commit = False tag = False diff --git a/DESCRIPTION b/DESCRIPTION index 6ef7d2ef..506efe67 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: epidatr Type: Package Title: Client for Delphi's Epidata API -Version: 0.9.0 +Version: 1.0.0 Authors@R: c( person("Logan", "Brooks", email = "lcbrooks@andrew.cmu.edu", role = c("aut")), diff --git a/NEWS.md b/NEWS.md index c4cdcde9..9dd1990e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +# epidatr 1.0.0 + +- Add `set_cache` and other caching functions. +- Prefix all non-private endpoints with `pub_`. +- Update printing of `avail_endpoints` to be more readable. +- Update printing of `covidcast_epidata()` to be more readable. +- Update landing docs to be more friendly, add plots. + # epidatr 0.9.0 - Major interface change: all endpoints now fetch by default. @@ -29,13 +37,13 @@ # epidatr 0.6.0 - The `fetch_{tbl,classic,df,json,csv}` functions have been replaced by the -`fetch()` function, which almost always returns a tibble, except when used with -a limited number of older endpoints (such as `delphi()` and `meta()`), where it -will output a nested list structure. + `fetch()` function, which almost always returns a tibble, except when used with + a limited number of older endpoints (such as `delphi()` and `meta()`), where it + will output a nested list structure. # epidatr 0.5.0 - The package that this installs is being renamed from `delphi.epidata` to -`epidatr`. To migrate, run the installation command above, followed by -`remove.packages("delphi.epidata")`, and adjust all references to the package -name accordingly. + `epidatr`. To migrate, run the installation command above, followed by + `remove.packages("delphi.epidata")`, and adjust all references to the package + name accordingly. diff --git a/R/constants.R b/R/constants.R index eb852c0b..b00768ca 100644 --- a/R/constants.R +++ b/R/constants.R @@ -1,3 +1,3 @@ -version <- "0.9.0" +version <- "1.0.0" http_headers <- httr::add_headers("User-Agent" = paste0("epidatr/", version), "Accept-Encoding" = "gzip") global_base_url <- "https://api.delphi.cmu.edu/epidata/" From ab08359c44117a79e9add6ac5aad61eb5a96f722 Mon Sep 17 00:00:00 2001 From: dsweber2 Date: Wed, 6 Sep 2023 23:12:16 +0000 Subject: [PATCH 22/26] docs: document (GHA) --- man/pub_covid_hosp_facility.Rd | 6 +++--- man/pub_covid_hosp_facility_lookup.Rd | 6 +++--- man/pub_covid_hosp_state_timeseries.Rd | 4 ++-- man/pub_covidcast.Rd | 3 +-- man/pub_covidcast_meta.Rd | 7 +++---- man/pub_ecdc_ili.Rd | 4 ++-- man/pub_flusurv.Rd | 7 ++++--- man/pub_fluview.Rd | 9 +++++---- man/pub_gft.Rd | 4 ++-- man/pub_nidss_dengue.Rd | 4 ++-- man/pub_nidss_flu.Rd | 5 ++--- man/pub_nowcast.Rd | 6 +++--- 12 files changed, 32 insertions(+), 33 deletions(-) diff --git a/man/pub_covid_hosp_facility.Rd b/man/pub_covid_hosp_facility.Rd index e56d255c..762d97f3 100644 --- a/man/pub_covid_hosp_facility.Rd +++ b/man/pub_covid_hosp_facility.Rd @@ -27,14 +27,14 @@ pub_covid_hosp_facility( \code{\link{epidata_call}} } \description{ +API docs: +\url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp_facility.html} + Obtains the COVID-19 reported patient impact and hospital capacity data by facility. This dataset is provided by the US Department of Health & Human Services via healthdata.gov. } \details{ -API docs: -\url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp_facility.html} - Starting October 1, 2022, some facilities are only required to report annually. The companion function \code{\link[=pub_covid_hosp_facility_lookup]{pub_covid_hosp_facility_lookup()}} can be used to look up facility identifiers in a variety of ways. diff --git a/man/pub_covid_hosp_facility_lookup.Rd b/man/pub_covid_hosp_facility_lookup.Rd index 21217a25..c416dee9 100644 --- a/man/pub_covid_hosp_facility_lookup.Rd +++ b/man/pub_covid_hosp_facility_lookup.Rd @@ -33,14 +33,14 @@ pub_covid_hosp_facility_lookup( \code{\link{epidata_call}} } \description{ +API docs: +\url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp_facility_lookup.html} + Obtains unique identifiers and other metadata for COVID hospitalization facilities of interest. This is a companinon endpoint to the \code{\link[=pub_covid_hosp_facility]{pub_covid_hosp_facility()}} endpoint. } \details{ -API docs: -\url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp_facility_lookup.html} - Only one argument needs to be specified. Combinations of the arguments are not currently supported. For instance, specifying both city and state are not supported. diff --git a/man/pub_covid_hosp_state_timeseries.Rd b/man/pub_covid_hosp_state_timeseries.Rd index de13a690..6cedca3f 100644 --- a/man/pub_covid_hosp_state_timeseries.Rd +++ b/man/pub_covid_hosp_state_timeseries.Rd @@ -28,13 +28,13 @@ most recent issue is returned.} \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp.html}. + Obtains the COVID-19 reported patient impact and hospital capacity data by state. This dataset is provided by the US Department of Health & Human Services via healthdata.gov. } \details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/covid_hosp.html}. - Starting October 1, 2022, some facilities are only required to report annually. diff --git a/man/pub_covidcast.Rd b/man/pub_covidcast.Rd index 5775feef..ae1c39f9 100644 --- a/man/pub_covidcast.Rd +++ b/man/pub_covidcast.Rd @@ -58,8 +58,7 @@ the most recent issue is returned. Mutually exclusive with \code{as_of} or } \description{ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/covidcast.html} -} -\details{ + COVIDcast public dashboard: \url{https://delphi.cmu.edu/covidcast/} } \examples{ diff --git a/man/pub_covidcast_meta.Rd b/man/pub_covidcast_meta.Rd index 75c42c69..b8c440c7 100644 --- a/man/pub_covidcast_meta.Rd +++ b/man/pub_covidcast_meta.Rd @@ -13,14 +13,13 @@ pub_covidcast_meta(fetch_args = fetch_args_list()) \code{\link{epidata_call}} } \description{ +API docs: +\url{https://cmu-delphi.github.io/delphi-epidata/api/covidcast_meta.html}. + Fetch a summary of metadata for all sources and signals that are available in the API, along with basic summary statistics such as the dates they are available, the geographic levels at which they are reported, and etc. } -\details{ -API docs: -\url{https://cmu-delphi.github.io/delphi-epidata/api/covidcast_meta.html}. -} \examples{ \dontrun{ pub_covidcast_meta() diff --git a/man/pub_ecdc_ili.Rd b/man/pub_ecdc_ili.Rd index 2dd26bcb..634e3762 100644 --- a/man/pub_ecdc_ili.Rd +++ b/man/pub_ecdc_ili.Rd @@ -32,12 +32,12 @@ the most recent issue is returned. Mutually exclusive with \code{issues}.} \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/ecdc_ili.html}. + Obtain information on influenza-like-illness from the European Centre for Disease Prevention and Control. } \details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/ecdc_ili.html}. - The list of location argument can be found in \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/labels/ecdc_regions.txt}. } diff --git a/man/pub_flusurv.Rd b/man/pub_flusurv.Rd index caa6e3e2..53cf550a 100644 --- a/man/pub_flusurv.Rd +++ b/man/pub_flusurv.Rd @@ -32,13 +32,14 @@ the most recent issue is returned. Mutually exclusive with \code{issues}.} \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/flusurv.html}. + Obtain information on flu hospitalization rates from the Center of Disease Control. + +See also \url{https://gis.cdc.gov/GRASP/Fluview/FluHospRates.html}. } \details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/flusurv.html}. -See also \url{https://gis.cdc.gov/GRASP/Fluview/FluHospRates.html}. - The list of location argument can be found in \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/labels/flusurv_locations.txt}. } diff --git a/man/pub_fluview.Rd b/man/pub_fluview.Rd index 389ff92c..0eb7954d 100644 --- a/man/pub_fluview.Rd +++ b/man/pub_fluview.Rd @@ -40,14 +40,15 @@ key).} \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/fluview.html}. For + Obtains information on outpatient inluenza-like-illness (ILI) from U.S. Outpatient Influenza-like Illness Surveillance Network (ILINet). -} -\details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/fluview.html}. For + more information on ILINet, see \url{https://gis.cdc.gov/grasp/fluview/fluportaldashboard.html}. - +} +\details{ The full list of location inputs can be accsssed at \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/src/acquisition/fluview/fluview_locations.py}. } diff --git a/man/pub_gft.Rd b/man/pub_gft.Rd index a3d23fb5..8bdc9742 100644 --- a/man/pub_gft.Rd +++ b/man/pub_gft.Rd @@ -17,12 +17,12 @@ pub_gft(locations, epiweeks, fetch_args = fetch_args_list()) \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/gft.html} + Obtains estimates of inluenza activity based on volume of certain search queries from Google. } \details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/gft.html} - Google has discontinued Flu Trends and this is now a static endpoint. Possibile input for locations can be found in \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/labels/regions.txt}, diff --git a/man/pub_nidss_dengue.Rd b/man/pub_nidss_dengue.Rd index 4302eaad..ae6bc1d5 100644 --- a/man/pub_nidss_dengue.Rd +++ b/man/pub_nidss_dengue.Rd @@ -17,12 +17,12 @@ pub_nidss_dengue(locations, epiweeks, fetch_args = fetch_args_list()) \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/nidss_dengue.html} + Obtains counts of confirmed dengue cases in Taiwan from Taiwan National Infectious Disease Statistical System. } \details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/nidss_dengue.html} - Possible location inputs can be found in \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/labels/nidss_regions.txt} and diff --git a/man/pub_nidss_flu.Rd b/man/pub_nidss_flu.Rd index e2af76e3..f1b12d36 100644 --- a/man/pub_nidss_flu.Rd +++ b/man/pub_nidss_flu.Rd @@ -32,12 +32,11 @@ the most recent issue is returned. Mutually exclusive with \code{issues}.} \code{\link{epidata_call}} } \description{ +API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/nidss_flu.html} + Obtains information on outpatient inluenza-like-illness from Taiwan National Infectious Disease Statistical System. } -\details{ -API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/nidss_flu.html} -} \examples{ \dontrun{ pub_nidss_flu(regions = "taipei", epiweeks = epirange(201501, 201601)) diff --git a/man/pub_nowcast.Rd b/man/pub_nowcast.Rd index dc7faaf8..0a56e416 100644 --- a/man/pub_nowcast.Rd +++ b/man/pub_nowcast.Rd @@ -18,11 +18,11 @@ pub_nowcast(locations, epiweeks, fetch_args = fetch_args_list()) } \description{ API docs: \url{https://cmu-delphi.github.io/delphi-epidata/api/nowcast.html}. -} -\details{ + Obtains information on outpatient inluenza-like-illness (ILI) from Delphi's epidemiological data - +} +\details{ The full list of location inputs can be accsssed at \url{https://github.com/cmu-delphi/delphi-epidata/blob/main/src/acquisition/fluview/fluview_locations.py}. } From 4e330738258b791bcc8a484ae0faec36d2099cbe Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:28:38 -0700 Subject: [PATCH 23/26] chore: bump lintr object length --- .lintr | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.lintr b/.lintr index a63d9147..c0bfc243 100644 --- a/.lintr +++ b/.lintr @@ -1,4 +1,5 @@ linters: linters_with_defaults( line_length_linter(120), - cyclocomp_linter = NULL + cyclocomp_linter = NULL, + object_length_linter(length = 40L) ) From 6f267296381d37ba2cbc4bff00a67fcc6a820083 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:28:48 -0700 Subject: [PATCH 24/26] lintr: make happy --- R/endpoints.R | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/R/endpoints.R b/R/endpoints.R index d102ccba..9fda143f 100644 --- a/R/endpoints.R +++ b/R/endpoints.R @@ -1126,7 +1126,14 @@ pub_fluview_meta <- function(fetch_args = fetch_args_list()) { #' @return [`epidata_call`] #' @keywords endpoint #' @export -pub_fluview <- function(regions, epiweeks, ..., issues = NULL, lag = NULL, auth = NULL, fetch_args = fetch_args_list()) { +pub_fluview <- function( + regions, + epiweeks, + ..., + issues = NULL, + lag = NULL, + auth = NULL, + fetch_args = fetch_args_list()) { assert_character_param("regions", regions) assert_timeset_param("epiweeks", epiweeks) assert_timeset_param("issues", issues, required = FALSE) From a1141865bcb540cecac176a4fc1da2324e7e3047 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:28:58 -0700 Subject: [PATCH 25/26] fix: md5 import --- R/cache.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/cache.R b/R/cache.R index f688594b..ccc41aa2 100644 --- a/R/cache.R +++ b/R/cache.R @@ -240,7 +240,7 @@ cache_info <- function() { #' @param call the `epidata_call` object #' @param fetch_args the args list for fetch as generated by [`fetch_args_list()`] #' @keywords internal -#' @import cachem openssl +#' @importFrom openssl md5 cache_epidata_call <- function(epidata_call, fetch_args = fetch_args_list()) { is_cachable <- check_is_cachable(epidata_call, fetch_args) if (is_cachable) { From 2589d0f93d5c04ab6bf7be2bc7a9561a263acb80 Mon Sep 17 00:00:00 2001 From: Dmitry Shemetov Date: Wed, 6 Sep 2023 16:29:05 -0700 Subject: [PATCH 26/26] docs: document --- NAMESPACE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 9d39a295..6f454611 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -48,7 +48,6 @@ export(pvt_twitter) export(set_cache) import(cachem) import(glue) -import(openssl) importFrom(MMWRweek,MMWRweek2Date) importFrom(checkmate,assert) importFrom(checkmate,assert_character) @@ -74,6 +73,7 @@ importFrom(httr,modify_url) importFrom(httr,stop_for_status) importFrom(jsonlite,fromJSON) importFrom(magrittr,"%>%") +importFrom(openssl,md5) importFrom(purrr,map_chr) importFrom(purrr,map_lgl) importFrom(readr,read_csv)