Skip to content

Commit abcab21

Browse files
committed
add warnings about skipped objects
1 parent ae51d8a commit abcab21

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

R/qenv-extract.R

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,27 @@
1818
#' @export
1919
`[.qenv` <- function(x, names) {
2020
checkmate::assert_class(names, "character")
21-
names_in_env <- intersect(names, ls(get_env(x)))
22-
if (!length(names_in_env)) {
21+
possible_names <- ls(get_env(x))
22+
names_warn <- setdiff(names, possible_names)
23+
names <- intersect(names, possible_names)
24+
if (!length(names)) {
2325
warning("None of `names` elements exist in `qenv`. Returning empty `qenv`.")
2426
return(qenv())
2527
}
2628

27-
limited_code <- get_code(x, names = names_in_env)
29+
if (length(names_warn)) {
30+
warning(
31+
sprintf(
32+
"Some elements of `names` do not exist in `qenv`. Skipping those: %s.",
33+
paste(names_warn, collapse = ", ")
34+
)
35+
)
36+
}
37+
38+
limited_code <- get_code(x, names = names)
2839
indexes <- which(x@code %in% limited_code)
2940

30-
x@env <- list2env(mget(x = names_in_env, envir = get_env(x)))
41+
x@env <- list2env(mget(x = names, envir = get_env(x)))
3142
x@code <- limited_code
3243
x@id <- x@id[indexes]
3344
x@warnings <- x@warnings[indexes]

tests/testthat/test-qenv_extract.R

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
testthat::test_that("`[.` returns empty qenv for names not in qenv", {
2+
data <- within(qenv(), {x = 1; a = 2})
3+
testthat::expect_warning(
4+
testthat::expect_equal(data["y"], qenv()),
5+
"None of `names` elements exist in `qenv`. Returning empty `qenv`."
6+
)
7+
})
8+
9+
testthat::test_that("`[.` returns limited qenv for some names not in qenv", {
10+
data <- within(qenv(), {x = 1; a = 2})
11+
testthat::expect_warning(
12+
testthat::expect_equal(data[c("y", "a")], data["a"]),
13+
"Some elements of `names` do not exist in `qenv`. Skipping those: y."
14+
)
15+
})
16+
117
testthat::test_that("`[.` extracts proper objects", {
218
q <- qenv()
319
code <- c("x<-1", "a<-1;b<-2")

0 commit comments

Comments
 (0)