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
我们可以使用 lapply
lapply(mylist[1:2], `[`, c(1, 3))
#[[1]]
#[1] -0.5604756 1.5587083
#[[2]]
#[1] 6 55
Run Code Online (Sandbox Code Playgroud)
这类似于map在purrr
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)