【问题标题】:R lm function Error: cannot allocate vector of size 8.4 MbR lm 函数错误:无法分配大小为 8.4 Mb 的向量
【发布时间】:2014-05-10 07:55:32
【问题描述】:

我有一个巨大的数据框。我根据两列对所有数据进行分组当我将lm 函数与ddply 一起使用时,我收到错误Error: cannot allocate vector of size 8.4 Mb 。但是,当我将它用于mean 的其他功能时,它可以完美运行。 你能建议我解决这个问题吗,也许是另一个函数而不是ddply? 顺便说一句,我已经使用了最大限制

    memory.limit(size=4000)

这是一个例子:

                 a<- seq(1, 1000, 1)
                 b<- seq(2,1001,2)
                 c<- c(rep(1,250), rep(2, 250), rep(3,250), rep(4,250))
                 d<- c(rep(5,250), rep(6, 250), rep(7,250), rep(8,250))
                 df<-data.frame(a,b,c,d)

               dafr<-dlply( df, .(c,d ) , lm, formula= (a~b ))

我将数据框转换为data.table 的经验有所帮助,但我不知道如何在data.table 框架中使用lm

感谢关注。

【问题讨论】:

  • 您能否详细说明您的最终目标?另外,什么是“巨大”(有多少组,组的大小)?也许您可以在lm 中将参数modelqr 设置为FALSE
  • 基本上我有两千家公司,五年日回报率。我希望在某个市场指数上回归每家公司一年的每日回报(大约 250 obs)。我想得到各自的回归系数。

标签: r data.table lm


【解决方案1】:

如果你只需要系数,你可以试试这个:

library(data.table)
setDT(df)
dafr <- df[, as.list(lm.fit(cbind(1, b), a)$coef), by=list(c, d)]
setnames(dafr, c("c", "d", "intercept", "slope"))
#   c d    intercept slope
#1: 1 5 1.869449e-13   0.5
#2: 2 6 5.176935e-13   0.5
#3: 3 7 5.000000e+02   0.5
#4: 4 8 5.000000e+02   0.5

【讨论】:

  • 完美。非常感谢。作品。然而,一个问题。为什么在lm.fit 中使用cbind
  • 学习help("lm.fit")。第一个参数是设计矩阵,如果你想要一个截距,它必须包含一列。
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2019-04-04
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2012-06-10
相关资源
最近更新 更多