【问题标题】:Why does the R case_when function work with the grepl function but not with grep function [duplicate]为什么 R case_when 函数可以与 grepl 函数一起使用,但不能与 grep 函数一起使用 [重复]
【发布时间】: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


【解决方案1】:

如果你死心塌地使用 grep,你可以这样做:

case_when(
    x %in% grep("fizz", v) ~ "FFF",
    x %in% grep("buzz", v) ~ "BZZ",
    TRUE ~ v
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2015-08-06
    相关资源
    最近更新 更多