写入比正常情况慢得多的大矩阵

时间:2014-02-16 06:53:05

标签: r matrix

假设我这样做:

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之外?

谢谢!

1 个答案:

答案 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次。