R中的向量列表比较

时间:2013-02-21 17:06:02

标签: r list vector comparison

我目前正在尝试检查列表(包含多个填充值的向量)是否等于向量。遗憾的是,以下功能对我无效:match()any()%in%。我想要实现的一个例子如下:

让我们说:

lists=list(c(1,2,3,4),c(5,6,7,8),c(9,7))
vector=c(1,2,3,4)
answer=match(lists,vector)

执行此操作时,它会返回False个值而不是正值结果。当我将矢量与矢量进行比较时,但是当我将矢量与列表进行比较时,它似乎无法正常工作。

2 个答案:

答案 0 :(得分:2)

我会使用intersect,如下所示:

lapply(lists,intersect,vector)
[[1]]
[1] 1 2 3 4

[[2]]
numeric(0)

[[3]]
numeric(0)

答案 1 :(得分:1)

我不完全确定你想要的结果是什么(例如你关心矢量顺序吗?)但是不管你是否需要考虑lapply。例如,

##Create some data
R> lists=list(c(1,2,3,4),c(5,6,7,8),c(9,7)) 
R> vector=c(1,2,3,4) 

然后我们使用lapply浏览每个列表元素并应用一个函数。在这种情况下,我使用了match函数(因为您在问题中提到过):

R> lapply(lists, function(i) all(match(i, vector)))
[[1]]
[1] TRUE

[[2]]
[1] NA

[[3]]
[1] NA

它可能值得转换为矢量,所以

R> unlist(lapply(lists, function(i) all(match(i, vector))))
[1] TRUE   NA   NA

并将NA更改为FALSE,例如:

m = unlist(lapply(lists, function(i) all(match(i, vector))))
m[is.na(m)] = FALSE