2013-05-30 52 views
1

這看起來像一個愚蠢的問題,但花了一些時間尋找(簡單)解決方案後,我找不到它。在列表中搜索矢量

我有載體列表:

l <- list(c(1, 2), c(5, 10)) 

,我想測試是否一個給定的載體---例如,c(1, 2) ---是在該列表中。我認爲,「簡單」的方法將工作:

c(1, 2) %in% l 

但返回

[1] FALSE FALSE 

最後,我發現了以下解決方案:

any(sapply(l, function(x) { all(x == c(1, 2)) })) 

但它是相當繁瑣的,所以我真的很想知道這是否是最簡單的選擇。有沒有更簡單的方法來測試矢量列表中的矢量?

+0

一旦你把它包裝在一個允許你搜索任何給定的矢量的函數中,不要太麻煩。那麼你唯一的問題就是考慮是否要使用'isTRUE(all.equal())'或'identical'來代替。 – joran

回答

3

由於您正在處理對象,因此==運算符並不理想。稍微簡單的方法是:

any(sapply(l, identical, y=c(1,2))) 

%in%操作不起作用,因爲它是對函數match的調用。它讀取l作爲一個向量。換句話說,它正在做的是:

for(i in 1:length(c(1,2))) 
c(1,2)[i]==l[[i]]