我想在字符向量上返回regexp匹配的逻辑向量,但是匹配或%in似乎不支持正则表达式,例如:
> x <- c("Bill", "Brett", "Jane")
> grep("^B", x)
[1] 1 2
> x %in% "^B"
[1] FALSE FALSE FALSE
我希望这回复
[1] TRUE TRUE FALSE
想法?
谢谢,
罗伯特
答案 0 :(得分:6)
链接它:
> seq(along=(x)) %in% grep("^B", x)
[1] TRUE TRUE FALSE
所以你可以给自己写一个小辅助函数来完成这两个函数。但我认为其中一个grep()
变体也是如此......啊,是的,grepl()
是你的朋友:
> grepl("^B", x)
[1] TRUE TRUE FALSE
快速help(grep)
无法治愈; - )
答案 1 :(得分:1)
使用grepl
:
> x <- c("Bill", "Brett", "Jane")
> grepl("^B", x)
[1] TRUE TRUE FALSE
修改强>
哎呀,似乎德克已经对他的答案进一步说明了这一点。为了新颖性,这里还有其他一些方法:> 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
答案 2 :(得分:0)
一种方法是在函数中包含两个简单的步骤,我们得到grep()
来做它的事情,但提供x
中元素的索引作为调用的LHS %in%
:
foo <- function(x, pattern, ...) {
seq_along(x) %in% grep(pattern, x, ...)
}
我们得到您的示例数据:
> x <- c("Bill", "Brett", "Jane")
> foo(x, pattern = "^B")
[1] TRUE TRUE FALSE