我想通過一個特徵向量返回正則表達式匹配的邏輯向量,但比賽還是%的好像不支持正則表達式,如:返回匹配的邏輯向量:支持regexp?
> x <- c("Bill", "Brett", "Jane")
> grep("^B", x)
[1] 1 2
> x %in% "^B"
[1] FALSE FALSE FALSE
我想這回
[1] TRUE TRUE FALSE
想法?
感謝,
羅伯託
我想通過一個特徵向量返回正則表達式匹配的邏輯向量,但比賽還是%的好像不支持正則表達式,如:返回匹配的邏輯向量:支持regexp?
> x <- c("Bill", "Brett", "Jane")
> grep("^B", x)
[1] 1 2
> x %in% "^B"
[1] FALSE FALSE FALSE
我想這回
[1] TRUE TRUE FALSE
想法?
感謝,
羅伯託
只是IT連鎖:
> seq(along=(x)) %in% grep("^B", x)
[1] TRUE TRUE FALSE
所以,你可以寫自己的小幫手函數,它都如下所示。但我相信在grep()
變種之一這是否還有......嗯,是的,grepl()
是你的朋友:
> grepl("^B", x)
[1] TRUE TRUE FALSE
沒有一個快速help(grep)
不能根治;-)
的一種方法是來包裝兩個簡單的步驟了一個功能,我們得到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
使用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
@comment:我們今天發佈同時:-)你真的潛伏的問題,沒有兩次?我刪除了我的答案,因爲您已將其添加到您的帖子中。 – 2010-10-01 14:46:51
@Joris:哇,在一分鐘內同樣的三個答案...我也刪除了我的。 – 2010-10-01 14:48:03
@Joshua:好像我們需要更多的問題來滿足我們的回答需求。也許我們應該在R的郵件列表中提及這個網站的存在。我想他們不會介意在那裏失去一點點的交通...... – 2010-10-01 15:01:53