grepl在两个向量上

Mah*_*oud 4 r grepl

我想grepl在两个向量上应用,以查看第一个向量的元素在第二个向量的相应元素中是否可用。例如

grepl(c("bc","23","a2"),c("abcd","1234","zzzz"))
Run Code Online (Sandbox Code Playgroud)

既然bc在里面abcd23在里面1234a2不是里面zzzz,我想得到TRUE TRUE FALSE。但是,我得到的却是:

[1]  TRUE FALSE FALSE
Warning message:
In grepl(c("bc", "23", "a2"), c("abcd", "1234", "zzzz")) :
argument 'pattern' has length > 1 and only the first element will be used 
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 5

我们可以mapply在这里尝试使用:

fun <- function(x, y) {
    grepl(x, y)
}

mapply(fun, c("bc","23","a2"), c("abcd","1234","zzzz"))

  bc    23    a2 
TRUE  TRUE FALSE 
Run Code Online (Sandbox Code Playgroud)

  • 无需预先定义函数`mapply(grepl,c(“ bc”,“ 23”,“ a2”),c(“ abcd”,“ 1234”,“ zzzz”))`也可以正常工作 (2认同)

nic*_*ola 5

stringr包(依赖于stringi)提供自然的矢量化regex函数:

require(stringr)
str_detect(string=c("abcd","1234","zzzz"),pattern=c("bc","23","a2"))
#[1]  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

请注意,参数的顺序与 不同grep

  • 或者你可以只使用原始包(我认为这里不需要正则表达式) `stringi::stri_detect_fixed(c("abcd","1234","zzzz"), c("bc","23" ,“a2”))` (2认同)