我希望能够返回一个逻辑向量,用于对字符向量进行正则表达式匹配,但是match或%in似乎不支持正则表达式,例如:
> x <- c("Bill", "Brett", "Jane")
> grep("^B", x)
[1] 1 2
> x %in% "^B"
[1] FALSE FALSE FALSE
I would like this to return
[1] TRUE TRUE FALSE
有什么想法?
谢谢,
罗伯托
只需链接它:
> seq(along=(x)) %in% grep("^B", x)
[1] TRUE TRUE FALSE
所以,你可以编写一个小的辅助函数来完成这两个操作,如下所示。但我想其中一个grep()
变体也可以做到这一点...啊,是的,grepl()
是你的好朋友:
> grepl("^B", x)
[1] TRUE TRUE FALSE
没有什么问题是一个快速的help(grep)
不能解决的 ;-)
grep()
来执行其操作,但将x
中元素的索引作为调用%in%
的LHS提供:foo <- function(x, pattern, ...) {
seq_along(x) %in% grep(pattern, x, ...)
}
使用您的示例数据,我们得到:
> x <- c("Bill", "Brett", "Jane")
> foo(x, pattern = "^B")
[1] TRUE TRUE FALSE
grepl
函数:> x <- c("Bill", "Brett", "Jane")
> grepl("^B", x)
[1] TRUE TRUE FALSE
编辑
哎呀,看起来Dirk已经在他的回答中进一步解释了这个问题。为了新奇起见,这里提供其他一些方法:
> ans <- rep(FALSE,length(x))
> ans[grep("^B",x)]<-TRUE
> ans
[1] TRUE TRUE FALSE
> 1:length(x) %in% grep("^B",x)
[1] TRUE TRUE FALSE