2017-10-05 93 views
2

假設我有矢量v中包含6個元件和與多個矢量,每個矢量具有已經從矩陣M產生如下面的列表中的兩個元素的列表:提取矢量

v<-c(1,2,3,4,5,6) 

m = matrix(c(1, 2, 10 , 2, 1, 3, 8 ,9,4,6,3,1,9,11,4,7,12,3,2,5), ncol=2, byrow = TRUE) 

l <-tapply(m,rep(1:nrow(m),ncol(m)),function(i)i) 
> l 
$`1` 
[1] 1 2 

$`2` 
[1] 10 2 

$`3` 
[1] 1 3 

$`4` 
[1] 8 9 

$`5` 
[1] 4 6 

$`6` 
[1] 3 1 

$`7` 
[1] 9 11 

$`8` 
[1] 4 7 

$`9` 
[1] 12 3 

$`10` 
[1] 2 5 

從列表l,我想只保留其在v

兩個元素的矢量結果將類似於:

> R 
$`1` 
[1] 1 2 

$`2` 
[1] 1 3 

$`3` 
[1] 4 6 

$`4` 
[1] 3 1 

$`5` 
[1] 2 5 

原始的列表有18835個向量。

回答

0

我們可以使用sapply檢查是否在x所有的元素都出現在v,假設你只有2中的每個列表元素的元素。

l[sapply(l, function(x) all(x %in% v))] 


#$`1` 
#[1] 1 2 

#$`3` 
#[1] 1 3 

#$`5` 
#[1] 4 6 

#$`6` 
#[1] 3 1 

#$`10` 
#[1] 2 5 
+0

謝謝你Ronak Shah – Noor

0

這裏我們使用sapplysimplify=T來創建一個布爾向量,我們可以使用它來將子集l。我所做的假設是每個列表都有兩個元素,但可以通過將sum更改爲all並稍作修改來輕鬆更改。

l[sapply(l,function(x){sum(x %in% v)==2},simplify = T)] 
+0

謝謝Michael Bird – Noor