每个$mu
是15个数字的向量。 如何计算1000 $mu
个中15个元素的平均值?
我知道我可以使用$mu
访问hb.post.PT1$compdraw[[1]]$mu
,但是如何提取或循环执行这些功能?
我一直在尝试这样的事情而没有成功:
lapply(hb.post.PT1$compdraw, function(x) lapply(hb.post.PT1$compdraw[[x]]$mu, function(x) mean))
道歉,我无法发布示例列表数据。
答案 0 :(得分:2)
您已经使用第一个lapply
循环遍历每个列表元素。因此,根据您的结构,循环的每个迭代将是2个元素的列表(mu
和rooti
)。所以你只需要一个lapply
:
ll <- list(list(mu = runif(15), root = runif(10)), list(mu = runif(15), runif(10)))
str(ll)
#List of 2
# $ :List of 2
# ..$ mu : num [1:15] 0.314 0.614 0.228 0.594 0.447 ...
# ..$ root: num [1:10] 0.73 0.496 0.266 0.599 0.917 ...
# $ :List of 2
# ..$ mu: num [1:15] 0.134 0.244 0.507 0.771 0.934 ...
# ..$ : num [1:10] 0.818 0.138 0.83 0.509 0.914 ...
lapply(ll, function(x) mean(x$mu))
#[[1]]
#[1] 0.4264001
#
#[[2]]
#[1] 0.4526724
答案 1 :(得分:0)
您可以使用
hb.post.PT1$compdraw %>%
purrr::map(function(x) {
mean(x$mu)
}) %>% unlist
答案 2 :(得分:0)
这就是我用tidyverse的purrr::imap
来做这件事的方法。我们可以应用一个函数来创建一个tbl
的列表索引和该索引的mu
向量的平均值,并将它们绑定到一个数据帧中以便于显示。
library(tidyverse)
set.seed(12345)
testlist <- list(
list(mu = rnorm(15), rooti = rnorm(15)),
list(mu = rnorm(15), rooti = rnorm(15)),
list(mu = rnorm(15), rooti = rnorm(15)),
list(mu = rnorm(15), rooti = rnorm(15)),
list(mu = rnorm(15), rooti = rnorm(15))
)
str(testlist[1:2])
#> List of 2
#> $ :List of 2
#> ..$ mu : num [1:15] 0.586 0.709 -0.109 -0.453 0.606 ...
#> ..$ rooti: num [1:15] 0.817 -0.886 -0.332 1.121 0.299 ...
#> $ :List of 2
#> ..$ mu : num [1:15] 0.812 2.197 2.049 1.632 0.254 ...
#> ..$ rooti: num [1:15] 1.461 -1.413 0.567 0.583 -1.307 ...
testlist %>%
imap_dfr(.f = ~ tibble(index = .y, mu_mean = mean(.x$mu)))
#> # A tibble: 5 x 2
#> index mu_mean
#> <int> <dbl>
#> 1 1 0.0341
#> 2 2 0.448
#> 3 3 0.146
#> 4 4 -0.130
#> 5 5 0.244
由reprex package(v0.2.0)创建于2018-05-07。
答案 3 :(得分:0)
对于这种情况可能有点矫枉过正,但对于这类问题,一般来说记住purrr::transpose
map(transpose(hb.post.PT1$compdraw)$mu,mean)