假设我这样做:
m <- matrix(0, nrow = 20, ncol = 3)
system.time(m[1, 1:3] <- c(1,1,1))
这需要0秒。
现在我这样做:
m <- matrix(0, nrow = 10000000, ncol = 3)
system.time(m[1, 1:3] <- c(1,1,1))
我的系统大约需要0.47秒。
我需要填写一个大约850万行的矩阵,所以每次0.47秒都不能选择。有没有办法解决?除了创建许多较小的子矩阵并稍后进行rbinding之外?
谢谢!
答案 0 :(得分:0)
开始新的R会话后:
m <- matrix(0, nrow = 10000000, ncol = 3)
system.time(m[1, 1:3] <- c(1,1,1))
# User System elapsed
# 0 0 0
n <- m
system.time(m[1, 1:3] <- c(1,1,1))
# User System elapsed
# 0.074 0.061 0.135
首次修改m
。自m
引用n
后第二次复制。
This question可能会引起人们的兴趣。但是,如果进行滚动回归,首先应该查看是否在某个包中实现。如果你想在Rcpp中这样做,你应该在Rcpp中完成整个循环而不是分配到m
8.5M次。