r - 为什么 model.matrix 这么慢?

标签 r matrix lm model.matrix

考虑以下演示数据:

set.seed(1)
n <- 1000000
x1 <- rnorm(n)
x2 <- rnorm(n)
x3 <- rnorm(n)

如果我使用 model.matrix() 构建矩阵 mt,则需要很长时间:

system.time(mt <- model.matrix(~x1+x2+x3))
usuário   sistema decorrido 
 0.916     0.185     1.135 

但是如果我对矩阵做同样的事情,它会非常快:

system.time(mt2 <- matrix(c(rep(1, n), x1, x2, x3), byrow=FALSE, ncol=4))
 usuário   sistema decorrido 
  0.085     0.021     0.105 

为什么有区别?是什么让 model.matrix() 变慢对于 lm() 和相关函数来说真的有必要吗?

最佳答案

使用debugonce(model.matrix.default),并在其中使用tracemem(data)

model.matrix.default 调用 model.frame 返回一个 data.frame。在 model.matrix.default 中,此 data.frame 至少被复制 3 次。

为什么lm使用model.matrix --> lm通常用data.frame调用、listenvironment 作为 data 参数。 model.frame 并返回 data.frame 确保公式中的项可以通过后续调用 lm 找到,并且将引用相同的项值。

关于r - 为什么 model.matrix 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21715549/

相关文章:

r - 当已知可能的输出时加速 `strsplit`

c++ - 乘法矩阵c++

python - Scipy 稀疏矩阵 - 不同实现的目的和用法

R:隐藏 lm 显示中的控制变量

r - 组合栅格堆栈

r - R 中 Arima.sim() 模型的输入值是多少?

r - 当因变量是因子/分类变量时的线性模型 (lm)?

r - 获取 "mlm"返回的 `lm()` 对象的回归系数的置信区间

r - 根据之前在 R Shiny 中的选择显示下拉选择

按行 reshape 矩阵