1

我目前正在尝试检查一个列表(包含多个填充有值的向量)是否等于一个向量。不幸的是,以下功能对我不起作用: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值而不是肯定的结果。当我将向量与向量进行比较时,它正在工作,但是当我将向量与列表进行比较时,它似乎无法正常工作。

4

2 回答 2

2

我会使用intersect这样的东西:

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

[[2]]
numeric(0)

[[3]]
numeric(0)
于 2013-02-21T17:17:32.093 回答
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
于 2013-02-21T17:09:21.053 回答