diff --git a/R/atlas_media.R b/R/atlas_media.R index 12bedbb7..9380e494 100644 --- a/R/atlas_media.R +++ b/R/atlas_media.R @@ -107,12 +107,15 @@ build_media_id <- function(df, media_fields){ }else{ purrr::map(media_fields, .f = \(a){ df |> - tidyr::unnest_longer(col = a) |> + tidyr::unnest_longer(col = tidyselect::any_of(a)) |> dplyr::mutate(media_id = as.character(.data[[a]]), media_type = as.character(a), .before = 1) |> dplyr::filter(!is.na(.data$media_id)) |> dplyr::select(- tidyselect::any_of(media_fields)) + # break pipe at this point because tidyselect can't handle -any_of() + # keep_cols <- colnames(result)[!(colnames(result) %in% media_fields)] + # dplyr::select(result, tidyselect::any_of(keep_cols)) }) |> dplyr::bind_rows() } diff --git a/R/capture_species.R b/R/capture_species.R index ec43e6ab..e323bcce 100644 --- a/R/capture_species.R +++ b/R/capture_species.R @@ -30,7 +30,7 @@ capture_species_atlas <- function(.query){ if(!is.null(.query$group_by)){ .query$distinct$name <- .query$group_by$name }else{ - cli::cli_error("No variable supplied to `distinct()`") + cli::cli_abort("No variable supplied to `distinct()`") } } } diff --git a/R/check.R b/R/check.R index 97487eda..ff39b7d1 100644 --- a/R/check.R +++ b/R/check.R @@ -277,8 +277,8 @@ check_fields_gbif_counts <- function(.query){ # First get filters # set fields that can be queried using predicates or downloaded valid_download_fields <- .query[["metadata/fields"]] |> - filter(download_field == TRUE) |> - dplyr::pull(id) + dplyr::filter(.data$download_field == TRUE) |> + dplyr::pull("id") valid_assertions <- .query[["metadata/assertions"]]$id valid_any <- c(valid_download_fields, valid_assertions) @@ -302,13 +302,12 @@ check_fields_gbif_counts <- function(.query){ facets <- .query$body$group_by$name # check for invalid facets valid_search_fields <- .query[["metadata/fields"]] |> - filter(search_field == TRUE) |> + dplyr::filter(.data$search_field == TRUE) |> dplyr::pull(id) if (!all(facets %in% valid_search_fields)) { invalid_facets <- facets[!(facets %in% valid_search_fields)] group_by_invalid <- glue::glue_collapse(invalid_facets, sep = ", ") } - # } } c(filter_invalid, group_by_invalid) diff --git a/R/collect_distributions.R b/R/collect_distributions.R index 202c1485..c23f4a65 100644 --- a/R/collect_distributions.R +++ b/R/collect_distributions.R @@ -5,8 +5,8 @@ collect_distributions <- function(.query){ result <- query_API(.query) # NOTE: below is consistent with `collect_distributions_metadata()` (+ geometry) result <- result |> - bind_rows() |> - select("gid", + dplyr::bind_rows() |> + dplyr::select("gid", "family", "genus_name", "scientific", @@ -16,14 +16,14 @@ collect_distributions <- function(.query){ "area_km", "data_resource_uid", "geometry") |> - rename( + dplyr::rename( "id" = "gid", # this is chosen as ID because it is called by later APIs "genus" = "genus_name", "species" = "scientific", "taxon_concept_id" = "lsid", "label" = "area_name", "common_name" = "common_nam") |> - mutate("common_name" = trimws(.data$common_name)) + dplyr::mutate("common_name" = trimws(.data$common_name)) result$geometry <- sf::st_as_sfc(result$geometry, crs=4326) return(sf::st_as_sf(result)) } \ No newline at end of file diff --git a/R/collect_metadata.R b/R/collect_metadata.R index bba5c9e1..583ca0bb 100644 --- a/R/collect_metadata.R +++ b/R/collect_metadata.R @@ -40,7 +40,7 @@ tidy_list_columns <- function(x){ list_names <- names(x)[list_check] list_tibbles <- purrr::map(list_names, \(a){ - tibble::tibble({{a}} := list(x[[a]])) + tibble::tibble({{a}} == list(x[[a]])) }) }else{ list_tibbles <- NULL @@ -51,7 +51,7 @@ tidy_list_columns <- function(x){ make_nulls_safe() |> tibble::as_tibble() |> dplyr::bind_cols(list_tibbles) |> - dplyr::select(!!!names(x)) # reorder columns to same as `x` + dplyr::select(tidyselect::any_of(names(x))) # reorder columns to same as `x` } #' Internal function to ensure rows can be converted to tibble @@ -264,7 +264,7 @@ collect_fields <- function(.query){ if(is_gbif()){ # we need to join some local metadata to GBIF info - df <- galah:::gbif_internal_archived$search_fields |> + df <- gbif_internal_archived$search_fields |> dplyr::mutate(search_field = TRUE) # organise information from the API diff --git a/R/collect_metadata_unnest.R b/R/collect_metadata_unnest.R index 39c77a57..db9b7e56 100644 --- a/R/collect_metadata_unnest.R +++ b/R/collect_metadata_unnest.R @@ -18,7 +18,7 @@ collect_fields_unnest <- function(.query, purrr::pluck(!!!list("facets", 1, "counts")) |> dplyr::bind_rows() |> dplyr::rename_with(camel_to_snake_case) |> - dplyr::rename({{facet}} := "name") |> + dplyr::rename({{facet}} == "name") |> parse_select(.query) }else{ @@ -33,10 +33,10 @@ collect_fields_unnest <- function(.query, if(nrow(result) > 0){ result |> dplyr::mutate( - field_name := stringr::str_extract(result$i18nCode, "(?<=\\.).*"), + field_name == stringr::str_extract(result$i18nCode, "(?<=\\.).*"), .before = 1) |> dplyr::rename_with(camel_to_snake_case) |> - dplyr::rename({{facet}} := "field_name") |> + dplyr::rename({{facet}} == "field_name") |> parse_select(.query) }else{ # i.e. catch empty results result @@ -72,7 +72,6 @@ collect_lists_unnest <- function(.query){ # extract additional raw fields columns clean_kvp_values <- function(df){ - browser() if(any(colnames(df) == "kvpValues")){ if(any(lengths(df$kvpValues) > 0)){ df <- df |> diff --git a/R/collect_taxa.R b/R/collect_taxa.R index 8daeec81..2d4337d3 100644 --- a/R/collect_taxa.R +++ b/R/collect_taxa.R @@ -189,7 +189,7 @@ collect_identifiers <- function(.query){ # we avoid `is_gbif()` here because other atlases use GBIF APIs result$success <- TRUE result <- result |> - dplyr::relocate(success, .before = 1) |> + dplyr::relocate("success", .before = 1) |> parse_rename(.query) } diff --git a/R/compound.R b/R/compound.R index dd527b1a..83eb9ced 100644 --- a/R/compound.R +++ b/R/compound.R @@ -66,7 +66,7 @@ compound.prequery <- function(x, mint_doi = FALSE, ...){ if(stringr::str_detect(x$type, "^metadata")){ build_query_set_metadata(x) }else if(stringr::str_detect(x$type, "^files")){ - list(as_query_media_files(x, ...)) |> + list(capture_media_files(x, ...)) |> as_query_set() }else if(x$type == "data/distribtions"){ build_query_set_distributions(x) @@ -245,7 +245,7 @@ build_query_set_distributions <- function(x, ...){ }else{ if(!is.null(x$identify)){ result <- list( - collapse_taxa(list(identify = x$identify)) # wrong syntax? + capture_taxa(list(identify = x$identify)) # wrong syntax? ) result[[2]] <- capture_distributions_data(x) # NOTE: shouldn't call microfunctions directly }else{ diff --git a/R/dplyr-glimpse.R b/R/dplyr-glimpse.R index 0a1c8ded..7a5cd8a8 100644 --- a/R/dplyr-glimpse.R +++ b/R/dplyr-glimpse.R @@ -5,7 +5,8 @@ #' frame. It's a little like [str()] applied to a data frame but it tries to #' show you as much data as possible. This implementation is specific #' to `galah` and is evaluated lazily. `r lifecycle::badge("experimental")` -#' +#' @param x An object of class `data_request` +#' @param ... Other arguments, currently ignored #' @details #' This implementation of [glimpse()] actually involves changing the API call #' sent to the server, then returning a novel object class with it's own @@ -19,7 +20,7 @@ glimpse.data_request <- function(x, ...){ #' @rdname glimpse.data_request #' @export print.occurrences_glimpse <- function(x, ...){ - y <- capture.output(dplyr::glimpse(x)) + y <- utils::capture.output(dplyr::glimpse(x)) n_text <- attr(x, 'total_n') |> formatC(big.mark = ",") y[[1]] <- glue::glue("Rows: {n_text}") diff --git a/R/filter_object_classes.R b/R/filter_object_classes.R index 0d182978..97d23932 100644 --- a/R/filter_object_classes.R +++ b/R/filter_object_classes.R @@ -2,8 +2,8 @@ #' #' In galah, there are several ways to provide filter information. To ensure #' these are handled and printed correctly, they are assigned classes -#' @param x a list -#' @rdname filter_object_classes +#' @param x a list, or object of supported class +#' @name filter_object_classes #' @order 1 #' @export as_data_filter <- function(x){ @@ -44,6 +44,7 @@ as_files_filter <- function(x){ # Print functions for the above #' @rdname filter_object_classes +#' @param ... Additional arguments, currently ignored #' @order 5 #' @export print.data_filter <- function(x, ...){ diff --git a/R/galah_bbox.R b/R/galah_bbox.R index e3ff76e0..af6f954a 100644 --- a/R/galah_bbox.R +++ b/R/galah_bbox.R @@ -87,10 +87,10 @@ galah_bbox <- function(...) { } else { if (inherits(query, c("sf", "sfc"))) { query <- query |> - sf::st_bbox(crs = st_crs("WGS84")) + sf::st_bbox(crs = sf::st_crs("WGS84")) bbox_coords <- round(query, 5) query <- query |> - sf::st_as_sfc(crs = st_crs("WGS84")) # FIXME: should we define the projection? + sf::st_as_sfc(crs = sf::st_crs("WGS84")) # FIXME: should we define the projection? } } } diff --git a/R/galah_polygon.R b/R/galah_polygon.R index 3e9ebc3f..fb2d8f9d 100644 --- a/R/galah_polygon.R +++ b/R/galah_polygon.R @@ -120,8 +120,8 @@ parse_polygon <- function(query, } else { # remove space after "POLYGON" if present - if(str_detect(query, "POLYGON \\(\\(")) - query <- string::str_replace(query, "POLYGON \\(\\(", "POLYGON\\(\\(") + if(stringr::str_detect(query, "POLYGON \\(\\(")) + query <- stringr::str_replace(query, "POLYGON \\(\\(", "POLYGON\\(\\(") if (stringr::str_detect(query, "POLYGON") & !stringr::str_detect(query, "MULTIPOLYGON")) { diff --git a/R/handle_quosures.R b/R/handle_quosures.R index db1b924e..2d568051 100644 --- a/R/handle_quosures.R +++ b/R/handle_quosures.R @@ -468,7 +468,7 @@ parse_in <- function(x, excl){ #' @noRd #' @keywords internal parse_c <- function(x, excl){ - if(length(quo_get_expr(x)) < 2L){ + if(length(rlang::quo_get_expr(x)) < 2L){ filter_error() } # convert to logical format using OR statements diff --git a/R/print.R b/R/print.R index cb1db2e8..38306524 100644 --- a/R/print.R +++ b/R/print.R @@ -182,10 +182,10 @@ print.prequery <- print.query print.computed_query <- function(x, ...){ # calculate arrange/slice info if(!is.null(x$arrange)){ - arrange <- galah_pale_green(glue("\n + arrange <- galah_pale_green(glue::glue("\n arrange: {x$arrange$variable} ({x$arrange$direction})")) if(x$arrange$slice_called == TRUE){ - slice <- galah_pale_green(glue("\n + slice <- galah_pale_green(glue::glue("\n slice: {x$arrange$slice_n}")) }else{ slice <- NULL diff --git a/R/search_all.R b/R/search_all.R index d7b5b061..e1aa5240 100644 --- a/R/search_all.R +++ b/R/search_all.R @@ -23,6 +23,8 @@ #' @param all_fields `r lifecycle::badge("experimental")` If `TRUE`, #' `show_values()` also returns all columns available from the API, rather #' than the 'default' columns traditionally provided via galah. +#' @param One or more objects accepted by the taxonomic lookup services. See +#' [taxonomic_searches] for details #' @details There are six categories of information, each with their own #' specific sub-functions to look-up each type of information. #' The available types of information for `search_all()` are: diff --git a/R/show_values.R b/R/show_values.R index ec3201f7..cbbbcb70 100644 --- a/R/show_values.R +++ b/R/show_values.R @@ -99,7 +99,7 @@ show_values <- function(df, if(isTRUE(all_fields)){ request_metadata() |> filter({{type}} == {{match_name}}) |> - select(everything()) |> + select(tidyselect::everything()) |> unnest() |> collect() }else{ diff --git a/R/utilities_internal.R b/R/utilities_internal.R index f677162f..fd9f8ddb 100644 --- a/R/utilities_internal.R +++ b/R/utilities_internal.R @@ -483,8 +483,8 @@ reasons_supported <- function(){ atlas <- potions::pour("atlas", "region") supported_atlases <- request_metadata(type = "apis") |> collect() |> - dplyr::filter(type == "metadata/reasons") |> - dplyr::pull(atlas) + dplyr::filter(.data$type == "metadata/reasons") |> + dplyr::pull("atlas") atlas %in% supported_atlases } diff --git a/SPECIES_EXAMPLE.R b/SPECIES_EXAMPLE.R deleted file mode 100644 index df3885ed..00000000 --- a/SPECIES_EXAMPLE.R +++ /dev/null @@ -1,57 +0,0 @@ -# tests of dplyr syntax for converting occurrences to useful species-level -# summaries within a single pipe. - -# load libraries -library(galah) -library(dplyr) - -# get example occurrence dataset -galah_config(email = "martinjwestgate@gmail.com") -testdata <- galah_call() |> - identify("perameles") |> - select(speciesID, group = "basic") |> - filter(year == 2020) |> - collect() - -# number of records -testdata |> - count() - -# number of records per species -testdata |> - count(speciesID) - -# number of species (aka `atlas_counts(type = "species")`) -testdata |> - summarize(count = n_distinct(speciesID)) - -# one row per species (aka `atlas_species()`) -testdata |> - distinct(speciesID, .keep_all = TRUE) -# Noting that this requires care with `select()` to return sensible results - -# show only which species are present in the query (aka `show_values()`) -testdata |> - distinct(speciesID, .keep_all = FALSE) - -# get species (and optionally, record) counts grouped by a second factor -testdata |> - group_by(basisOfRecord) |> - summarize(n_records = n(), - n_spp = n_distinct(speciesID)) - -# get one row per species, showing number of records -testdata |> -testdata |> - group_by(speciesID) |> - mutate(count = n()) |> - distinct(.keep_all = TRUE) - - -# example species download for comparison purposes -# noting syntax may change -testspecies <- galah_call() |> - identify("perameles") |> - filter(year == 2020) |> - group_by(speciesID) |> - collect() \ No newline at end of file diff --git a/man/filter_object_classes.Rd b/man/filter_object_classes.Rd index d81a0a4a..548920de 100644 --- a/man/filter_object_classes.Rd +++ b/man/filter_object_classes.Rd @@ -1,6 +1,7 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/filter_object_classes.R -\name{as_data_filter} +\name{filter_object_classes} +\alias{filter_object_classes} \alias{as_data_filter} \alias{as_predicates_filter} \alias{as_metadata_filter} @@ -28,7 +29,9 @@ as_files_filter(x) \method{print}{files_filter}(x, ...) } \arguments{ -\item{x}{a list} +\item{x}{a list, or object of supported class} + +\item{...}{Additional arguments, currently ignored} } \description{ In galah, there are several ways to provide filter information. To ensure diff --git a/man/glimpse.data_request.Rd b/man/glimpse.data_request.Rd index a58d8f1b..d83bb614 100644 --- a/man/glimpse.data_request.Rd +++ b/man/glimpse.data_request.Rd @@ -9,6 +9,11 @@ \method{print}{occurrences_glimpse}(x, ...) } +\arguments{ +\item{x}{An object of class \code{data_request}} + +\item{...}{Other arguments, currently ignored} +} \description{ \code{\link[=glimpse]{glimpse()}} is like a transposed version of \code{\link[=print]{print()}}: columns run down the page, and data runs across. This makes it possible to see every column in a data diff --git a/man/search_all.Rd b/man/search_all.Rd index 8f491d77..d9b0c709 100644 --- a/man/search_all.Rd +++ b/man/search_all.Rd @@ -60,6 +60,9 @@ case-sensitive.} \item{all_fields}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#experimental}{\figure{lifecycle-experimental.svg}{options: alt='[Experimental]'}}}{\strong{[Experimental]}} If \code{TRUE}, \code{show_values()} also returns all columns available from the API, rather than the 'default' columns traditionally provided via galah.} + +\item{One}{or more objects accepted by the taxonomic lookup services. See +\link{taxonomic_searches} for details} } \value{ An object of class \code{tbl_df} and \code{data.frame} (aka a tibble) diff --git a/tests/testthat/test-atlas_species.R b/tests/testthat/test-atlas_species.R index 5f339b56..d06167ba 100644 --- a/tests/testthat/test-atlas_species.R +++ b/tests/testthat/test-atlas_species.R @@ -157,6 +157,8 @@ test_that("atlas_species reformats column names when empty tibble is returned", }) test_that("`atlas_species()` accepts `distinct()` to set the grouping variable", { + skip_if_offline(); skip_on_ci() + genera <- galah_call() |> identify("Limnodynastidae") |> distinct(genusID) |> diff --git a/tests/testthat/test-authentication.R b/tests/testthat/test-authentication.R index c2c8cc99..9729d5ab 100644 --- a/tests/testthat/test-authentication.R +++ b/tests/testthat/test-authentication.R @@ -1,7 +1,7 @@ quiet_config <- purrr::quietly(galah_config) test_that("`request_metadata()` works for type = `config`", { - skip_on_ci(); skip_on_cran() + skip_if_offline(); skip_on_ci() result <- request_metadata(type = "config") |> collect() expect_equal(nrow(result), 1) @@ -12,7 +12,7 @@ test_that("`request_metadata()` works for type = `config`", { }) test_that("`request_metadata()` caches type `config` correctly", { - skip_on_ci(); skip_on_cran() + skip_if_offline(); skip_on_ci() reset_cache() x <- request_metadata(type = "config") |> collect() diff --git a/tests/testthat/test-dplyr-count.R b/tests/testthat/test-dplyr-count.R index 9c035123..56e1fb7f 100644 --- a/tests/testthat/test-dplyr-count.R +++ b/tests/testthat/test-dplyr-count.R @@ -114,6 +114,7 @@ test_that("`count()` handles 'taxonConceptID' as a 'group by' variable", { }) test_that("`count()` handles 'speciesID' as a 'group by' variable", { + skip_if_offline(); skip_on_ci() # FIXME: Currently returns colname `speciesID.https://biodiversity.org` counts <- galah_call() |> filter(year == 1900, @@ -306,6 +307,7 @@ test_that("`group_by()` works when > 1 `filter()`", { }) test_that("`select()` works for count queries", { + skip_if_offline(); skip_on_ci() x <- galah_call() |> filter(year == 2024, genus == "Crinia") |> diff --git a/tests/testthat/test-dplyr-distinct.R b/tests/testthat/test-dplyr-distinct.R index 7d1078f9..ed105765 100644 --- a/tests/testthat/test-dplyr-distinct.R +++ b/tests/testthat/test-dplyr-distinct.R @@ -100,6 +100,7 @@ test_that("`distinct(.keep_all = TRUE)` sets species queries", { }) test_that("`distinct(.keep_all = TRUE)` accepts non-species-level groupings", { + skip_if_offline(); skip_on_ci() genera <- galah_call() |> identify("Limnodynastidae") |> distinct(genusID, .keep_all = TRUE) |> diff --git a/tests/testthat/test-galah_polygon.R b/tests/testthat/test-galah_polygon.R index b2e71b41..97506ae0 100644 --- a/tests/testthat/test-galah_polygon.R +++ b/tests/testthat/test-galah_polygon.R @@ -21,7 +21,7 @@ test_that("galah_polygon checks inputs", { }) test_that("galah_polygon finds polygon errors 1" , { - skip_on_cran() + skip_if_offline(); skip_on_ci() invalid_wkt <- "POLYGON((145.71622941565508 -32.17848852726597,))" expect_error(galah_polygon(invalid_wkt)) # NOTE: diff --git a/tests/testthat/test-international-GBIF-predicates.R b/tests/testthat/test-international-GBIF-predicates.R index f6610048..9091a638 100644 --- a/tests/testthat/test-international-GBIF-predicates.R +++ b/tests/testthat/test-international-GBIF-predicates.R @@ -19,7 +19,7 @@ test_that("`galah_filter()` returns predicates for GBIF", { }) test_that("`filter()` handles a single entry for GBIF", { - skip_if_offline(); skip_on_ci() + skip_if_offline(); skip_on_ci() x <- galah_call() |> filter(year == 2024) |> count() |> @@ -141,6 +141,8 @@ test_that("`filter()` handles `OR` and `%in%` for GBIF", { }) test_that("`filter()` handles multiple queries including != for GBIF", { + skip_if_offline(); skip_on_ci() + x <- galah_call() |> filter(year == 2024, country != "AU") |> # FIXME: countryCode fails with cryptic warning count() |> @@ -158,6 +160,8 @@ test_that("`filter()` handles multiple queries including != for GBIF", { }) test_that("`filter()` handles `between()` for GBIF", { + skip_if_offline(); skip_on_ci() + x <- galah_call() |> filter(dplyr::between(year, 2010, 2020)) |> group_by(year) |> @@ -173,6 +177,7 @@ test_that("`filter()` handles `between()` for GBIF", { }) test_that("filter() handles !() for GBIF", { + skip_if_offline(); skip_on_ci() # exclude some levels of basisOfRecord excluded_categories <- c("OCCURRENCE", "LIVING_SPECIMEN", "HUMAN_OBSERVATION") @@ -198,6 +203,8 @@ test_that("filter() handles !() for GBIF", { }) test_that("filter() handles `is.na()` for GBIF", { + skip_if_offline(); skip_on_ci() + # missing values x <- galah_call() |> filter(is.na(country)) |> @@ -224,6 +231,8 @@ test_that("filter() handles `is.na()` for GBIF", { }) test_that("filter() handles c() for GBIF", { + skip_if_offline(); skip_on_ci() + # effectively parses this as 'in' as per GBIF instructions country_vector <- c("AU", "US", "NL") diff --git a/tests/testthat/test-request_metadata_select.R b/tests/testthat/test-request_metadata_select.R index f0621800..8c7cd8de 100644 --- a/tests/testthat/test-request_metadata_select.R +++ b/tests/testthat/test-request_metadata_select.R @@ -102,7 +102,7 @@ test_that("`request_metadata()` works with `select()` for remote APIs *without* }) test_that("`request_metadata()` works with `select()` for remote APIs *with* default columns", { - skip_if_offline() + skip_if_offline(); skip_on_ci() type_list <- c("assertions", "fields", "licences", @@ -174,6 +174,8 @@ test_that("`request_metadata()` works with `select()` for remote APIs *with* def }) test_that("`request_metdata()` works with `select()` for `type = 'taxa'`", { + skip_if_offline(); skip_on_ci() + query <- request_metadata() |> identify("Crinia") |> select(everything()) |> @@ -197,6 +199,7 @@ test_that("`request_metdata()` works with `select()` for `type = 'taxa'`", { }) test_that("`request_metdata()` works with `select()` for complex taxa", { + skip_if_offline(); skip_on_ci() crinia_tibble <- tibble::tibble(kingdom = "Animalia", phylum = "Chordata", genus = "Crinia") @@ -223,6 +226,7 @@ test_that("`request_metdata()` works with `select()` for complex taxa", { }) test_that("`request_metdata()` works with `select()` for `type = 'identifiers'`", { + skip_if_offline(); skip_on_ci() tcid <- search_taxa("Chordata") |> dplyr::pull("taxon_concept_id") query <- request_metadata() |> diff --git a/tests/testthat/test-show_all.R b/tests/testthat/test-show_all.R index 76d27667..89684ce9 100644 --- a/tests/testthat/test-show_all.R +++ b/tests/testthat/test-show_all.R @@ -45,6 +45,7 @@ test_that("all `show_all()` functions return correctly with all syntax", { # lists queries are noisy, so run separately test_that("`show_all_lists()` functions work correctly", { + skip_if_offline(); skip_on_ci() quiet_lists <- function(...){ list_fun <- purrr::quietly(show_all_lists) list_fun(...) |>