2010-10-01 57 views
4

我想通過一個特徵向量返回正則表達式匹配的邏輯向量,但比賽還是%的好像不支持正則表達式,如:返回匹配的邏輯向量:支持regexp?

> x <- c("Bill", "Brett", "Jane") 
> grep("^B", x) 
[1] 1 2 
> x %in% "^B" 
[1] FALSE FALSE FALSE 

我想這回

[1] TRUE TRUE FALSE 

想法?

感謝,

羅伯託

回答

6

只是IT連鎖:

> seq(along=(x)) %in% grep("^B", x) 
[1] TRUE TRUE FALSE 

所以,你可以寫自己的小幫手函數,它都如下所示。但我相信在grep()變種之一這是否還有......嗯,是的,grepl()是你的朋友:

> grepl("^B", x) 
[1] TRUE TRUE FALSE 

沒有一個快速help(grep)不能根治;-)

+1

@comment:我們今天發佈同時:-)你真的潛伏的問題,沒有兩次?我刪除了我的答案,因爲您已將其添加到您的帖子中。 – 2010-10-01 14:46:51

+0

@Joris:哇,在一分鐘內同樣的三個答案...我也刪除了我的。 – 2010-10-01 14:48:03

+0

@Joshua:好像我們需要更多的問題來滿足我們的回答需求。也許我們應該在R的郵件列表中提及這個網站的存在。我想他們不會介意在那裏失去一點點的交通...... – 2010-10-01 15:01:53

0

的一種方法是來包裝兩個簡單的步驟了一個功能,我們得到grep()到做的事情,但所提供的元素的索引中x作爲呼叫的LHS到%in%

foo <- function(x, pattern, ...) { 
    seq_along(x) %in% grep(pattern, x, ...) 
} 

與您的實例Da TA我們得到:

> x <- c("Bill", "Brett", "Jane") 
> foo(x, pattern = "^B") 
[1] TRUE TRUE FALSE 
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