假设我有向量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 :(得分:0)
这里我们使用sapply
和simplify=T
来制作一个布尔向量,我们可以将其用于子集l
。我所做的假设是每个列表都有两个元素,但可以通过稍加编辑将sum
更改为all
来轻松更改。
l[sapply(l,function(x){sum(x %in% v)==2},simplify = T)]
答案 1 :(得分: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