我想grepl在两个向量上应用,以查看第一个向量的元素在第二个向量的相应元素中是否可用。例如
grepl(c("bc","23","a2"),c("abcd","1234","zzzz"))
Run Code Online (Sandbox Code Playgroud)
既然bc在里面abcd,23在里面1234而a2不是里面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)
我们可以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)
该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。