2013-05-30 37 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]]