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