1000 个列表中所有元素的快速平均值:return 1 个值

Fast mean of all elements in 1000 lists: return 1 value

我有一个 data.frame,其中包含 10,000 个列表,每个列表包含 1000 个数字。我想为 R shiny 应用程序计算所有数据的平均值(和 SD),并想找到最快的方法。它应该只是 return 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 个值。

在列上使用 unlist 然后计算平均值和 sd 在我的机器上大约需要 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