如何解决为什么这段代码在 R 中需要很长时间?
#为什么这段代码在 R 中需要很长时间?
k<-1000
dat <- NULL
for (x in 0:k){
for (j in 0:k){
Y <- ((x + j)/2)
dat <- rbind(dat,x,j,Y)
}
}
out <- list(dat=dat)
解决方法
这是一些方法的基准。我已将问题中的代码修改为我认为您想要的。您可能希望对其他一些 k 值重复此操作。
library(microbenchmark)
k <- 2
microbenchmark(
ques = {
res_q <- NULL
for (x in 0:k){
for (j in 0:k){
Y <- ((x + j)/2)
res_q <- rbind(res_q,c(x,j,Y))
}
}
res_q
},expand.grid = {
g <- expand.grid(x = 0:k,j = 0:k)[2:1]
res_g <- as.matrix(transform(g,Y = (x + j) / 2))
dimnames(res_g) <- NULL
res_g
},rep = {
res_r <- cbind(x = rep(x = 0:k,each = k+1),j = 0:k,Y = NA)
res_r[,"Y"] <- rowSums(res_r[,1:2]) / 2
dimnames(res_r) <- NULL
res_r
})
## Unit: microseconds
## expr min lq mean median uq max neval cld
## ques 28829.2 29268.00 30493.273 29712.45 30303.5 56836.1 100 c
## expand.grid 1719.3 1784.85 1892.908 1882.70 1917.1 3706.7 100 b
## rep 70.3 81.55 114.655 118.00 137.9 212.6 100 a
我们验证所有方法都给出了相同的结果:
all.equal(res_q,res_g,res_r)
## [1] TRUE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。