R中列表的子设置元素
Sub-setting elements of a list in R
假设这是我的列表
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 系列中的函数做同样的事情?
谢谢!
lapply(a, function(x) x[x != 2])
#[[1]]
#[1] 1 4
#
#[[2]]
#[1] 10 3 7
#
#[[3]]
#[1] 14 5
使用lapply
,您可以将子集应用于列表中的每个向量。使用的子集是 x[x != 2]
。
或使用 setdiff
循环遍历 list
和 lapply
lapply(a, setdiff, 2)
#[[1]]
#[1] 1 4
#[[2]]
#[1] 10 3 7
#[[3]]
#[1] 14 5
假设这是我的列表
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 系列中的函数做同样的事情?
谢谢!
lapply(a, function(x) x[x != 2])
#[[1]]
#[1] 1 4
#
#[[2]]
#[1] 10 3 7
#
#[[3]]
#[1] 14 5
使用lapply
,您可以将子集应用于列表中的每个向量。使用的子集是 x[x != 2]
。
或使用 setdiff
循环遍历 list
和 lapply
lapply(a, setdiff, 2)
#[[1]]
#[1] 1 4
#[[2]]
#[1] 10 3 7
#[[3]]
#[1] 14 5