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
我有一个 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