【发布时间】:2018-09-18 04:15:04
【问题描述】:
我正在尝试使用 dplyr 中的 case_when 函数来操作向量。如果我使用 grepl 函数来测试某些文本并基于此更改输出,它就可以工作。如果我使用 grep 函数它不起作用。
我想知道为什么会这样。
代码:
library(dplyr)
x <- 1:50
v <- case_when(
x %% 35 == 0 ~ "fizz buzz",
x %% 5 == 0 ~ "fizz",
x %% 7 == 0 ~ "buzz",
TRUE ~ as.character(x)
)
# This code works as expected
case_when(
grepl("fizz", v) ~ "FFF",
grepl("buzz", v) ~ "BZZ",
TRUE ~ v
)
# This code gives an error:
# Error: `grep("buzz", v) == 1 ~ "BZZ"`, `TRUE ~ v` must
# be length 10 or one, not 7, 50
case_when(
grep("fizz", v) == 1 ~ "FFF",
grep("buzz", v) == 1 ~ "BZZ",
TRUE ~ v
)
【问题讨论】:
-
因为
grep返回索引而不是逻辑值。 -
@MartinSchmelzer 是否 grep() == 1 不会将该索引列表转换为逻辑值列表?这是我看到的错误的根源吗?
标签: r dplyr switch-statement