2013-02-21 104 views
1

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

回答

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 
+0

如果您关心订单,您可能想提及“相同”。而不是将lapply的输出转换为矢量,使用vapply通常更安全。 – hadley 2013-02-21 19:04:35

1

我会用intersect,像这样:

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

[[2]] 
numeric(0) 

[[3]] 
numeric(0)