考虑以下简化循环
value<-rep(NA,100000)
system.time(for (i in 1:100000) {
x <- rnorm(600,0,1)
value[i]<- mean(x)
})
user system elapsed
6.839 0.184 7.025
我们如何使用向量优化此循环?是否有可能让它运行得更快?
我知道有类似的帖子,比如Using vectors instead of loops,但我的问题在随机抽签的位置上有点不同。
答案 0 :(得分:0)
循环并没有花费太多时间。调用rnorm来制作单个向量,以后使用动态包rollmean
的部分方法要慢得多。
value<-rep(NA,100000)
system.time(for (i in 1:100000) {
x <- rnorm(600,0,1)
value[i]<- mean(x)
})
user system elapsed
8.873 0.020 8.905
system.time(y <- rnorm(600*100000,0,1))
user system elapsed
6.748 0.112 6.874
x<-rep(NA,100000)
system.time(for (i in 1:100000) {
x <- rnorm(600,0,1)
})
user system elapsed
7.116 0.020 7.150
value<-rep(NA,100000)
system.time(for (i in 1:100000) {
value[i]<- mean(x)
})
user system elapsed
0.924 0.000 0.924
Ananda在评论中的想法提供了一个非常相似的循环时间。
system.time(x <- colMeans(matrix(rnorm(600*100000, 0, 1), ncol = 100000)))
user system elapsed
7.873 0.232 8.119