用相同的索引值子集列表的所有元素
subsetting all elements of a list by the same index values
可能微不足道,但我没有找到解决方案。我正在尝试通过相同的索引值对列表的所有元素进行子集化。
假设我的列表是:
mylist = list( seq(22,30,2), c(1:5), rep(8,5))
这给了我
[[1]]
[1] 22 24 26 28 30
[[2]]
[1] 1 2 3 4 5
[[3]]
[1] 8 8 8 8 8
我试图只提取值 [2:4] 并删除元素的其他值,所以我得到一个看起来像
的列表
[[1]]
[1] 24 26 28
[[2]]
[1] 2 3 4
[[3]]
[1] 8 8 8
我尝试了 foreach 和 lapply
的组合
sub = foreach(i = c(1:3)) %do% {
lapply(mylist, function(x){mylist[[i]][c(2:4)]})
}
但是我最终得到了三重复制
[[1]]
[[1]][[1]]
[1] 24 26 28
[[1]][[2]]
[1] 24 26 28
[[1]][[3]]
[1] 24 26 28
[[2]]
[[2]][[1]]
[1] 2 3 4
[[2]][[2]]
[1] 2 3 4
[[2]][[3]]
[1] 2 3 4
[[3]]
[[3]][[1]]
[1] 8 8 8
[[3]][[2]]
[1] 8 8 8
[[3]][[3]]
[1] 8 8 8
我哪里错了?
感谢@Richard Scriven
解决方案:
lapply(mylist, "[", 2:4)
可能微不足道,但我没有找到解决方案。我正在尝试通过相同的索引值对列表的所有元素进行子集化。
假设我的列表是:
mylist = list( seq(22,30,2), c(1:5), rep(8,5))
这给了我
[[1]]
[1] 22 24 26 28 30
[[2]]
[1] 1 2 3 4 5
[[3]]
[1] 8 8 8 8 8
我试图只提取值 [2:4] 并删除元素的其他值,所以我得到一个看起来像
的列表[[1]]
[1] 24 26 28
[[2]]
[1] 2 3 4
[[3]]
[1] 8 8 8
我尝试了 foreach 和 lapply
的组合sub = foreach(i = c(1:3)) %do% {
lapply(mylist, function(x){mylist[[i]][c(2:4)]})
}
但是我最终得到了三重复制
[[1]]
[[1]][[1]]
[1] 24 26 28
[[1]][[2]]
[1] 24 26 28
[[1]][[3]]
[1] 24 26 28
[[2]]
[[2]][[1]]
[1] 2 3 4
[[2]][[2]]
[1] 2 3 4
[[2]][[3]]
[1] 2 3 4
[[3]]
[[3]][[1]]
[1] 8 8 8
[[3]][[2]]
[1] 8 8 8
[[3]][[3]]
[1] 8 8 8
我哪里错了?
感谢@Richard Scriven
解决方案:
lapply(mylist, "[", 2:4)