在R中的data.table内部运行函数

时间:2018-10-31 16:46:15

标签: r data.table

嗨,我在R中有一些data.table格式的数据,我需要运行一些功能。

假设我有一个名为A的数据表,其中包含“名称”,“高度”,“重量”列。

我想运行一些函数,即在data.table中进行线性回归并将系数RMSE存储到表结果中。

A[, .(beta = lm(height ~ weight)$coefficients[2], RMSE = 
     as.numeric(sqrt(crossprod(lm(height 
     ~ weight)$residuals)/(length(lm(height ~ weight)$residuals)- 
     (length(coef(lm(height ~ weight)))-1)))*100),
     by=.(name)]

我的问题:有没有办法将lm(height〜weight)结果保存为一个对象,然后访问该对象的数据,因此data.table不需要在这里像4次一样运行lm函数?

这可以运行,但是与我使用foreach并遍历“名称”相比,它有点慢,因为我有数百万行数据。

谢谢。

1 个答案:

答案 0 :(得分:0)

通过使用Henrik建议的匿名机构,我可以加快流程!

A[, {model <- lm(height ~ weight)
       BETA <- model$coefficient[2]
       RMSE <- as.numeric(sqrt(crossprod(model$residuals)/(length(model$residuals)- 
               (length(coef(model))-1)))*100)

       list(BETA = BETA, RMSE = RMSE)
       },
 by = .(name)]

显然,一个匿名主体(lambda)不需要名称,就像“一次运行就忘记了”。在此lambda中,lm()函数(按组)运行一次,并将结果存储在对象中。

然后我们可以从模型对象中提取所需的数据,最后提供list(),让j将提取的数据转换为列。

非常感谢!