【发布时间】:2017-08-23 17:45:29
【问题描述】:
有没有一种方法可以使用公式来预测 model.matrix 中有多少列,而无需实例化 model.matrix?
我正在尝试优化代码以构建sparse.model.matrix:
构造稀疏 mm 的内存分配在此函数中效率低下。因为它不知道最终矩阵中会有多少列,所以它不能为一个大矩阵进行 1 次内存分配。相反,它将循环遍历公式中的项,并分配许多较小的矩阵。在 for 循环的每次迭代中,它还会将矩阵 cbind 在一起以增长大输出矩阵,这会产生如此多的内存分配,并且对于大数据来说真的很慢。
如果有办法计算最终结果需要多少列,我们可以预先分配矩阵并使 sparse.model.matrix 更加高效。
我面临的挑战是我不知道如何计算交互项需要多少列,尤其是当存在 a:b:c 形式的交互时。另外,我没有对比的经验,所以不知道这会如何影响所需的列数
【问题讨论】:
-
我确信有一种方法可以更优雅地做到这一点,但如果由于内存问题不想调用
model.matrix(),也许解决方案是 a) 构建一个微型模拟保留所有原始因子水平的原始数据(您可以通过对原始数值变量进行抽样并对因子抽样levels()来做到这一点),b)将model.matrix()应用于这个新数据集,然后c)调用ncol()输出?
标签: r formula model.matrix