Closed
Description
Starting with dplyr 1.1.0, dplyr::if_else()
fails with a meaningless error message when condition
is a labelled logical vector:
d <-
mtcars |>
dplyr::mutate(mileage = mpg > 20) |>
labelled::set_variable_labels(mileage = "mileage dummy")
dplyr::if_else(d$mileage,
"guzzler",
"moderate")
#> Error in `dplyr::if_else()`:
#> ! `condition` must be a vector with type <logical>.
#> Instead, it has type <logical>.
#> Backtrace:
#> ▆
#> 1. └─dplyr::if_else(d$mileage, "guzzler", "moderate")
#> 2. └─vctrs::vec_assert(x = condition, ptype = logical(), arg = "condition")
#> 3. └─rlang::abort(...)
Created on 2023-02-02 with reprex v2.0.2
Explicitly providing the correct prototype gives the same result:
dplyr::if_else(d$mileage,
"guzzler",
"moderate",
ptype = vctrs::vec_ptype(d$mileage))
#> Error in `dplyr::if_else()`:
#> ! `condition` must be a vector with type <logical>.
#> Instead, it has type <logical>.
#> Backtrace:
#> ▆
#> 1. └─dplyr::if_else(d$mileage, "guzzler", "moderate", ptype = vctrs::vec_ptype(d$mileage))
#> 2. └─vctrs::vec_assert(x = condition, ptype = logical(), arg = "condition")
#> 3. └─rlang::abort(...)
Metadata
Metadata
Assignees
Labels
No labels