2013-02-21 72 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)