如何从列表中的多个向量中选择多个元素

alt*_*_SU 5 indexing r list subset

有没有一种方法可以选择列表中存储的多个向量的多个元素?我希望为每个向量选择的每个元素的位置都相同。考虑列表的以下MWE,其长度为3。列表中的每个向量的长度也相等。

# create list and vectors within storing random data
mylist<- list(rnorm(5), rgeom(5, 0.05), rbinom(5, 10, 0.5))
Run Code Online (Sandbox Code Playgroud)

如果要选择第一个向量的第1个和第3个元素,我将mylist[[1]][c(1,3)]返回位置1和3的元素值。类似地,对于第二个向量,我将写mylist[[2]][c(1,3)]

但是,如何编写一些简洁的代码,以便可以在列表中同时选择第一向量和第二向量的第一和第三元素?我已经尝试过了,mylist[c(1, 2)][c(1, 3)]但是这将返回第一个向量的所有元素和NULL第二个向量的所有元素。

编辑

选定元素后,如何覆盖它们,例如(例如) mylist[c(1, 2)][c(1,3)] <- 0

Ron*_*hah 7

我们可以使用 lapply

lapply(mylist[1:2], `[`, c(1, 3))

#[[1]]
#[1] -0.5604756  1.5587083

#[[2]]
#[1]  6 55
Run Code Online (Sandbox Code Playgroud)

这类似于mappurrr

purrr::map(mylist[1:2], `[`, c(1, 3))
Run Code Online (Sandbox Code Playgroud)

要更新所选元素的值,我们可以

mylist[1:2] <-lapply(mylist[1:2], function(x) {x[c(1, 3)] <- 0;x})
mylist
#[[1]]
#[1]  0.00000000 -0.23017749  0.00000000  0.07050839  0.12928774

#[[2]]
#[1]  0 61  0  8  8

#[[3]]
#[1] 4 3 8 7 6
Run Code Online (Sandbox Code Playgroud)

数据

set.seed(123)
mylist<- list(rnorm(5), rgeom(5, 0.05), rbinom(5, 10, 0.5))
Run Code Online (Sandbox Code Playgroud)