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

Joh*_*lee 4 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)
Run Code Online (Sandbox Code Playgroud)

我也有一个位置向量(mypos):

mypos <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)

我想用它mypos来给元素的位置分配每个向量的子集,mypos以便它返回:

 [1] 1 6 11
Run Code Online (Sandbox Code Playgroud)

我试过像这样使用lapply:

lapply(mylist, "[", mypos) 
Run Code Online (Sandbox Code Playgroud)

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

[[1]]
 [1] 1 2 3

[[2]]
 [1] 5 6 7

[[3]] 
 [1] 9 10 11
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

lapply(mylist, subset, mypos)
Run Code Online (Sandbox Code Playgroud)

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

akr*_*run 5

我们可以用来Map从'mypos'的索引中提取'mylist'的相应元素

Map(`[`, mylist, mypos)
Run Code Online (Sandbox Code Playgroud)

在OP的代码中,在每个list元素中重复'mypos',从而从索引中提取所有元素.相反,它可以按顺序循环

lapply(seq_along(mylist), function(x) mylist[[x]][mypos[[x]]])
Run Code Online (Sandbox Code Playgroud)

  • `mapply(\`[\`,mylist,mypos)`假设他们对结果合并很好. (2认同)