我想在两个向量上应用grepl
,以查看第一向量的元素在第二向量的相应元素中是否可用。例如
grepl(c("bc","23","a2"),c("abcd","1234","zzzz"))
并且由于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
答案 0 :(得分: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
答案 1 :(得分:4)
stringr
软件包(依赖于stringi
)提供了自然矢量化的regex
函数:
require(stringr)
str_detect(string=c("abcd","1234","zzzz"),pattern=c("bc","23","a2"))
#[1] TRUE TRUE FALSE
请注意,自变量grep
的顺序是不同的。
答案 2 :(得分:1)
我们也可以使用purrr
:
purrr::map2(c("bc","23","a2"),c("abcd","1234","zzzz"),
function(x,y) grepl(x,y))
[[1]]
[1] TRUE
[[2]]
[1] TRUE
[[3]]
[1] FALSE
如果您想呆在base
上:
unlist(Map(function(x,y) grepl(x,y), my_list[[1]],my_list[[2]]))
bc 23 a2
TRUE TRUE FALSE
答案 3 :(得分:0)
尝试or运算符
grepl(c("bc|23|a2"),c("abcd","1234","zzzz"))