From 332f63e2e84a68cc8884c494edd6e9ca371e9dce Mon Sep 17 00:00:00 2001 From: Justin Bousquin Date: Tue, 23 Sep 2025 16:31:52 -0500 Subject: [PATCH 01/22] Develop (#78) * Create coverage.yaml Init commit * Update coverage.yaml Make sure the report name is specified * Update coverage.yaml Try to get report from ./cobertura.xml * Update coverage.yaml Not there... but try being specific * Update coverage.yaml In case . is somewhere else be specific about where to write * Update coverage.yaml Simplify * Update coverage.yaml Point action to correct coverage report file * Update coverage.yaml Attempt permissions route to post comment vs PAT --- .github/workflows/coverage.yaml | 75 +++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/coverage.yaml diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml new file mode 100644 index 0000000..23f3c55 --- /dev/null +++ b/.github/workflows/coverage.yaml @@ -0,0 +1,75 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [develop] + pull_request: + branches: [develop] + +name: test-coverage + +permissions: + contents: write + checks: write + pull-requests: write + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::covr, any::xml2 + needs: coverage + + - name: Test coverage + run: | + cov <- covr::package_coverage( + quiet = FALSE, + clean = FALSE, + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") + ) + print(cov) + covr::to_cobertura(cov) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package + if-no-files-found: ignore # Suppress warnings if no files are found + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: ./cobertura.xml + + - name: Comment coverage + uses: 5monkeys/cobertura-action@master + with: + report_name: coverage-report + path: ./cobertura.xml + minimum_coverage: 10 + show_missing: true + link_missing_lines: true + + From ebbeab28eae4f2e7c599d907f3a51e7ac849e26f Mon Sep 17 00:00:00 2001 From: Weber Date: Tue, 23 Sep 2025 14:51:34 -0700 Subject: [PATCH 02/22] Trying Jeff's epar package to generate code cov badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 52d8f77..29b3299 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![cran checks](https://badges.cranchecks.info/worst/StreamCatTools.svg)](https://cran.r-project.org/web/checks/check_results_StreamCatTools.html) [![R-CMD-check](https://github.com/USEPA/StreamCatTools/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/USEPA/StreamCatTools/actions/workflows/R-CMD-check.yaml) [![Downloads](https://cranlogs.r-pkg.org/badges/StreamCatTools)](https://cran.r-project.org/package=StreamCatTools) +[![CodeCov](https://img.shields.io/badge/test%20coverage-87%25-388600.svg)](https://img.shields.io/badge/test%20coverage-87%25-388600.svg) ## StreamCatTools: Tools to work with the [StreamCat](https://www.epa.gov/national-aquatic-resource-surveys/streamcat-dataset) API within R and access the full suite of StreamCat and [LakeCat](https://www.epa.gov/national-aquatic-resource-surveys/lakecat-dataset) metrics. From f057869647405f2898f21e781a81bf965ded3f48 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 24 Sep 2025 14:32:06 -0700 Subject: [PATCH 03/22] incrementing dev version --- DESCRIPTION | 2 +- NEWS.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 82e4a72..e6b4b11 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: StreamCatTools Type: Package Title: 'StreamCatTools' -Version: 0.7.0 +Version: 0.7.0.9000 Authors@R: c(person(given = "Marc", family = "Weber", role = c("aut", "cre"), diff --git a/NEWS.md b/NEWS.md index 1eae8d8..aa2d7d6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# StreamCatTools (development version) + +- Added code coverage to the package + # StreamCatTools 0.7.0 - Updated both `sc_get_data` and `lc_get_data` to pass parameters in From b4cb12d811e96027a22fefed4364f3f142d52e7e Mon Sep 17 00:00:00 2001 From: Marc Weber Date: Fri, 3 Oct 2025 14:36:35 -0700 Subject: [PATCH 04/22] Metric categories (#79) * updated params metrics function and added dontrun for examples * test passing with updates to sc and lc params functions and new sc and lc get_metric_names functions --- NAMESPACE | 2 + NEWS.md | 5 +- R/lc_get_comid.R | 2 +- R/lc_get_data.R | 4 +- R/lc_get_params.R | 103 ++++++++++++++++++++++++- R/sc_get_comid.R | 2 +- R/sc_get_data.R | 4 +- R/sc_get_params.R | 113 ++++++++++++++++++++++++++-- README.md | 2 +- man/lc_get_comid.Rd | 2 +- man/lc_get_data.Rd | 2 +- man/lc_get_metric_names.Rd | 34 +++++++++ man/lc_get_params.Rd | 6 +- man/lc_nlcd.Rd | 2 +- man/sc_get_comid.Rd | 2 +- man/sc_get_data.Rd | 2 +- man/sc_get_metric_names.Rd | 38 ++++++++++ man/sc_get_params.Rd | 7 +- man/sc_nlcd.Rd | 2 +- tests/testthat/test-lc_get_params.R | 22 +++--- tests/testthat/test-sc_get_params.R | 33 +++++++- 21 files changed, 350 insertions(+), 39 deletions(-) create mode 100644 man/lc_get_metric_names.Rd create mode 100644 man/sc_get_metric_names.Rd diff --git a/NAMESPACE b/NAMESPACE index 495d937..4ac1597 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,10 +3,12 @@ export(lc_fullname) export(lc_get_comid) export(lc_get_data) +export(lc_get_metric_names) export(lc_get_params) export(lc_nlcd) export(sc_fullname) export(sc_get_comid) export(sc_get_data) +export(sc_get_metric_names) export(sc_get_params) export(sc_nlcd) diff --git a/NEWS.md b/NEWS.md index aa2d7d6..9ec6081 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,9 @@ # StreamCatTools (development version) -- Added code coverage to the package +- Added code coverage to the package +- Added two new functions - `sc_get_metric_names` and `lc_get_metric_names` + to make metric names and descriptions more searchable and slightly updated + parameters in both `sc_get_params` and `lc_get_params` functions # StreamCatTools 0.7.0 diff --git a/R/lc_get_comid.R b/R/lc_get_comid.R index 087ca56..c91331d 100644 --- a/R/lc_get_comid.R +++ b/R/lc_get_comid.R @@ -27,7 +27,7 @@ #' @return A new sf data frame with a populated 'COMID' column #' #' @examples -#' \donttest{ +#' \dontrun{ #' #' dd <- data.frame(x = c(-89.198,-114.125,-122.044), #' y = c(45.502,47.877,43.730)) diff --git a/R/lc_get_data.R b/R/lc_get_data.R index 4bd84a7..0455d2a 100644 --- a/R/lc_get_data.R +++ b/R/lc_get_data.R @@ -54,7 +54,7 @@ #' @return A tibble of desired StreamCat metrics. If data are missing for all rows of a given metric, then the column for that metric will not exist. If data are missing for only some rows, then they will be specified with NA. #' #' @examples -#' \donttest{ +#' \dontrun{ #' df <- lc_get_data(comid='23794487', aoi='cat', metric='fert') #' #' df <- lc_get_data(metric='pcturbmd2006', aoi='ws', @@ -178,7 +178,7 @@ lc_get_data <- function(comid = NULL, #' @return A tibble of desired StreamCat metrics #' #' @examples -#' \donttest{ +#' \dontrun{ #' #' df <- lc_nlcd(comid='23783629', year='2019', aoi='ws') #' diff --git a/R/lc_get_params.R b/R/lc_get_params.R index bd3b69d..39dd52e 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -16,12 +16,14 @@ #' @export #' #' @examples -#' \donttest{ +#' \dontrun{ #' params <- lc_get_params(param='variable_info') #' params <- lc_get_params(param='metric_names') -#' params <- lc_get_params(param='areaOfInterest') +#' params <- sc_get_params(param='categories') +#' params <- lc_get_params(param='aoi') #' params <- lc_get_params(param='state') #' params <- lc_get_params(param='county') +#' params <- sc_get_params(param='datasets') #' } lc_get_params <- function(param = NULL) { @@ -40,7 +42,7 @@ lc_get_params <- function(param = NULL) { params <- params[!duplicated(params)] params <- params[order(params)] } else if(param == 'variable_info') { - params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> readr::read_csv(show_col_types = FALSE) |> @@ -50,6 +52,20 @@ lc_get_params <- function(param = NULL) { short_description=WEBTOOL_NAME,units=METRIC_UNITS, long_description=METRIC_DESCRIPTION, dsid=DSID, source_name=SOURCE_NAME, source_URL=SOURCE_URL) + } else if(param == 'categories'){ + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(INDICATOR_CATEGORY) + params <- sort(unique(params$INDICATOR_CATEGORY)) + } else if(param == 'datasets'){ + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(DSNAME) + params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) } else if(param == 'region'){ params <- resp$region_options[[1]][[1]] params <- params[order(params)] @@ -93,3 +109,84 @@ lc_fullname <- function(metric = NULL) { result <- unique(resp$short_display_name[resp$metric_prefix %in% metric]) return(result) } + +#' Get LakeCat Metric Names +#' +#' @description +#' Function to filter LakeCat metrics metrics by category, area of interest, +#' dataset or year. Use `lc_get_params(categories)` or `lc_get_params(datasets)` +#' to see all the valid category or dataset options +#' +#' @author +#' Marc Weber +#' +#' @param category Filter LakeCat metrics based on the metric category +#' @param aoi Filter LakeCat metrics based on the area of interest +#' @param year Filter LakeCat metrics based on a particular year or years +#' @param dataset Filter LakeCat metrics based on the dataset name +#' +#' @return A dataframe of merics and description that match filter criteria +#' @export +#' +#' @examples +#' \dontrun{ +#' metrics <- lc_get_metric_names(category='Natural') +#' metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), +#' aoi=c('Cat','Ws')} + + +lc_get_metric_names <- function(category = NULL, + aoi = NULL, + year = NULL, + dataset = NULL) { + if (!is.null(aoi)){ + if (any(stringr::str_detect(aoi,'catchment'))) { + aoi <- gsub('catchment','Cat',aoi) + } + if (any(stringr::str_detect(aoi,'watershed'))) { + aoi <- gsub('watershed','Ws',aoi) + } + if (any(stringr::str_detect(aoi,'riparian_catchment'))) { + aoi <- gsub('riparian_catchment','CatRp100',aoi) + } + if (any(stringr::str_detect(aoi,'riparian_watershed'))) { + aoi <- gsub('riparian_watershed','WsRp100',aoi) + } + aoi <- stringr::str_to_title(aoi) + } + resp <- params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) + + filters <- list(INDICATOR_CATEGORY = category, AOI = aoi, YEAR = year, + DSNAME = dataset) + + filter_data <- function(data, filters) { + # Filter the data frame for each non-null filter + filtered_data <- purrr::reduce( + names(filters), + .init = data, + .f = function(df, col_name) { + filter_values <- filters[[col_name]] + if (!is.null(filter_values)) { + df <- df %>% + dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) %>% + dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) %>% + dplyr::select(-temp_col) + } + df + } + ) + return(filtered_data) + } + results <- filter_data(resp, filters) + results <- results |> + dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, + AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, + Metric_Description = METRIC_DESCRIPTION, + Units = METRIC_UNITS, Source = SOURCE_NAME, + Dataset = DSNAME) + + return(results) +} \ No newline at end of file diff --git a/R/sc_get_comid.R b/R/sc_get_comid.R index 073ae6a..35bdcab 100644 --- a/R/sc_get_comid.R +++ b/R/sc_get_comid.R @@ -24,7 +24,7 @@ #' @return A new sf data frame with a populated 'COMID' column #' #' @examples -#' \donttest{ +#' \dontrun{ #' #' dd <- data.frame(x = c(-122.649,-100.348,-75.186,-106.675), #' y = c(45.085, 35.405,42.403,38.721)) diff --git a/R/sc_get_data.R b/R/sc_get_data.R index dfb0495..fb0ba72 100644 --- a/R/sc_get_data.R +++ b/R/sc_get_data.R @@ -59,7 +59,7 @@ #' @return A data frame of StreamCat metrics. If data are missing for all rows of a given metric, then the column for that metric will not exist. If data are missing for only some rows, then they will be specified with NA. #' #' @examples -#' \donttest{ +#' \dontrun{ #' df <- sc_get_data(comid='179', aoi='cat', metric='fert') #' #' df <- sc_get_data(metric='pctgrs2006', aoi='ws', region='Region01') @@ -210,7 +210,7 @@ sc_get_data <- function(comid = NULL, #' @return A tibble of desired StreamCat metrics #' #' @examples -#' \donttest{ +#' \dontrun{ #' df <- sc_nlcd(year='2001', aoi='cat',comid='179,1337,1337420') #' #' df <- sc_nlcd(year='2001', aoi='ws', region='Region01') diff --git a/R/sc_get_params.R b/R/sc_get_params.R index 19d7bd2..864bc8b 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -16,20 +16,22 @@ #' @export #' #' @examples -#' \donttest{ +#' \dontrun{ #' params <- sc_get_params(param='variable_info') #' params <- sc_get_params(param='metric_names') -#' params <- sc_get_params(param='areaOfInterest') +#' params <- sc_get_params(param='categories') +#' params <- sc_get_params(param='aoi') #' params <- sc_get_params(param='state') #' params <- sc_get_params(param='county') -#' } +#' params <- sc_get_params(param='datasets')} + sc_get_params <- function(param = NULL) { UUID <- DATE_DOWNLOADED <- METADATA <- FINAL_TABLE<- NULL INDICATOR_CATEGORY <- METRIC_NAME <- AOI <- YEAR <- NULL WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics")$items - if (param=='areaOfInterest'){ + if (param=='aoi'){ params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] params <- c(gsub(" ","", params),'other') params <- params[order(params)] @@ -48,7 +50,22 @@ sc_get_params <- function(param = NULL) { short_description=WEBTOOL_NAME,units=METRIC_UNITS, long_description=METRIC_DESCRIPTION, dsid=DSID, source_name=SOURCE_NAME, source_URL=SOURCE_URL) - } else if(param == 'region'){ + } else if(param == 'categories'){ + params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(INDICATOR_CATEGORY) + params <- sort(unique(params$INDICATOR_CATEGORY)) + } else if(param == 'datasets'){ + params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(DSNAME) + params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) + } + else if(param == 'region'){ params <- resp$region_options[[1]][[1]] params <- params[order(params)] } else if(param == 'state'){ @@ -91,3 +108,89 @@ sc_fullname <- function(metric = NULL) { result <- unique(resp$short_display_name[resp$metric_prefix %in% metric]) return(result) } + + +#' Get StreamCat Metric Names +#' +#' @description +#' Function to filter StreamCat metrics metrics by category, area of interest, +#' dataset or year. Use `sc_get_params(categories)` or `sc_get_params(datasets)` +#' to see all the valid category or dataset options +#' +#' @author +#' Marc Weber +#' +#' @param category Filter StreamCat metrics based on the metric category +#' @param aoi Filter StreamCat metrics based on the area of interest +#' @param year Filter StreamCat metrics based on a particular year or years +#' @param dataset Filter StreamCat metrics based on the dataset name +#' +#' @return A dataframe of merics and description that match filter criteria +#' @export +#' +#' @examples +#' \dontrun{ +#' metrics <- sc_get_metric_names(category='Wildfire') +#' metrics <- sc_get_metric_names(category = c('Deposition','Climate'), +#' aoi=c('Cat','Ws') +#' metrics <- sc_get_metric_names(aoi='Other', +#' dataset=c('Canal Density','Predicted Channel Widths Depths')) +#' +#' } + + +sc_get_metric_names <- function(category = NULL, + aoi = NULL, + year = NULL, + dataset = NULL) { + if (!is.null(aoi)){ + if (any(stringr::str_detect(aoi,'catchment'))) { + aoi <- gsub('catchment','Cat',aoi) + } + if (any(stringr::str_detect(aoi,'watershed'))) { + aoi <- gsub('watershed','Ws',aoi) + } + if (any(stringr::str_detect(aoi,'riparian_catchment'))) { + aoi <- gsub('riparian_catchment','CatRp100',aoi) + } + if (any(stringr::str_detect(aoi,'riparian_watershed'))) { + aoi <- gsub('riparian_watershed','WsRp100',aoi) + } + aoi <- stringr::str_to_title(aoi) + } + resp <- params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) + + filters <- list(INDICATOR_CATEGORY = category, AOI = aoi, YEAR = year, + DSNAME = dataset) + + filter_data <- function(data, filters) { + # Filter the data frame for each non-null filter + filtered_data <- purrr::reduce( + names(filters), + .init = data, + .f = function(df, col_name) { + filter_values <- filters[[col_name]] + if (!is.null(filter_values)) { + df <- df %>% + dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) %>% + dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) %>% + dplyr::select(-temp_col) + } + df + } + ) + return(filtered_data) + } + results <- filter_data(resp, filters) + results <- results |> + dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, + AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, + Metric_Description = METRIC_DESCRIPTION, + Units = METRIC_UNITS, Source = SOURCE_NAME, + Dataset = DSNAME) + + return(results) +} diff --git a/README.md b/README.md index 29b3299..373894c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![cran checks](https://badges.cranchecks.info/worst/StreamCatTools.svg)](https://cran.r-project.org/web/checks/check_results_StreamCatTools.html) [![R-CMD-check](https://github.com/USEPA/StreamCatTools/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/USEPA/StreamCatTools/actions/workflows/R-CMD-check.yaml) [![Downloads](https://cranlogs.r-pkg.org/badges/StreamCatTools)](https://cran.r-project.org/package=StreamCatTools) -[![CodeCov](https://img.shields.io/badge/test%20coverage-87%25-388600.svg)](https://img.shields.io/badge/test%20coverage-87%25-388600.svg) +[![CodeCov](https://img.shields.io/badge/test%20coverage-86.9%25-388600.svg)](https://img.shields.io/badge/test%20coverage-86.9%25-388600.svg) ## StreamCatTools: Tools to work with the [StreamCat](https://www.epa.gov/national-aquatic-resource-surveys/streamcat-dataset) API within R and access the full suite of StreamCat and [LakeCat](https://www.epa.gov/national-aquatic-resource-surveys/lakecat-dataset) metrics. diff --git a/man/lc_get_comid.Rd b/man/lc_get_comid.Rd index 65fa21b..d56c481 100644 --- a/man/lc_get_comid.Rd +++ b/man/lc_get_comid.Rd @@ -38,7 +38,7 @@ sf object. The function generates a vector of NHDPlus Waterbody COMID values a user can then pass to lc_get_data function } \examples{ -\donttest{ +\dontrun{ dd <- data.frame(x = c(-89.198,-114.125,-122.044), y = c(45.502,47.877,43.730)) diff --git a/man/lc_get_data.Rd b/man/lc_get_data.Rd index 79db8dd..db08c5e 100644 --- a/man/lc_get_data.Rd +++ b/man/lc_get_data.Rd @@ -70,7 +70,7 @@ Function to return LakeCat metrics using the StreamCat API. The function allows specific metric data aggregated by area of interest, returned by comid(s), hydroregion(s), state(s), or county(ies). } \examples{ -\donttest{ +\dontrun{ df <- lc_get_data(comid='23794487', aoi='cat', metric='fert') df <- lc_get_data(metric='pcturbmd2006', aoi='ws', diff --git a/man/lc_get_metric_names.Rd b/man/lc_get_metric_names.Rd new file mode 100644 index 0000000..4668ecd --- /dev/null +++ b/man/lc_get_metric_names.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/lc_get_params.R +\name{lc_get_metric_names} +\alias{lc_get_metric_names} +\title{Get LakeCat Metric Names} +\usage{ +lc_get_metric_names(category = NULL, aoi = NULL, year = NULL, dataset = NULL) +} +\arguments{ +\item{category}{Filter LakeCat metrics based on the metric category} + +\item{aoi}{Filter LakeCat metrics based on the area of interest} + +\item{year}{Filter LakeCat metrics based on a particular year or years} + +\item{dataset}{Filter LakeCat metrics based on the dataset name} +} +\value{ +A dataframe of merics and description that match filter criteria +} +\description{ +Function to filter LakeCat metrics metrics by category, area of interest, +dataset or year. Use `lc_get_params(categories)` or `lc_get_params(datasets)` +to see all the valid category or dataset options +} +\examples{ +\dontrun{ +metrics <- lc_get_metric_names(category='Natural') +metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), +aoi=c('Cat','Ws')} +} +\author{ +Marc Weber +} diff --git a/man/lc_get_params.Rd b/man/lc_get_params.Rd index 168275a..ae76d8e 100644 --- a/man/lc_get_params.Rd +++ b/man/lc_get_params.Rd @@ -20,12 +20,14 @@ A list of all the current LakeCat values for a given parameter Function to return available LakeCat parameters using the StreamCat API. } \examples{ -\donttest{ +\dontrun{ params <- lc_get_params(param='variable_info') params <- lc_get_params(param='metric_names') -params <- lc_get_params(param='areaOfInterest') +params <- sc_get_params(param='categories') +params <- lc_get_params(param='aoi') params <- lc_get_params(param='state') params <- lc_get_params(param='county') +params <- sc_get_params(param='datasets') } } \author{ diff --git a/man/lc_nlcd.Rd b/man/lc_nlcd.Rd index 7beef4c..512be94 100644 --- a/man/lc_nlcd.Rd +++ b/man/lc_nlcd.Rd @@ -45,7 +45,7 @@ A tibble of desired StreamCat metrics Function to specifically retrieve all NLCD metrics for a given year using the StreamCat API. } \examples{ -\donttest{ +\dontrun{ df <- lc_nlcd(comid='23783629', year='2019', aoi='ws') diff --git a/man/sc_get_comid.Rd b/man/sc_get_comid.Rd index bc03c0e..d9d87fc 100644 --- a/man/sc_get_comid.Rd +++ b/man/sc_get_comid.Rd @@ -29,7 +29,7 @@ sf object. The function generates a vector of COMID values a user can then pass to sc_get_data function } \examples{ -\donttest{ +\dontrun{ dd <- data.frame(x = c(-122.649,-100.348,-75.186,-106.675), y = c(45.085, 35.405,42.403,38.721)) diff --git a/man/sc_get_data.Rd b/man/sc_get_data.Rd index 8022e01..09bccc0 100644 --- a/man/sc_get_data.Rd +++ b/man/sc_get_data.Rd @@ -75,7 +75,7 @@ Function to return StreamCat catchment and watershed metrics using the StreamCat specific metric data aggregated by area of interest, returned by comid(s), hydroregion(s), state(s), or county(ies). } \examples{ -\donttest{ +\dontrun{ df <- sc_get_data(comid='179', aoi='cat', metric='fert') df <- sc_get_data(metric='pctgrs2006', aoi='ws', region='Region01') diff --git a/man/sc_get_metric_names.Rd b/man/sc_get_metric_names.Rd new file mode 100644 index 0000000..0897bb3 --- /dev/null +++ b/man/sc_get_metric_names.Rd @@ -0,0 +1,38 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/sc_get_params.R +\name{sc_get_metric_names} +\alias{sc_get_metric_names} +\title{Get StreamCat Metric Names} +\usage{ +sc_get_metric_names(category = NULL, aoi = NULL, year = NULL, dataset = NULL) +} +\arguments{ +\item{category}{Filter StreamCat metrics based on the metric category} + +\item{aoi}{Filter StreamCat metrics based on the area of interest} + +\item{year}{Filter StreamCat metrics based on a particular year or years} + +\item{dataset}{Filter StreamCat metrics based on the dataset name} +} +\value{ +A dataframe of merics and description that match filter criteria +} +\description{ +Function to filter StreamCat metrics metrics by category, area of interest, +dataset or year. Use `sc_get_params(categories)` or `sc_get_params(datasets)` +to see all the valid category or dataset options +} +\examples{ +\dontrun{ +metrics <- sc_get_metric_names(category='Wildfire') +metrics <- sc_get_metric_names(category = c('Deposition','Climate'), +aoi=c('Cat','Ws') +metrics <- sc_get_metric_names(aoi='Other', +dataset=c('Canal Density','Predicted Channel Widths Depths')) + +} +} +\author{ +Marc Weber +} diff --git a/man/sc_get_params.Rd b/man/sc_get_params.Rd index 47a721f..34c743f 100644 --- a/man/sc_get_params.Rd +++ b/man/sc_get_params.Rd @@ -20,13 +20,14 @@ A list of all the current StreamCat values for a given parameter Function to return available StreamCat parameters using the StreamCat API. } \examples{ -\donttest{ +\dontrun{ params <- sc_get_params(param='variable_info') params <- sc_get_params(param='metric_names') -params <- sc_get_params(param='areaOfInterest') +params <- sc_get_params(param='categories') +params <- sc_get_params(param='aoi') params <- sc_get_params(param='state') params <- sc_get_params(param='county') -} +params <- sc_get_params(param='datasets')} } \author{ Marc Weber diff --git a/man/sc_nlcd.Rd b/man/sc_nlcd.Rd index 2db3bd0..6cd7d2a 100644 --- a/man/sc_nlcd.Rd +++ b/man/sc_nlcd.Rd @@ -64,7 +64,7 @@ A tibble of desired StreamCat metrics Function to retrieve all NLCD metrics for a given year using the StreamCat API. } \examples{ -\donttest{ +\dontrun{ df <- sc_nlcd(year='2001', aoi='cat',comid='179,1337,1337420') df <- sc_nlcd(year='2001', aoi='ws', region='Region01') diff --git a/tests/testthat/test-lc_get_params.R b/tests/testthat/test-lc_get_params.R index 20d2224..21d3f62 100644 --- a/tests/testthat/test-lc_get_params.R +++ b/tests/testthat/test-lc_get_params.R @@ -6,27 +6,27 @@ test_that("lc_get_params for metric_names parameters", { expect_gt(length(params),500) }) -test_that("sc_get_params for variable_info parameters", { - params <- sc_get_params(param='variable_info') +test_that("lc_get_params for variable_info parameters", { + params <- lc_get_params(param='variable_info') expect_true(exists("params")) expect_gt(nrow(params),100) }) +test_that("lc_get_metric_names", { + metrics <- lc_get_metric_names(category='Natural') + expect_true(exists("metrics")) + expect_gt(nrow(metrics),70) + expect_equal(names(metrics), c("Category","Metric","AOI","Year", + "Short_Name","Metric_Description","Units", + "Source","Dataset")) +}) + test_that("lc_get_params for area of interest parameters", { params <- lc_get_params(param='areaOfInterest') expect_true(exists("params")) expect_equal(params,c("cat","ws")) }) -test_that("lc_get_params for region parameters", { - params <- sc_get_params(param='region') - expect_true(exists("params")) - expect_equal(params,c("Region01","Region02","Region03N","Region03S","Region03W", - "Region04","Region05","Region06","Region07","Region08", - "Region09","Region10L","Region10U","Region11","Region12", - "Region13","Region14","Region15","Region16","Region17","Region18")) -}) - test_that("lc_get_params for name parameters", { params <- lc_get_params(param='metric_names') expect_true(exists("params")) diff --git a/tests/testthat/test-sc_get_params.R b/tests/testthat/test-sc_get_params.R index 4488b44..75ab546 100644 --- a/tests/testthat/test-sc_get_params.R +++ b/tests/testthat/test-sc_get_params.R @@ -2,7 +2,7 @@ context("Test that sc_get_params is pulling in StreamCat API parameters") test_that("sc_get_params for area of interest parameters", { - params <- sc_get_params(param='areaOfInterest') + params <- sc_get_params(param='aoi') expect_true(exists("params")) expect_equal(params,c("cat","catrp100","other","ws","wsrp100")) }) @@ -28,6 +28,18 @@ test_that("sc_get_params for variable_info parameters", { expect_gt(nrow(params),100) }) +test_that("sc_get_params for StreamCat metric categories", { + params <- sc_get_params(param='categories') + expect_true(exists("params")) + expect_gt(length(params),8) +}) + +test_that("sc_get_params for StreamCat datasets", { + params <- sc_get_params(param='datasets') + expect_true(exists("params")) + expect_gt(length(params),30) +}) + test_that("sc_get_params for state parameters", { params <- sc_get_params(param='state') expect_true(exists("params")) @@ -42,3 +54,22 @@ test_that("sc_get_params for county parameters", { expect_equal(names(params), c("fips","state","county_name")) }) +test_that("sc_get_metric_names for categories and AOIs", { + metrics <- sc_get_metric_names(category = c('Deposition','Climate'),aoi=c('Cat','Ws')) + expect_true(exists("metrics")) + expect_gt(nrow(metrics),10) + expect_equal(names(metrics), c("Category","Metric","AOI","Year", + "Short_Name","Metric_Description","Units", + "Source","Dataset")) +}) + +test_that("sc_get_metric_names for datasets", { + metrics <- sc_get_metric_names(aoi='Other', + dataset=c('Canal Density', + 'Predicted Channel Widths Depths')) + expect_true(exists("metrics")) + expect_lt(nrow(metrics),4) + expect_equal(names(metrics), c("Category","Metric","AOI","Year", + "Short_Name","Metric_Description","Units", + "Source","Dataset")) +}) \ No newline at end of file From bdd7fedf2ce4c3a4c0d41636976533c062dbadde Mon Sep 17 00:00:00 2001 From: Weber Date: Mon, 6 Oct 2025 16:23:31 -0700 Subject: [PATCH 05/22] Updating version --- DESCRIPTION | 2 +- NEWS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index e6b4b11..8aed21a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: StreamCatTools Type: Package Title: 'StreamCatTools' -Version: 0.7.0.9000 +Version: 0.8.0 Authors@R: c(person(given = "Marc", family = "Weber", role = c("aut", "cre"), diff --git a/NEWS.md b/NEWS.md index 9ec6081..ad79ffb 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# StreamCatTools (development version) +# StreamCatTools 0.8.0 - Added code coverage to the package - Added two new functions - `sc_get_metric_names` and `lc_get_metric_names` From c37efcaed0f39490ea8def3c7627775978ecb390 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 8 Oct 2025 09:41:54 -0700 Subject: [PATCH 06/22] changes to sc_get_params and lc_get_params --- R/lc_get_params.R | 19 ++++++++++--------- R/sc_get_comid.R | 7 ++++--- R/sc_get_params.R | 17 +++++++++-------- tests/testthat/test-lc_get_params.R | 2 +- vignettes/Introduction.Rmd | 2 +- vignettes/LakeCat.Rmd | 2 +- 6 files changed, 26 insertions(+), 23 deletions(-) diff --git a/R/lc_get_params.R b/R/lc_get_params.R index 39dd52e..a45de44 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -32,7 +32,7 @@ lc_get_params <- function(param = NULL) { WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics")$items - if (param=='areaOfInterest'){ + if (param=='aoi'){ params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] params <- c(gsub(" ","", params),'other') params <- params[order(params)] @@ -126,6 +126,7 @@ lc_fullname <- function(metric = NULL) { #' @param dataset Filter LakeCat metrics based on the dataset name #' #' @return A dataframe of merics and description that match filter criteria +#' @importFrom rlang .data #' @export #' #' @examples @@ -170,9 +171,9 @@ lc_get_metric_names <- function(category = NULL, .f = function(df, col_name) { filter_values <- filters[[col_name]] if (!is.null(filter_values)) { - df <- df %>% - dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) %>% - dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) %>% + df <- df |> + dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) |> + dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> dplyr::select(-temp_col) } df @@ -182,11 +183,11 @@ lc_get_metric_names <- function(category = NULL, } results <- filter_data(resp, filters) results <- results |> - dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, - AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, - Metric_Description = METRIC_DESCRIPTION, - Units = METRIC_UNITS, Source = SOURCE_NAME, - Dataset = DSNAME) + dplyr::select(Category = .data$INDICATOR_CATEGORY, Metric = .data$METRIC_NAME, + .data$AOI,Year = .data$YEAR, Short_Name = .data$WEBTOOL_NAME, + Metric_Description = .data$METRIC_DESCRIPTION, + Units = .data$METRIC_UNITS, Source = .data$SOURCE_NAME, + Dataset = .data$DSNAME) return(results) } \ No newline at end of file diff --git a/R/sc_get_comid.R b/R/sc_get_comid.R index 35bdcab..0a22c9a 100644 --- a/R/sc_get_comid.R +++ b/R/sc_get_comid.R @@ -32,7 +32,8 @@ #' comids <- sc_get_comid(dd, xcoord='x', #' ycoord='y', crsys=4269) #' -#' dd <- sf::read_sf(system.file("shape/nc.shp", package="sf")) +#' dd <- sf::st_point_on_surface(sf::read_sf(system.file("shape/nc.shp", package="sf"))) +#' #' comids <- sc_get_comid(dd) #' #' comids <- sc_get_comid(dd, xcoord='x', @@ -53,10 +54,10 @@ sc_get_comid <- function(dd = NULL, xcoord = NULL, } else { dd <- sf::st_as_sf(dd, coords = c(xcoord, ycoord), crs = crsys, remove = FALSE) } - + geom_col <- attr(dd, "sf_column") run_for <- 1:nrow(dd) output <- do.call(rbind, lapply(1:nrow(dd), function(i){ - comid <- nhdplusTools::discover_nhdplus_id(dd[i,c('geometry')]) + comid <- nhdplusTools::discover_nhdplus_id(dd[i,c(geom_col)]) if (length(comid)==0L) comid <- NA else comid <- comid return(comid) })) diff --git a/R/sc_get_params.R b/R/sc_get_params.R index 864bc8b..8a5a096 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -126,6 +126,7 @@ sc_fullname <- function(metric = NULL) { #' @param dataset Filter StreamCat metrics based on the dataset name #' #' @return A dataframe of merics and description that match filter criteria +#' @importFrom rlang .data #' @export #' #' @examples @@ -174,9 +175,9 @@ sc_get_metric_names <- function(category = NULL, .f = function(df, col_name) { filter_values <- filters[[col_name]] if (!is.null(filter_values)) { - df <- df %>% - dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) %>% - dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) %>% + df <- df |> + dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) |> + dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> dplyr::select(-temp_col) } df @@ -186,11 +187,11 @@ sc_get_metric_names <- function(category = NULL, } results <- filter_data(resp, filters) results <- results |> - dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, - AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, - Metric_Description = METRIC_DESCRIPTION, - Units = METRIC_UNITS, Source = SOURCE_NAME, - Dataset = DSNAME) + dplyr::select(Category = .data$INDICATOR_CATEGORY, Metric = .data$METRIC_NAME, + .data$AOI,Year = .data$YEAR, Short_Name = .data$WEBTOOL_NAME, + Metric_Description = .data$METRIC_DESCRIPTION, + Units = .data$METRIC_UNITS, Source = .data$SOURCE_NAME, + Dataset = .data$DSNAME) return(results) } diff --git a/tests/testthat/test-lc_get_params.R b/tests/testthat/test-lc_get_params.R index 21d3f62..47d62d5 100644 --- a/tests/testthat/test-lc_get_params.R +++ b/tests/testthat/test-lc_get_params.R @@ -22,7 +22,7 @@ test_that("lc_get_metric_names", { }) test_that("lc_get_params for area of interest parameters", { - params <- lc_get_params(param='areaOfInterest') + params <- lc_get_params(param='aoi') expect_true(exists("params")) expect_equal(params,c("cat","ws")) }) diff --git a/vignettes/Introduction.Rmd b/vignettes/Introduction.Rmd index 53c4aa3..37922a3 100644 --- a/vignettes/Introduction.Rmd +++ b/vignettes/Introduction.Rmd @@ -51,7 +51,7 @@ res$items ## List API parameters List StreamCat parameters: Get a list of available StreamCat values for certain parameters using the `sc_get_params` function via the API ```{r params} -region_params <- sc_get_params(param='areaOfInterest') +region_params <- sc_get_params(param='aoi') name_params <- sc_get_params(param='metric_names') diff --git a/vignettes/LakeCat.Rmd b/vignettes/LakeCat.Rmd index 382dd19..166e829 100644 --- a/vignettes/LakeCat.Rmd +++ b/vignettes/LakeCat.Rmd @@ -41,7 +41,7 @@ List LakeCat parameters: Get a list of available LakeCat values for certain para ```{r name_params} library(StreamCatTools) -region_params <- lc_get_params(param='areaOfInterest') +region_params <- lc_get_params(param='aoi') name_params <- lc_get_params(param='metric_names') From dee7c3f91d26482d1760faf473140918e7c550ea Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 8 Oct 2025 10:19:34 -0700 Subject: [PATCH 07/22] fix to allow passing vectors of metric, state, county, region to both sc_get_data and sc_get_data --- NEWS.md | 2 ++ R/lc_get_data.R | 18 +++++++++++++++--- R/sc_get_data.R | 20 ++++++++++++++++---- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/NEWS.md b/NEWS.md index ad79ffb..3cb0c5e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,8 @@ - Added two new functions - `sc_get_metric_names` and `lc_get_metric_names` to make metric names and descriptions more searchable and slightly updated parameters in both `sc_get_params` and `lc_get_params` functions +- Both `sc_get_data` and `lc_get_data` now accept vectors as well as comma- + separated strings for the metric, state, county and region parameters # StreamCatTools 0.7.0 diff --git a/R/lc_get_data.R b/R/lc_get_data.R index 0455d2a..3e82bf1 100644 --- a/R/lc_get_data.R +++ b/R/lc_get_data.R @@ -94,17 +94,29 @@ lc_get_data <- function(comid = NULL, # Base API URL. req <- httr2::request('https://api.epa.gov/StreamCat/lakes/metrics') # Collapse comids into a single string separated by a comma. + if ((is.null(comid) & is.null(state) & is.null(county) & is.null(region) & is.null(conus)) | is.null(metric) | is.null(aoi)){ + stop('Must provide at a minimum valid comid, metric and aoi to the function') + } + # Collapse vectors into a single string separated by a comma. if (!is.null(comid)){ comid <- paste(comid, collapse = ",") } + metric <- paste(metric, collapse = ",") + aoi <- paste(aoi, collapse = ",") + if (!is.null(state)){ + state <- paste(state, collapse = ",") + } + if (!is.null(county)){ + county <- paste(county, collapse = ",") + } + if (!is.null(region)){ + region <- paste(region, collapse = ",") + } # Force old and odd naming convention to behave correctly if (!is.null(aoi)){ if (aoi == 'catchment') aoi <- 'cat' if (aoi == 'watershed') aoi <- 'ws' } - if ((is.null(comid) & is.null(state) & is.null(county) & is.null(region) & is.null(conus)) | is.null(metric) | is.null(aoi)){ - stop('Must provide at a minimum valid comid, metric and aoi to the function') - } if (!is.null(conus) & metric=='all'){ stop('If you are requesting all metrics please request for regions, states or counties rather than all of conus') } diff --git a/R/sc_get_data.R b/R/sc_get_data.R index fb0ba72..51a83f1 100644 --- a/R/sc_get_data.R +++ b/R/sc_get_data.R @@ -100,10 +100,24 @@ sc_get_data <- function(comid = NULL, # Base API URL. base_url <- 'https://api.epa.gov/StreamCat/streams/metrics' req <- httr2::request(base_url) - # Collapse comids into a single string separated by a comma. + if ((is.null(comid) & is.null(state) & is.null(county) & is.null(region) & is.null(conus)) | is.null(metric) | is.null(aoi)){ + stop('Must provide at a minimum valid comid, metric and aoi to the function') + } + # Collapse vectors into a single string separated by a comma. if (!is.null(comid)){ comid <- paste(comid, collapse = ",") } + metric <- paste(metric, collapse = ",") + aoi <- paste(aoi, collapse = ",") + if (!is.null(state)){ + state <- paste(state, collapse = ",") + } + if (!is.null(county)){ + county <- paste(county, collapse = ",") + } + if (!is.null(region)){ + region <- paste(region, collapse = ",") + } # Force old and odd naming convention to behave correctly if (!is.null(aoi)){ if (stringr::str_detect(aoi,'catchment')) { @@ -119,9 +133,7 @@ sc_get_data <- function(comid = NULL, aoi <- gsub('riparian_watershed','wsrp100',aoi) } } - if ((is.null(comid) & is.null(state) & is.null(county) & is.null(region) & is.null(conus)) | is.null(metric) | is.null(aoi)){ - stop('Must provide at a minimum valid comid, metric and aoi to the function') - } + if (!is.null(conus) & metric=='all'){ stop('If you are requesting all metrics please request for regions, states or counties rather than all of conus') } From c57a9b7ef9077d061343a0048bfe547858728493 Mon Sep 17 00:00:00 2001 From: Michael Dumelle Date: Wed, 8 Oct 2025 11:18:14 -0700 Subject: [PATCH 08/22] remove global variables messages --- R/lc_get_params.R | 63 +++++++++++++++++++++++++++------------------- R/sc_get_params.R | 64 +++++++++++++++++++++++++++-------------------- 2 files changed, 74 insertions(+), 53 deletions(-) diff --git a/R/lc_get_params.R b/R/lc_get_params.R index a45de44..22cd0ed 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -8,7 +8,7 @@ #' #' @param param List of available parameters in the API for the following options: #' name, areaofInterest, region, state, county. State and county return a data -#' frame that includes FIPS codes, names and state abbreviations +#' frame that includes FIPS codes, names and state abbreviations #' Syntax: param=, #' Values: name|area #' @@ -31,6 +31,7 @@ lc_get_params <- function(param = NULL) { INDICATOR_CATEGORY <- METRIC_NAME <- AOI <- YEAR <- NULL WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL + DSNAME <- NULL resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics")$items if (param=='aoi'){ params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] @@ -45,10 +46,10 @@ lc_get_params <- function(param = NULL) { params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> - dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, - metric=METRIC_NAME,aoi=AOI, year=YEAR, + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> + dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, + metric=METRIC_NAME,aoi=AOI, year=YEAR, short_description=WEBTOOL_NAME,units=METRIC_UNITS, long_description=METRIC_DESCRIPTION, dsid=DSID, source_name=SOURCE_NAME, source_URL=SOURCE_URL) @@ -56,16 +57,16 @@ lc_get_params <- function(param = NULL) { params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> + readr::read_csv(show_col_types = FALSE) |> dplyr::select(INDICATOR_CATEGORY) params <- sort(unique(params$INDICATOR_CATEGORY)) } else if(param == 'datasets'){ params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> + readr::read_csv(show_col_types = FALSE) |> dplyr::select(DSNAME) - params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) + params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) } else if(param == 'region'){ params <- resp$region_options[[1]][[1]] params <- params[order(params)] @@ -113,27 +114,27 @@ lc_fullname <- function(metric = NULL) { #' Get LakeCat Metric Names #' #' @description -#' Function to filter LakeCat metrics metrics by category, area of interest, +#' Function to filter LakeCat metrics metrics by category, area of interest, #' dataset or year. Use `lc_get_params(categories)` or `lc_get_params(datasets)` #' to see all the valid category or dataset options #' #' @author #' Marc Weber -#' +#' #' @param category Filter LakeCat metrics based on the metric category #' @param aoi Filter LakeCat metrics based on the area of interest #' @param year Filter LakeCat metrics based on a particular year or years #' @param dataset Filter LakeCat metrics based on the dataset name #' #' @return A dataframe of merics and description that match filter criteria -#' @importFrom rlang .data +# #' @importFrom rlang .data #' @export #' #' @examples #' \dontrun{ #' metrics <- lc_get_metric_names(category='Natural') #' metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), -#' aoi=c('Cat','Ws')} +#' aoi=c('Cat','Ws')} lc_get_metric_names <- function(category = NULL, @@ -159,11 +160,12 @@ lc_get_metric_names <- function(category = NULL, httr2::req_perform() |> httr2::resp_body_string() |> readr::read_csv(show_col_types = FALSE) - + filters <- list(INDICATOR_CATEGORY = category, AOI = aoi, YEAR = year, DSNAME = dataset) - + filter_data <- function(data, filters) { + temp_col <- col_name <- NULL # Filter the data frame for each non-null filter filtered_data <- purrr::reduce( names(filters), @@ -171,10 +173,12 @@ lc_get_metric_names <- function(category = NULL, .f = function(df, col_name) { filter_values <- filters[[col_name]] if (!is.null(filter_values)) { - df <- df |> - dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) |> - dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> - dplyr::select(-temp_col) + temp_col <- stringr::str_split(df[[col_name]], ",") + df <- df[purrr::map_lgl(temp_col, ~ any(.x %in% filter_values)), , drop = FALSE] + # df <- df |> + # dplyr::mutate(temp_col = stringr::str_split(col_name, ",")) |> + # dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> + # dplyr::select(-temp_col) } df } @@ -182,12 +186,19 @@ lc_get_metric_names <- function(category = NULL, return(filtered_data) } results <- filter_data(resp, filters) - results <- results |> - dplyr::select(Category = .data$INDICATOR_CATEGORY, Metric = .data$METRIC_NAME, - .data$AOI,Year = .data$YEAR, Short_Name = .data$WEBTOOL_NAME, - Metric_Description = .data$METRIC_DESCRIPTION, - Units = .data$METRIC_UNITS, Source = .data$SOURCE_NAME, - Dataset = .data$DSNAME) - + names_keep <- c("INDICATOR_CATEGORY", "METRIC_NAME", "AOI", "YEAR", + "WEBTOOL_NAME", "METRIC_DESCRIPTION", + "METRIC_UNITS", "SOURCE_NAME", "DSNAME") + results <- results[, names_keep, drop = FALSE] + names_new <- c("Category", "Metric", "AOI", "Year", "Short_Name", + "Metric_Description", "Units", "Source", "Dataset") + names(results) <- names_new + # results <- results |> + # dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, + # AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, + # Metric_Description = METRIC_DESCRIPTION, + # Units = METRIC_UNITS, Source = SOURCE_NAME, + # Dataset = DSNAME) + return(results) -} \ No newline at end of file +} diff --git a/R/sc_get_params.R b/R/sc_get_params.R index 8a5a096..05e60d2 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -8,7 +8,7 @@ #' #' @param param List of available parameters in the API for the following options: #' name, areaofInterest, region, state, county. State and county return a data -#' frame that includes FIPS codes, names and state abbreviations +#' frame that includes FIPS codes, names and state abbreviations #' Syntax: param=, #' Values: name|area #' @@ -30,6 +30,7 @@ sc_get_params <- function(param = NULL) { INDICATOR_CATEGORY <- METRIC_NAME <- AOI <- YEAR <- NULL WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL + DSNAME <- NULL resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics")$items if (param=='aoi'){ params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] @@ -43,10 +44,10 @@ sc_get_params <- function(param = NULL) { params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> - dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, - metric=METRIC_NAME,aoi=AOI, year=YEAR, + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> + dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, + metric=METRIC_NAME,aoi=AOI, year=YEAR, short_description=WEBTOOL_NAME,units=METRIC_UNITS, long_description=METRIC_DESCRIPTION, dsid=DSID, source_name=SOURCE_NAME, source_URL=SOURCE_URL) @@ -54,17 +55,17 @@ sc_get_params <- function(param = NULL) { params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> + readr::read_csv(show_col_types = FALSE) |> dplyr::select(INDICATOR_CATEGORY) params <- sort(unique(params$INDICATOR_CATEGORY)) } else if(param == 'datasets'){ params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> + readr::read_csv(show_col_types = FALSE) |> dplyr::select(DSNAME) - params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) - } + params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) + } else if(param == 'region'){ params <- resp$region_options[[1]][[1]] params <- params[order(params)] @@ -113,20 +114,20 @@ sc_fullname <- function(metric = NULL) { #' Get StreamCat Metric Names #' #' @description -#' Function to filter StreamCat metrics metrics by category, area of interest, +#' Function to filter StreamCat metrics metrics by category, area of interest, #' dataset or year. Use `sc_get_params(categories)` or `sc_get_params(datasets)` #' to see all the valid category or dataset options #' #' @author #' Marc Weber -#' +#' #' @param category Filter StreamCat metrics based on the metric category #' @param aoi Filter StreamCat metrics based on the area of interest #' @param year Filter StreamCat metrics based on a particular year or years #' @param dataset Filter StreamCat metrics based on the dataset name #' #' @return A dataframe of merics and description that match filter criteria -#' @importFrom rlang .data +# #' @importFrom rlang .data #' @export #' #' @examples @@ -136,8 +137,8 @@ sc_fullname <- function(metric = NULL) { #' aoi=c('Cat','Ws') #' metrics <- sc_get_metric_names(aoi='Other', #' dataset=c('Canal Density','Predicted Channel Widths Depths')) -#' -#' } +#' +#' } sc_get_metric_names <- function(category = NULL, @@ -163,10 +164,10 @@ sc_get_metric_names <- function(category = NULL, httr2::req_perform() |> httr2::resp_body_string() |> readr::read_csv(show_col_types = FALSE) - + filters <- list(INDICATOR_CATEGORY = category, AOI = aoi, YEAR = year, DSNAME = dataset) - + filter_data <- function(data, filters) { # Filter the data frame for each non-null filter filtered_data <- purrr::reduce( @@ -175,10 +176,12 @@ sc_get_metric_names <- function(category = NULL, .f = function(df, col_name) { filter_values <- filters[[col_name]] if (!is.null(filter_values)) { - df <- df |> - dplyr::mutate(temp_col = stringr::str_split(.data[[col_name]], ",")) |> - dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> - dplyr::select(-temp_col) + temp_col <- stringr::str_split(df[[col_name]], ",") + df <- df[purrr::map_lgl(temp_col, ~ any(.x %in% filter_values)), , drop = FALSE] + # df <- df |> + # dplyr::mutate(temp_col = stringr::str_split(col_name, ",")) |> + # dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> + # dplyr::select(-temp_col) } df } @@ -186,12 +189,19 @@ sc_get_metric_names <- function(category = NULL, return(filtered_data) } results <- filter_data(resp, filters) - results <- results |> - dplyr::select(Category = .data$INDICATOR_CATEGORY, Metric = .data$METRIC_NAME, - .data$AOI,Year = .data$YEAR, Short_Name = .data$WEBTOOL_NAME, - Metric_Description = .data$METRIC_DESCRIPTION, - Units = .data$METRIC_UNITS, Source = .data$SOURCE_NAME, - Dataset = .data$DSNAME) - + names_keep <- c("INDICATOR_CATEGORY", "METRIC_NAME", "AOI", "YEAR", + "WEBTOOL_NAME", "METRIC_DESCRIPTION", + "METRIC_UNITS", "SOURCE_NAME", "DSNAME") + results <- results[, names_keep, drop = FALSE] + names_new <- c("Category", "Metric", "AOI", "Year", "Short_Name", + "Metric_Description", "Units", "Source", "Dataset") + names(results) <- names_new + # results |> + # dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, + # AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, + # Metric_Description = METRIC_DESCRIPTION, + # Units = METRIC_UNITS, Source = SOURCE_NAME, + # Dataset = DSNAME) + return(results) } From 979ea71b5683c983a5a82f10b8e7d74b07201bee Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 8 Oct 2025 12:34:23 -0700 Subject: [PATCH 09/22] couple more updates to get_params functions and adding Mike as contributor --- DESCRIPTION | 4 ++++ R/lc_get_params.R | 10 ---------- R/sc_get_params.R | 10 ---------- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8aed21a..e77e1b7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -22,6 +22,10 @@ Authors@R: c(person(given = "Marc", family = "Rebhuhn", role = "ctb", email = "rebhuhnd@gmail.com"), + person(given = "Michael", + family = "Dumelle", + role = "ctb", + email = "dumelle.michael@epa.gov"), person(given = "Zachary", family = "Smith", role = "ctb")) diff --git a/R/lc_get_params.R b/R/lc_get_params.R index 22cd0ed..8fd05f8 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -175,10 +175,6 @@ lc_get_metric_names <- function(category = NULL, if (!is.null(filter_values)) { temp_col <- stringr::str_split(df[[col_name]], ",") df <- df[purrr::map_lgl(temp_col, ~ any(.x %in% filter_values)), , drop = FALSE] - # df <- df |> - # dplyr::mutate(temp_col = stringr::str_split(col_name, ",")) |> - # dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> - # dplyr::select(-temp_col) } df } @@ -193,12 +189,6 @@ lc_get_metric_names <- function(category = NULL, names_new <- c("Category", "Metric", "AOI", "Year", "Short_Name", "Metric_Description", "Units", "Source", "Dataset") names(results) <- names_new - # results <- results |> - # dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, - # AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, - # Metric_Description = METRIC_DESCRIPTION, - # Units = METRIC_UNITS, Source = SOURCE_NAME, - # Dataset = DSNAME) return(results) } diff --git a/R/sc_get_params.R b/R/sc_get_params.R index 05e60d2..4d024fa 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -178,10 +178,6 @@ sc_get_metric_names <- function(category = NULL, if (!is.null(filter_values)) { temp_col <- stringr::str_split(df[[col_name]], ",") df <- df[purrr::map_lgl(temp_col, ~ any(.x %in% filter_values)), , drop = FALSE] - # df <- df |> - # dplyr::mutate(temp_col = stringr::str_split(col_name, ",")) |> - # dplyr::filter(purrr::map_lgl(temp_col, ~ any(.x %in% filter_values))) |> - # dplyr::select(-temp_col) } df } @@ -196,12 +192,6 @@ sc_get_metric_names <- function(category = NULL, names_new <- c("Category", "Metric", "AOI", "Year", "Short_Name", "Metric_Description", "Units", "Source", "Dataset") names(results) <- names_new - # results |> - # dplyr::select(Category = INDICATOR_CATEGORY, Metric = METRIC_NAME, - # AOI,Year = YEAR, Short_Name = WEBTOOL_NAME, - # Metric_Description = METRIC_DESCRIPTION, - # Units = METRIC_UNITS, Source = SOURCE_NAME, - # Dataset = DSNAME) return(results) } From 7f53b7c507c4a75d8001a890531c325ae2e9b408 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 8 Oct 2025 12:34:56 -0700 Subject: [PATCH 10/22] updated documentation --- DESCRIPTION | 2 +- man/lc_get_metric_names.Rd | 4 ++-- man/lc_get_params.Rd | 2 +- man/sc_get_comid.Rd | 3 ++- man/sc_get_metric_names.Rd | 4 ++-- man/sc_get_params.Rd | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index e77e1b7..72a92be 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -59,6 +59,6 @@ URL: https://usepa.github.io/StreamCatTools/, https://github.com/USEPA/StreamCat BugReports: https://github.com/USEPA/StreamCatTools/issues VignetteBuilder: knitr,rmarkdown LazyData: true -RoxygenNote: 7.3.2 +RoxygenNote: 7.3.3 License: CC0 NeedsCompilation: no diff --git a/man/lc_get_metric_names.Rd b/man/lc_get_metric_names.Rd index 4668ecd..523ee82 100644 --- a/man/lc_get_metric_names.Rd +++ b/man/lc_get_metric_names.Rd @@ -19,7 +19,7 @@ lc_get_metric_names(category = NULL, aoi = NULL, year = NULL, dataset = NULL) A dataframe of merics and description that match filter criteria } \description{ -Function to filter LakeCat metrics metrics by category, area of interest, +Function to filter LakeCat metrics metrics by category, area of interest, dataset or year. Use `lc_get_params(categories)` or `lc_get_params(datasets)` to see all the valid category or dataset options } @@ -27,7 +27,7 @@ to see all the valid category or dataset options \dontrun{ metrics <- lc_get_metric_names(category='Natural') metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), -aoi=c('Cat','Ws')} +aoi=c('Cat','Ws')} } \author{ Marc Weber diff --git a/man/lc_get_params.Rd b/man/lc_get_params.Rd index ae76d8e..3195dc0 100644 --- a/man/lc_get_params.Rd +++ b/man/lc_get_params.Rd @@ -9,7 +9,7 @@ lc_get_params(param = NULL) \arguments{ \item{param}{List of available parameters in the API for the following options: name, areaofInterest, region, state, county. State and county return a data -frame that includes FIPS codes, names and state abbreviations +frame that includes FIPS codes, names and state abbreviations Syntax: param=, Values: name|area} } diff --git a/man/sc_get_comid.Rd b/man/sc_get_comid.Rd index d9d87fc..db36764 100644 --- a/man/sc_get_comid.Rd +++ b/man/sc_get_comid.Rd @@ -37,7 +37,8 @@ y = c(45.085, 35.405,42.403,38.721)) comids <- sc_get_comid(dd, xcoord='x', ycoord='y', crsys=4269) -dd <- sf::read_sf(system.file("shape/nc.shp", package="sf")) +dd <- sf::st_point_on_surface(sf::read_sf(system.file("shape/nc.shp", package="sf"))) + comids <- sc_get_comid(dd) comids <- sc_get_comid(dd, xcoord='x', diff --git a/man/sc_get_metric_names.Rd b/man/sc_get_metric_names.Rd index 0897bb3..1f11eb1 100644 --- a/man/sc_get_metric_names.Rd +++ b/man/sc_get_metric_names.Rd @@ -19,7 +19,7 @@ sc_get_metric_names(category = NULL, aoi = NULL, year = NULL, dataset = NULL) A dataframe of merics and description that match filter criteria } \description{ -Function to filter StreamCat metrics metrics by category, area of interest, +Function to filter StreamCat metrics metrics by category, area of interest, dataset or year. Use `sc_get_params(categories)` or `sc_get_params(datasets)` to see all the valid category or dataset options } @@ -31,7 +31,7 @@ aoi=c('Cat','Ws') metrics <- sc_get_metric_names(aoi='Other', dataset=c('Canal Density','Predicted Channel Widths Depths')) -} +} } \author{ Marc Weber diff --git a/man/sc_get_params.Rd b/man/sc_get_params.Rd index 34c743f..bbb59a5 100644 --- a/man/sc_get_params.Rd +++ b/man/sc_get_params.Rd @@ -9,7 +9,7 @@ sc_get_params(param = NULL) \arguments{ \item{param}{List of available parameters in the API for the following options: name, areaofInterest, region, state, county. State and county return a data -frame that includes FIPS codes, names and state abbreviations +frame that includes FIPS codes, names and state abbreviations Syntax: param=, Values: name|area} } From 56f96cd7fc9716b88824c377c5d48c80c8292b0e Mon Sep 17 00:00:00 2001 From: Weber Date: Thu, 9 Oct 2025 09:54:36 -0700 Subject: [PATCH 11/22] Increment develop branch --- DESCRIPTION | 2 +- NEWS.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 72a92be..d647b4f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: StreamCatTools Type: Package Title: 'StreamCatTools' -Version: 0.8.0 +Version: 0.8.0.9000 Authors@R: c(person(given = "Marc", family = "Weber", role = c("aut", "cre"), diff --git a/NEWS.md b/NEWS.md index 3cb0c5e..67a5a34 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,5 @@ +# StreamCatTools (development version) + # StreamCatTools 0.8.0 - Added code coverage to the package From 276494d4fefea3771b4b15bd4fbc4d4adeae8100 Mon Sep 17 00:00:00 2001 From: Weber Date: Tue, 14 Oct 2025 17:03:42 -0700 Subject: [PATCH 12/22] added try catch to functions to fail gracefully and fixed column separator in get_metric_names --- R/lc_get_data.R | 27 +++++++--- R/lc_get_params.R | 127 +++++++++++++++++++++++++-------------------- R/sc_get_data.R | 15 +++++- R/sc_get_params.R | 128 ++++++++++++++++++++++++++-------------------- 4 files changed, 177 insertions(+), 120 deletions(-) diff --git a/R/lc_get_data.R b/R/lc_get_data.R index 3e82bf1..4d3200f 100644 --- a/R/lc_get_data.R +++ b/R/lc_get_data.R @@ -136,7 +136,8 @@ lc_get_data <- function(comid = NULL, state=state,county=county,region=region,conus=conus, countOnly=countOnly ) - df <- req |> + df <- tryCatch({ + req |> httr2::req_method("POST") |> httr2::req_headers("Content-Type" = "application/x-www-form-urlencoded") |> httr2::req_method("POST") |> @@ -146,12 +147,24 @@ lc_get_data <- function(comid = NULL, httr2::req_perform() |> httr2::resp_body_string() |> jsonlite::fromJSON() - # Return a data frame - if (is.null(countOnly)){ - df <- df$items |> - dplyr::select(comid, dplyr::everything()) - return(df) - } else return(df$items) + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) + # Return a data frame if success + if (exists("df") && !is.null(df)){ + # Return a data frame + if (is.null(countOnly)){ + df <- df$items |> + dplyr::select(comid, dplyr::everything()) + return(df) + } else return(df$items) + if (is.null(countOnly)){ + df <- df$items |> + dplyr::select(comid, dplyr::everything()) + return(df) + } else return(df$items) + } } diff --git a/R/lc_get_params.R b/R/lc_get_params.R index 8fd05f8..369e0ad 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -32,58 +32,63 @@ lc_get_params <- function(param = NULL) { WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL DSNAME <- NULL - resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics")$items - if (param=='aoi'){ - params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] - params <- c(gsub(" ","", params),'other') - params <- params[order(params)] - params <- params[!params %in% c('catrp100','wsrp100','other')] - } else if(param == 'metric_names') { - params <- resp$name_options[[1]][[1]] - params <- params[!duplicated(params)] - params <- params[order(params)] - } else if(param == 'variable_info') { - params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> - httr2::req_perform() |> - httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> - dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, - metric=METRIC_NAME,aoi=AOI, year=YEAR, - short_description=WEBTOOL_NAME,units=METRIC_UNITS, - long_description=METRIC_DESCRIPTION, dsid=DSID, - source_name=SOURCE_NAME, source_URL=SOURCE_URL) - } else if(param == 'categories'){ - params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> - httr2::req_perform() |> - httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(INDICATOR_CATEGORY) - params <- sort(unique(params$INDICATOR_CATEGORY)) - } else if(param == 'datasets'){ - params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> - httr2::req_perform() |> - httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(DSNAME) - params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) - } else if(param == 'region'){ - params <- resp$region_options[[1]][[1]] - params <- params[order(params)] - } else if(param == 'state'){ - params <- resp$state_options[[1]] - params <- params[!params$st_abbr %in% c('AK','HI','PR'),] - params$st_fips <- as.character(params$st_fips) - params$st_fips[nchar(params$st_fips) < 2] <- paste0('0',params$st_fips[nchar(params$st_fips) < 2]) - params <- params[order(params$st_name),] - rownames(params) <- 1:nrow(params) - } else if(param == 'county'){ - params <- resp$county_options[[1]] - params$fips <- as.character(params$fips) - params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) - params <- params[with(params,order(state,county_name)),] - rownames(params) <- 1:nrow(params) - } + resp <- tryCatch({ + jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics")$items + if (param=='aoi'){ + params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] + params <- c(gsub(" ","", params),'other') + params <- params[order(params)] + params <- params[!params %in% c('catrp100','wsrp100','other')] + } else if(param == 'metric_names') { + params <- resp$name_options[[1]][[1]] + params <- params[!duplicated(params)] + params <- params[order(params)] + } else if(param == 'variable_info') { + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> + dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, + metric=METRIC_NAME,aoi=AOI, year=YEAR, + short_description=WEBTOOL_NAME,units=METRIC_UNITS, + long_description=METRIC_DESCRIPTION, dsid=DSID, + source_name=SOURCE_NAME, source_URL=SOURCE_URL) + } else if(param == 'categories'){ + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(INDICATOR_CATEGORY) + params <- sort(unique(params$INDICATOR_CATEGORY)) + } else if(param == 'datasets'){ + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(DSNAME) + params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) + } else if(param == 'region'){ + params <- resp$region_options[[1]][[1]] + params <- params[order(params)] + } else if(param == 'state'){ + params <- resp$state_options[[1]] + params <- params[!params$st_abbr %in% c('AK','HI','PR'),] + params$st_fips <- as.character(params$st_fips) + params$st_fips[nchar(params$st_fips) < 2] <- paste0('0',params$st_fips[nchar(params$st_fips) < 2]) + params <- params[order(params$st_name),] + rownames(params) <- 1:nrow(params) + } else if(param == 'county'){ + params <- resp$county_options[[1]] + params$fips <- as.character(params$fips) + params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) + params <- params[with(params,order(state,county_name)),] + rownames(params) <- 1:nrow(params) + } + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) return(params) } @@ -106,8 +111,13 @@ lc_get_params <- function(param = NULL) { #' fullname <- lc_fullname(metric='clay') lc_fullname <- function(metric = NULL) { - resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/datadictionary")$items - result <- unique(resp$short_display_name[resp$metric_prefix %in% metric]) + result <- tryCatch({ + resp <-jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/datadictionary")$items + resp <- unique(resp$short_display_name[resp$metric_prefix %in% metric]) + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) return(result) } @@ -156,10 +166,15 @@ lc_get_metric_names <- function(category = NULL, } aoi <- stringr::str_to_title(aoi) } - resp <- params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> + resp <- tryCatch({ + params <- httr2::request('https://api.epa.gov/StreamCat/lakes/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> readr::read_csv(show_col_types = FALSE) + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) filters <- list(INDICATOR_CATEGORY = category, AOI = aoi, YEAR = year, DSNAME = dataset) @@ -173,7 +188,7 @@ lc_get_metric_names <- function(category = NULL, .f = function(df, col_name) { filter_values <- filters[[col_name]] if (!is.null(filter_values)) { - temp_col <- stringr::str_split(df[[col_name]], ",") + temp_col <- stringr::str_split(df[[col_name]], ", ") df <- df[purrr::map_lgl(temp_col, ~ any(.x %in% filter_values)), , drop = FALSE] } df diff --git a/R/sc_get_data.R b/R/sc_get_data.R index 51a83f1..906be8f 100644 --- a/R/sc_get_data.R +++ b/R/sc_get_data.R @@ -153,7 +153,8 @@ sc_get_data <- function(comid = NULL, state=state,county=county,region=region,conus=conus, countOnly=countOnly ) - df <- req |> + df <- tryCatch({ + req |> httr2::req_method("POST") |> httr2::req_headers("Content-Type" = "application/x-www-form-urlencoded") |> httr2::req_method("POST") |> @@ -163,12 +164,24 @@ sc_get_data <- function(comid = NULL, httr2::req_perform() |> httr2::resp_body_string() |> jsonlite::fromJSON() + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) + # Return a data frame if success + if (exists("df") && !is.null(df)){ # Return a data frame + if (is.null(countOnly)){ + df <- df$items |> + dplyr::select(comid, dplyr::everything()) + return(df) + } else return(df$items) if (is.null(countOnly)){ df <- df$items |> dplyr::select(comid, dplyr::everything()) return(df) } else return(df$items) + } } diff --git a/R/sc_get_params.R b/R/sc_get_params.R index 4d024fa..d5802d3 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -31,58 +31,63 @@ sc_get_params <- function(param = NULL) { WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL DSNAME <- NULL - resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics")$items - if (param=='aoi'){ - params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] - params <- c(gsub(" ","", params),'other') - params <- params[order(params)] - } else if(param == 'metric_names') { - params <- resp$name_options[[1]][[1]] - params <- params[!duplicated(params)] - params <- params[order(params)] - } else if(param == 'variable_info') { - params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> - httr2::req_perform() |> - httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> - dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, - metric=METRIC_NAME,aoi=AOI, year=YEAR, - short_description=WEBTOOL_NAME,units=METRIC_UNITS, - long_description=METRIC_DESCRIPTION, dsid=DSID, - source_name=SOURCE_NAME, source_URL=SOURCE_URL) - } else if(param == 'categories'){ - params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> - httr2::req_perform() |> - httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(INDICATOR_CATEGORY) - params <- sort(unique(params$INDICATOR_CATEGORY)) - } else if(param == 'datasets'){ - params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> - httr2::req_perform() |> - httr2::resp_body_string() |> - readr::read_csv(show_col_types = FALSE) |> - dplyr::select(DSNAME) - params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) - } - else if(param == 'region'){ - params <- resp$region_options[[1]][[1]] - params <- params[order(params)] - } else if(param == 'state'){ - params <- resp$state_options[[1]] - params <- params[!params$st_abbr %in% c('AK','HI','PR'),] - params$st_fips <- as.character(params$st_fips) - params$st_fips[nchar(params$st_fips) < 2] <- paste0('0',params$st_fips[nchar(params$st_fips) < 2]) - params <- params[order(params$st_name),] - rownames(params) <- 1:nrow(params) - } else if(param == 'county'){ - params <- resp$county_options[[1]] - params$fips <- as.character(params$fips) - params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) - params <- params[with(params,order(state,county_name)),] - rownames(params) <- 1:nrow(params) - } + resp <- tryCatch({ + jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics")$items + if (param=='aoi'){ + params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] + params <- c(gsub(" ","", params),'other') + params <- params[order(params)] + } else if(param == 'metric_names') { + params <- resp$name_options[[1]][[1]] + params <- params[!duplicated(params)] + params <- params[order(params)] + } else if(param == 'variable_info') { + params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(-UUID,-DATE_DOWNLOADED,-METADATA) |> + dplyr::rename(dataset=FINAL_TABLE,category=INDICATOR_CATEGORY, + metric=METRIC_NAME,aoi=AOI, year=YEAR, + short_description=WEBTOOL_NAME,units=METRIC_UNITS, + long_description=METRIC_DESCRIPTION, dsid=DSID, + source_name=SOURCE_NAME, source_URL=SOURCE_URL) + } else if(param == 'categories'){ + params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(INDICATOR_CATEGORY) + params <- sort(unique(params$INDICATOR_CATEGORY)) + } else if(param == 'datasets'){ + params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + httr2::req_perform() |> + httr2::resp_body_string() |> + readr::read_csv(show_col_types = FALSE) |> + dplyr::select(DSNAME) + params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) + } + else if(param == 'region'){ + params <- resp$region_options[[1]][[1]] + params <- params[order(params)] + } else if(param == 'state'){ + params <- resp$state_options[[1]] + params <- params[!params$st_abbr %in% c('AK','HI','PR'),] + params$st_fips <- as.character(params$st_fips) + params$st_fips[nchar(params$st_fips) < 2] <- paste0('0',params$st_fips[nchar(params$st_fips) < 2]) + params <- params[order(params$st_name),] + rownames(params) <- 1:nrow(params) + } else if(param == 'county'){ + params <- resp$county_options[[1]] + params$fips <- as.character(params$fips) + params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) + params <- params[with(params,order(state,county_name)),] + rownames(params) <- 1:nrow(params) + } + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) return(params) } @@ -105,8 +110,13 @@ sc_get_params <- function(param = NULL) { #' fullname <- sc_fullname(metric='clay') sc_fullname <- function(metric = NULL) { - resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/datadictionary")$items - result <- unique(resp$short_display_name[resp$metric_prefix %in% metric]) + result <- tryCatch({ + resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/datadictionary")$items + resp <- unique(resp$short_display_name[resp$metric_prefix %in% metric]) + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) return(result) } @@ -160,10 +170,15 @@ sc_get_metric_names <- function(category = NULL, } aoi <- stringr::str_to_title(aoi) } - resp <- params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> + resp <- tryCatch({ + params <- httr2::request('https://api.epa.gov/StreamCat/streams/variable_info') |> httr2::req_perform() |> httr2::resp_body_string() |> readr::read_csv(show_col_types = FALSE) + },error = function(e) { + message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) + return(NULL) + }) filters <- list(INDICATOR_CATEGORY = category, AOI = aoi, YEAR = year, DSNAME = dataset) @@ -176,7 +191,8 @@ sc_get_metric_names <- function(category = NULL, .f = function(df, col_name) { filter_values <- filters[[col_name]] if (!is.null(filter_values)) { - temp_col <- stringr::str_split(df[[col_name]], ",") + # Split the column values by comma + temp_col <- stringr::str_split(df[[col_name]], ", ") df <- df[purrr::map_lgl(temp_col, ~ any(.x %in% filter_values)), , drop = FALSE] } df From c867a2bcca4e3757de8d1834d2b3a68be847e403 Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 15 Oct 2025 10:00:42 -0700 Subject: [PATCH 13/22] added new get_metric_names example to Vignettes and last fixes to tryCatch in functions --- R/lc_get_params.R | 12 +++++------- R/sc_get_params.R | 13 +++++-------- tests/testthat/test-lc_get_params.R | 2 +- vignettes/Introduction.Rmd | 8 ++++++++ 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/R/lc_get_params.R b/R/lc_get_params.R index 369e0ad..22a3e1e 100644 --- a/R/lc_get_params.R +++ b/R/lc_get_params.R @@ -32,14 +32,14 @@ lc_get_params <- function(param = NULL) { WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL DSNAME <- NULL - resp <- tryCatch({ - jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics")$items + result <- tryCatch({ + resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/lakes/metrics")$items if (param=='aoi'){ params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] params <- c(gsub(" ","", params),'other') params <- params[order(params)] params <- params[!params %in% c('catrp100','wsrp100','other')] - } else if(param == 'metric_names') { + } else if(param == 'metric_names') { params <- resp$name_options[[1]][[1]] params <- params[!duplicated(params)] params <- params[order(params)] @@ -77,19 +77,17 @@ lc_get_params <- function(param = NULL) { params$st_fips <- as.character(params$st_fips) params$st_fips[nchar(params$st_fips) < 2] <- paste0('0',params$st_fips[nchar(params$st_fips) < 2]) params <- params[order(params$st_name),] - rownames(params) <- 1:nrow(params) } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] - rownames(params) <- 1:nrow(params) } },error = function(e) { message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) return(NULL) }) - return(params) + return(result) } #' @title Lookup Full Metric Name @@ -144,7 +142,7 @@ lc_fullname <- function(metric = NULL) { #' \dontrun{ #' metrics <- lc_get_metric_names(category='Natural') #' metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), -#' aoi=c('Cat','Ws')} +#' aoi=c('Cat','Ws'))} lc_get_metric_names <- function(category = NULL, diff --git a/R/sc_get_params.R b/R/sc_get_params.R index d5802d3..2941822 100644 --- a/R/sc_get_params.R +++ b/R/sc_get_params.R @@ -31,8 +31,8 @@ sc_get_params <- function(param = NULL) { WEBTOOL_NAME <- METRIC_UNITS <- METRIC_DESCRIPTION <- DSID <- NULL SOURCE_NAME <- SOURCE_URL <- UUID <- DATE_DOWNLOADED <- NULL DSNAME <- NULL - resp <- tryCatch({ - jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics")$items + result <- tryCatch({ + resp <- jsonlite::fromJSON("https://api.epa.gov/StreamCat/streams/metrics")$items if (param=='aoi'){ params <- strsplit(stringr::str_sub(resp$aoi_param_info[[1]]$options,2,-2),",")[[1]] params <- c(gsub(" ","", params),'other') @@ -66,8 +66,7 @@ sc_get_params <- function(param = NULL) { readr::read_csv(show_col_types = FALSE) |> dplyr::select(DSNAME) params <- sort(unique(params$DSNAME[!is.na(params$DSNAME)])) - } - else if(param == 'region'){ + } else if(param == 'region'){ params <- resp$region_options[[1]][[1]] params <- params[order(params)] } else if(param == 'state'){ @@ -76,19 +75,17 @@ sc_get_params <- function(param = NULL) { params$st_fips <- as.character(params$st_fips) params$st_fips[nchar(params$st_fips) < 2] <- paste0('0',params$st_fips[nchar(params$st_fips) < 2]) params <- params[order(params$st_name),] - rownames(params) <- 1:nrow(params) } else if(param == 'county'){ params <- resp$county_options[[1]] params$fips <- as.character(params$fips) params$fips[nchar(params$fips) < 5] <- paste0('0',params$fips[nchar(params$fips) < 5]) params <- params[with(params,order(state,county_name)),] - rownames(params) <- 1:nrow(params) } },error = function(e) { message("An error occurred during req_perform(); the service may be down or function parameters may be mis-specified: ", e$message) return(NULL) }) - return(params) + return(result) } #' @title Lookup Full Metric Name @@ -144,7 +141,7 @@ sc_fullname <- function(metric = NULL) { #' \dontrun{ #' metrics <- sc_get_metric_names(category='Wildfire') #' metrics <- sc_get_metric_names(category = c('Deposition','Climate'), -#' aoi=c('Cat','Ws') +#' aoi=c('Cat','Ws')) #' metrics <- sc_get_metric_names(aoi='Other', #' dataset=c('Canal Density','Predicted Channel Widths Depths')) #' diff --git a/tests/testthat/test-lc_get_params.R b/tests/testthat/test-lc_get_params.R index 47d62d5..55eccc6 100644 --- a/tests/testthat/test-lc_get_params.R +++ b/tests/testthat/test-lc_get_params.R @@ -15,7 +15,7 @@ test_that("lc_get_params for variable_info parameters", { test_that("lc_get_metric_names", { metrics <- lc_get_metric_names(category='Natural') expect_true(exists("metrics")) - expect_gt(nrow(metrics),70) + expect_gt(nrow(metrics),20) expect_equal(names(metrics), c("Category","Metric","AOI","Year", "Short_Name","Metric_Description","Units", "Source","Dataset")) diff --git a/vignettes/Introduction.Rmd b/vignettes/Introduction.Rmd index 37922a3..42ce618 100644 --- a/vignettes/Introduction.Rmd +++ b/vignettes/Introduction.Rmd @@ -76,6 +76,7 @@ metric='pctdecid2019,fert' fullname <- sc_fullname(metric) fullname ``` + We can additionally get a data frame of state FIPS codes, abbreviations and names, and the same information for counties as well using `sc_get_params`: ```{r states} states <- sc_get_params(param='state') @@ -87,6 +88,13 @@ counties <- sc_get_params(param='county') head(counties) ``` +## Filter metric information by criteria +We can also filter metric names and information by the metric year(s), the indicator categories for metrics, the metric data set names, or the Areas of Interest the metrics are available for. +```{r get_metric_names} +metrics <- sc_get_metric_names(category = c('Deposition','Climate'),aoi=c('Cat','Ws')) +head(metrics) +``` + ## Get data for COMIDs In this example we access several variables, for several areas of interest, and for several COMIDs using the `sc_get_data` function. Loads data into a tibble we can view. ```{r get_data} From 4a400675e93bcec66ec43fb4302dacbb723de01c Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 15 Oct 2025 10:17:11 -0700 Subject: [PATCH 14/22] document new functions --- man/lc_get_metric_names.Rd | 2 +- man/sc_get_metric_names.Rd | 2 +- vignettes/LakeCat.Rmd | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/man/lc_get_metric_names.Rd b/man/lc_get_metric_names.Rd index 523ee82..edaeb8f 100644 --- a/man/lc_get_metric_names.Rd +++ b/man/lc_get_metric_names.Rd @@ -27,7 +27,7 @@ to see all the valid category or dataset options \dontrun{ metrics <- lc_get_metric_names(category='Natural') metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), -aoi=c('Cat','Ws')} +aoi=c('Cat','Ws'))} } \author{ Marc Weber diff --git a/man/sc_get_metric_names.Rd b/man/sc_get_metric_names.Rd index 1f11eb1..89c5791 100644 --- a/man/sc_get_metric_names.Rd +++ b/man/sc_get_metric_names.Rd @@ -27,7 +27,7 @@ to see all the valid category or dataset options \dontrun{ metrics <- sc_get_metric_names(category='Wildfire') metrics <- sc_get_metric_names(category = c('Deposition','Climate'), -aoi=c('Cat','Ws') +aoi=c('Cat','Ws')) metrics <- sc_get_metric_names(aoi='Other', dataset=c('Canal Density','Predicted Channel Widths Depths')) diff --git a/vignettes/LakeCat.Rmd b/vignettes/LakeCat.Rmd index 166e829..5894270 100644 --- a/vignettes/LakeCat.Rmd +++ b/vignettes/LakeCat.Rmd @@ -68,6 +68,13 @@ fullname <- lc_fullname(metric) fullname ``` +## Filter metric information by criteria +We can also filter metric names and information by the metric year(s), the indicator categories for metrics, the metric data set names, or the Areas of Interest the metrics are available for. +```{r get_metric_names} +metrics <- lc_get_metric_names(category = c('Anthropogenic','Natural'), aoi=c('Cat','Ws')) +head(metrics) +``` + ## Get Waterbody COMIDs In this example we use the `lc_get_comid` function to find COMIDs for a set of example lake locations we load into R.`lc_get_comid` is just a simple wrapper for `get_waterbodies` in the [nhdplusTools](https://doi-usgs.github.io/nhdplusTools/) R package. We can then use the COMIDs we derive for our lake locations to get LakeCat metrics for these lakes as we show in after this. ```{r comids, warning=FALSE, message=FALSE} From f70a18649d03c8221adef4a5257db4b725729dbd Mon Sep 17 00:00:00 2001 From: Weber Date: Wed, 15 Oct 2025 11:35:15 -0700 Subject: [PATCH 15/22] updated CRAN comments --- cran-comments.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cran-comments.md b/cran-comments.md index f8d18b2..499faf5 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,8 +1,10 @@ -This is a minor update that +This is a minor update that: -- Adds code covereage to the package -- Adds two new functions to the package -- Allows passing of vectors as parameters to two of the package functions +- Addresses CRAN error noted by Dr. Brian Ripley generated by tests that is + required to be fixed by 10/25/25 +- Adds tryCatch handling for functions calling web services in order to fail + gracefully and not produce errors +- Adds documentation to vignettes for two new functions added to the package ------- From f6f3b788d5c83e78bd2ade152d81995de0101dd2 Mon Sep 17 00:00:00 2001 From: Weber Date: Thu, 16 Oct 2025 09:21:22 -0700 Subject: [PATCH 16/22] Ordered vignettes in github pages --- DESCRIPTION | 2 +- NEWS.md | 2 ++ _pkgdown.yml | 7 +++++++ docs/404.html | 6 +++--- docs/LICENSE.html | 6 +++--- docs/articles/Applications.html | 6 +++--- docs/articles/Introduction.html | 6 +++--- docs/articles/LakeCat.html | 6 +++--- docs/articles/index.html | 14 +++++++------- docs/authors.html | 10 +++++----- docs/index.html | 6 +++--- docs/news/index.html | 12 +++++++++--- docs/pkgdown.yml | 2 +- docs/reference/index.html | 6 +++--- docs/reference/lc_fullname.html | 6 +++--- docs/reference/lc_get_comid.html | 6 +++--- docs/reference/lc_get_data.html | 6 +++--- docs/reference/lc_get_metric_names.html | 6 +++--- docs/reference/lc_get_params.html | 6 +++--- docs/reference/lc_nlcd.html | 6 +++--- docs/reference/sc_fullname.html | 6 +++--- docs/reference/sc_get_comid.html | 6 +++--- docs/reference/sc_get_data.html | 6 +++--- docs/reference/sc_get_metric_names.html | 6 +++--- docs/reference/sc_get_params.html | 6 +++--- docs/reference/sc_nlcd.html | 6 +++--- docs/search.json | 2 +- 27 files changed, 90 insertions(+), 75 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 93b9297..d84b6a3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: StreamCatTools Type: Package Title: 'StreamCatTools' -Version: 0.9.0 +Version: 0.9.0.9000 Authors@R: c(person(given = "Marc", family = "Weber", role = c("aut", "cre"), diff --git a/NEWS.md b/NEWS.md index 17c9643..ef3cdcb 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,5 @@ +# StreamCatTools (development version) + # StreamCatTools 0.9.0 - Addresses CRAN error generated by tests that is diff --git a/_pkgdown.yml b/_pkgdown.yml index 64e3756..e2b3f5d 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,4 +1,11 @@ url: https://usepa.github.io/StreamCatTools/ template: bootstrap: 5 +articles: +- title: Articles + navbar: ~ + contents: + - Introduction + - LakeCat + - Applications diff --git a/docs/404.html b/docs/404.html index 0730f52..38c9e01 100644 --- a/docs/404.html +++ b/docs/404.html @@ -26,7 +26,7 @@ StreamCatTools - 0.8.0.9000 + 0.9.0.9000 diff --git a/docs/LICENSE.html b/docs/LICENSE.html index c519551..250b0d2 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -7,7 +7,7 @@ StreamCatTools - 0.8.0.9000 + 0.9.0.9000 -