R

时间:2015-10-14 06:11:57

标签: r list subset apply

假设这是我的清单

a <- list(c(1,2,4))
a[[2]] <- c(2,10,3,2,7)
a[[3]] <- c(2, 2, 14, 5)

如何将此列表子集以排除所有2个。我如何获得以下内容:

[[1]]
[1] 1 4

[[2]]
[1] 10  3  7

[[3]]
[1] 14  5

我目前的解决方案:

for(j in seq(1, length(a))){
  a[[j]] <- a[[j]][a[[j]] != 2]
}

然而,这种方法感觉有点不自然。如何使用apply系列中的函数执行相同的操作?

谢谢!

2 个答案:

答案 0 :(得分:3)

lapply(a, function(x) x[x != 2])
#[[1]]
#[1] 1 4
#
#[[2]]
#[1] 10  3  7
#
#[[3]]
#[1] 14  5

使用lapply可以将子集应用于列表中的每个向量。使用的子集是x[x != 2]

答案 1 :(得分:1)

或使用setdiff循环list

来使用lapply
lapply(a, setdiff, 2)
#[[1]]
#[1] 1 4

#[[2]]
#[1] 10  3  7

#[[3]]
#[1] 14  5