purrr map:用列表的元素索引向量

oalqel3c  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(83)

我正在尝试将我的代码从base-r for-loops更改为purrr。我想从一个有k个元素的列表的整数向量中访问可变数量的元素。
我有一个向量

set.seed(1)
subset_from<- sample(c(-20,2), size= 60, replace =T)

我有一个名为“chosen_rounds”的列表,其中有14个元素,每个元素都是一个可变长度的整数向量。

k <- 14 # number of elements in the list chosen_rounds 
k_small <- sample(sample(1:15, k, replace = T))
chosen_rounds <- map(k_small, sample, x=1:30, replace=T)

现在,我想访问我的向量“subset_from”的元素“chosen_rounds”,并计算每个列表元素的平均值,即我想要一个有14个元素的向量,每个元素都是一个子集(加权子集,即subset_from的一些元素可以在向量子集from的这个子集中出现多次。
对于第一个示例,这将是:

mean(subset_from[chosen_rounds[[1]]])

也就是-12
我曾经尝试过lmap、imap或map 2,但所有抛出的错误或返回的列表都将所有元素= NULL。
这个代码有效

chosen_rounds[1] %>% unlist() %>% subset_from[.] %>% mean

但是我还没有想出如何推广它,这样我就不必专门索引chosen_rounds,而是自动迭代列表的每个元素。
非常感谢你给我的任何关于如何迭代每个列表元素的想法。

9wbgstp7

9wbgstp71#

我找到解决办法了它在命名chosen_rounds向量上绕了一圈。

list_names<-names(chosen_rounds) <- seq_along(1:k)   

recalled_means <- map(list_names, ~ mean(subset_from[unlist(chosen_rounds[[.x]])] )  )

相关问题