在R中使用grepl搜索时转发NAs

在R中使用grepl搜索时转发NAs,r,grepl,R,Grepl,是否有一种方法可以使用grepl进行搜索而不覆盖NAs grepl('test', c(NA, 'test','bla',NA)) # [1] FALSE TRUE FALSE FALSE 我希望使用grepl获得NA TRUE-FALSE-NA,我们可以尝试is.NA以获得预期的输出 as.logical(NA^is.na(v1) * grepl("test", v1)) #[1] NA TRUE FALSE NA 或者使用ifelse ifelse(is.na(v1),

是否有一种方法可以使用
grepl
进行搜索而不覆盖NAs

grepl('test', c(NA, 'test','bla',NA))
# [1] FALSE  TRUE FALSE FALSE

我希望使用
grepl
获得
NA TRUE-FALSE-NA
,我们可以尝试
is.NA
以获得预期的输出

as.logical(NA^is.na(v1) * grepl("test", v1))
#[1]    NA  TRUE FALSE    NA
或者使用
ifelse

ifelse(is.na(v1), NA, grepl("test", v1))
#[1]    NA  TRUE FALSE    NA

ifelse(is.na(v2), NA, grepl("test", v2))
#[1]    NA  TRUE FALSE    NA  TRUE
或用
替换

replace(grepl("test", v2), is.na(v2), NA)
#[1]    NA  TRUE FALSE    NA  TRUE
数据
v1或者,您可以使用Hadley Wickham的stringr软件包中的
stru-detect(字符串、模式)

> library(stringr)
> str_detect(c(NA, 'test','bla',NA), 'test')
[1]    NA  TRUE FALSE    NA

请注意,与
grepl()

c(NA,'test','bla',NA)='test'
?@Cath相比,这些参数的顺序是相反的。我假设OP希望执行比等式更复杂的搜索:p(但是Q应该包括一个更完整的示例)@Tensibai ah。。。从一个有代表性的例子的重要性来看-P
> library(stringr)
> str_detect(c(NA, 'test','bla',NA), 'test')
[1]    NA  TRUE FALSE    NA