在R中的矢量表比较
问题描述:
我目前正在尝试检查一个列表(包含多个向量填充值)是否等于一个向量。不幸的是,下列功能对我没有效果:match()
,any()
,%in%
。什么,我想实现的一个例子如下:在R中的矢量表比较
比方说:
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
值。当我比较一个向量与一个向量正在工作,但是当我将一个向量与一个列表进行比较时,似乎它无法正常工作。
答
我不完全确定你想要的结果是什么(例如你关心向量顺序?),但无论你需要考虑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
答
我会用intersect
,像这样:
lapply(lists,intersect,vector)
[[1]]
[1] 1 2 3 4
[[2]]
numeric(0)
[[3]]
numeric(0)
如果您关心订单,您可能想提及“相同”。而不是将lapply的输出转换为矢量,使用vapply通常更安全。 – hadley 2013-02-21 19:04:35