首页 > 解决方案 > 1000 个列表中所有元素的快速平均值:返回 1 个值

问题描述

我有一个包含 10,000 个列表的 data.frame,每个列表包含 1000 个数字。我想计算一个 R 闪亮应用程序的所有数据的平均值(和 SD),并想找到最快的方法。它应该只返回 1 个平均值和 1 个 SD 值。任何人都可以建议一种方法吗?

示例数据

    df<-data.frame(Risk=runif(10000))

df<-df %>%
    rowwise()%>%
    mutate(NumInfected = list(rbinom(n=1000, size = 1000, prob = Risk/100)))

这将生成一个带有嵌套列表的 data.frame,每个列表包含 1000 个值。

标签: rdplyrlapply

解决方案


在列上使用unlist,然后在我的机器上计算平均值和标准差大约需要 0.1 秒。这速度够快吗?

ms <- function(df, col="NumInfected") {
   u <- unlist(df[[col]])
   return(c(mean(u), sd(u)))
}
library(microbenchmark)
microbenchmark(ms(df))
Unit: milliseconds
   expr      min       lq     mean  median       uq      max neval
 ms(df) 80.77705 84.43235 89.39736 89.0652 89.61738 149.7114   100

推荐阅读