grepl在两个向量上逐个元素
我想对两个向量应用grepl在两个向量上逐个元素,r,grepl,R,Grepl,我想对两个向量应用grepl,看看第一个向量的元素在第二个向量的对应元素中是否可用。比如说 grepl(c("bc","23","a2"),c("abcd","1234","zzzz")) 由于bc在abcd中,23在1234中,a2不在zzzz中,我想得到TRUE-FALSE。但是,我得到的是: [1] TRUE FALSE FALSE Warning message: In grepl(c("bc", "23", "a2"), c("abcd", "1234", "zzzz")) : a
grepl
,看看第一个向量的元素在第二个向量的对应元素中是否可用。比如说
grepl(c("bc","23","a2"),c("abcd","1234","zzzz"))
由于bc
在abcd
中,23
在1234
中,a2
不在zzzz
中,我想得到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
试试or操作符
grepl(c("bc|23|a2"),c("abcd","1234","zzzz"))
我们可以在此处尝试使用
mapply
:
fun <- function(x, y) {
grepl(x, y)
}
mapply(fun, c("bc","23","a2"), c("abcd","1234","zzzz"))
bc 23 a2
TRUE TRUE FALSE
funstringr
软件包(依赖于stringi
)提供自然矢量化的regex
功能:
require(stringr)
str_detect(string=c("abcd","1234","zzzz"),pattern=c("bc","23","a2"))
#[1] TRUE TRUE FALSE
请注意,grep
的参数顺序不同,我们也可以使用purr
:
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
如果您想留在基地
:
unlist(Map(function(x,y) grepl(x,y), my_list[[1]],my_list[[2]]))
bc 23 a2
TRUE TRUE FALSE
或者您可以使用原始包(我认为这里不需要regex)stringi::stri_detect_fixed(c(“abcd”、“1234”、“zzzz”)、c(“bc”、“23”、“a2”)
无需事先定义函数mappy(grepl、c(“bc”、“23”、“a2”)、c(“abcd”、“1234”、“zzzz”))
也可以使用