r - 具有位置向量的向量子集列表

标签 r vector subset lapply

我有一个向量列表( 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 的代码中,'mypos' 在 list 中的每一个中都重复了。元素导致从索引中提取所有元素。相反,它可以按顺序循环
lapply(seq_along(mylist), function(x) mylist[[x]][mypos[[x]]])

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

相关文章:

c++ - 如何使用 std::vector<std::mutex> 之类的东西?

r - 计算数据帧子集中数字的出现

r - 从 R 中的列表中提取多个对象

r 顺序数值

r - 在 R 的插入符包中使用 adaboost

r - 更改列表元素中的列名

c++ - 映射、对 vector 或两个 vector ...?

c++ - 如何在 C++ 中设置空对象 vector ?

python - 在 Numpy 中交换行会产生一个嵌入式数组

r - 如何在 C 中使用 Rmath.h 中的多项式函数