Skip to content

Commit 45499b1

Browse files
committed
fix vctrs issue
1 parent 584bca9 commit 45499b1

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

R/utils_compact.R

+8-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
#' compact_list(c(1, NA, NA), remove_na = TRUE)
1010
#' @export
1111
compact_list <- function(x, remove_na = FALSE) {
12+
# remove vctr-class attributes
13+
if (is.data.frame(x)) {
14+
x[] <- lapply(x, function(i) {
15+
class(i) <- setdiff(class(i), c("haven_labelled", "vctrs_vctr"))
16+
i
17+
})
18+
}
1219
if (remove_na) {
1320
x[!sapply(x, function(i) !is_model(i) && !inherits(i, c("Formula", "gFormula")) && (length(i) == 0L || is.null(i) || (length(i) == 1L && is.na(i)) || all(is.na(i)) || any(i == "NULL", na.rm = TRUE)))]
1421
} else {
@@ -30,5 +37,5 @@ compact_list <- function(x, remove_na = FALSE) {
3037
#'
3138
#' @export
3239
compact_character <- function(x) {
33-
x[!sapply(x, function(i) nchar(i) == 0 || all(is.na(i)) || any(i == "NULL", na.rm = TRUE))]
40+
x[!sapply(x, function(i) !nzchar(i, keepNA = TRUE) || all(is.na(i)) || any(i == "NULL", na.rm = TRUE))]
3441
}

tests/testthat/test-compact-list.R

+19-11
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
test_that("compact_list works as expected", {
2-
expect_equal(compact_list(list(NULL, 1, c(NA, NA))), list(1, c(NA, NA)))
3-
expect_equal(compact_list(c(1, NA, NA)), c(1, NA, NA))
4-
expect_equal(compact_list(list(NULL, 1, list(NULL, NULL))), list(1))
5-
expect_equal(compact_list(c(1, NA, NA), remove_na = TRUE), 1)
6-
expect_equal(compact_list(c(1, 2, 3), remove_na = TRUE), c(1, 2, 3))
7-
expect_equal(compact_list(""), "")
2+
expect_identical(compact_list(list(NULL, 1, c(NA, NA))), list(1, c(NA, NA)))
3+
expect_identical(compact_list(c(1, NA, NA)), c(1, NA, NA))
4+
expect_identical(compact_list(list(NULL, 1, list(NULL, NULL))), list(1))
5+
expect_identical(compact_list(c(1, NA, NA), remove_na = TRUE), 1)
6+
expect_identical(compact_list(c(1, 2, 3), remove_na = TRUE), c(1, 2, 3))
7+
expect_identical(compact_list(""), "")
88
expect_null(compact_list(NULL))
9-
expect_equal(compact_list(logical(0)), logical(0))
9+
expect_identical(compact_list(logical(0)), logical(0))
1010
})
1111

1212
test_that("compact_list, logical > 1", {
1313
x <- list(a = 1, b = c(1, 2), c = NA)
14-
expect_equal(compact_list(x, remove_na = TRUE), list(a = 1, b = c(1, 2)))
15-
expect_equal(compact_list(x, remove_na = FALSE), list(a = 1, b = c(1, 2), c = NA))
14+
expect_identical(compact_list(x, remove_na = TRUE), list(a = 1, b = c(1, 2)))
15+
expect_identical(compact_list(x, remove_na = FALSE), list(a = 1, b = c(1, 2), c = NA))
1616
x <- list(a = 1, b = c(NA, NA), c = NA)
17-
expect_equal(compact_list(x, remove_na = TRUE), list(a = 1))
18-
expect_equal(compact_list(x, remove_na = FALSE), list(a = 1, b = c(NA, NA), c = NA))
17+
expect_identical(compact_list(x, remove_na = TRUE), list(a = 1))
18+
expect_identical(compact_list(x, remove_na = FALSE), list(a = 1, b = c(NA, NA), c = NA))
19+
})
20+
21+
test_that("compact_list, vctrs", {
22+
data(mtcars)
23+
class(mtcars$mpg) <- c("haven_labelled", "vctrs_vctr", "double")
24+
attr(mtcars$mpg, "labels") <- c(`21` = 21)
25+
out <- compact_list(mtcars)
26+
expect_true(all(vapply(out, class, character(1)) == "numeric"))
1927
})

0 commit comments

Comments
 (0)