除了更常见的purrr::case_when (优雅地执行向量化if-else语句)之外,还有一些不那么为人所知的变体purrr::when,它不是向量化的,但在许多情况下仍然很有用。和purrr::case_when一样,purrr::when语法也包含条件-动作对.
然而,purrr::when似乎没有评估第一个条件。在这里可以看到来自purrr::case_when的示例数据的几个例子。
x <- 35
purrr::when(
x %% 35 == 0 ~ "fizz buzz",
x %% 5 == 0 ~ "fizz",
x %% 7 == 0 ~ "buzz",
TRUE ~ "no buzz"
)
# should give "fizz buzz" but gives
"fizz"
purrr::when(
x %% 5 == 0 ~ "fizz",
x %% 7 == 0 ~ "buzz",
TRUE ~ "no buzz"
)
# should give "fizz" but gives
"buzz"
purrr::when(
x %% 7 == 0 ~ "buzz",
TRUE ~ "no buzz"
)
# should give "buzz" but gives
"no buzz"边注:
x <- 1:100)时,也会发生同样的行为。这是个窃听器吗?
它可能是一个错误,因为只有一个条件抛出此错误消息:
purrr::when(
x %% 7 == 0 ~ "buzz"
)
Error: At least one matching condition is needed.
# However, case_when behaves as expected
dplyr::case_when(
x %% 7 == 0 ~ "buzz"
)
"buzz"有什么想法吗?
发布于 2022-05-03 15:50:26
好的,这就是答案-多亏了关于github的jennybc
purrr::when需要值作为第一个参数!
x <- 35
purrr::when(
x,
x %% 7 == 0 ~ "buzz",
TRUE ~ "no buzz"
)我把这个问题和这个答案放在这里,以防其他人也监督这个问题,假设与dplyr::case_when的论点相同。
https://stackoverflow.com/questions/72096879
复制相似问题