我有一个向量列表(mylist):

a <- c(1,2,3,4)
b <- c(5,6,7,8)
c <- c(9,10,11,12)
mylist <- list(a,b,c)

我也有位置向量(mypos):
mypos <- c(1,2,3)

我想使用mypos给出元素的位置来对mypos的每个向量进行子集化,以便返回:
 [1] 1 6 11

我试过像这样使用lapply:
lapply(mylist, "[", mypos)

但这会返回每个向量的元素1、2和3:
[[1]]
 [1] 1 2 3

[[2]]
 [1] 5 6 7

[[3]]
 [1] 9 10 11

我也尝试过:
lapply(mylist, subset, mypos)

但这会返回一个错误,即子集必须是逻辑的

最佳答案

我们可以使用Map从“mypos”的索引中提取“mylist”的相应元素

Map(`[`, mylist, mypos)

在OP的代码中,在每个list元素中重复“mypos”,从而从索引中提取所有元素。相反,它可以按顺序循环
lapply(seq_along(mylist), function(x) mylist[[x]][mypos[[x]]])

关于r - 向量与位置向量的子集列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42373902/

10-09 02:52