首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >purrr::时()不计算第一个条件

purrr::时()不计算第一个条件
EN

Stack Overflow用户
提问于 2022-05-03 08:45:53
回答 1查看 70关注 0票数 0

除了更常见的purrr::case_when (优雅地执行向量化if-else语句)之外,还有一些不那么为人所知的变体purrr::when,它不是向量化的,但在许多情况下仍然很有用。和purrr::case_when一样,purrr::when语法也包含条件-动作对.

然而,purrr::when似乎没有评估第一个条件。在这里可以看到来自purrr::case_when的示例数据的几个例子。

代码语言:javascript
复制
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"

边注:

  1. 所有条件评估为真。
  2. 在最后一个条件中省略TRUE时,也会发生相同的行为。
  3. 当x是向量(例如x <- 1:100)时,也会发生同样的行为。

这是个窃听器吗?

它可能是一个错误,因为只有一个条件抛出此错误消息:

代码语言:javascript
复制
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"

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-05-03 15:50:26

好的,这就是答案-多亏了关于github的jennybc

purrr::when需要值作为第一个参数!

代码语言:javascript
复制
x <- 35
purrr::when(
  x,
  x %% 7 == 0 ~ "buzz",
  TRUE ~ "no buzz"
)

我把这个问题和这个答案放在这里,以防其他人也监督这个问题,假设与dplyr::case_when的论点相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72096879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档