嗨,我在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并遍历“名称”相比,它有点慢,因为我有数百万行数据。
谢谢。
答案 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
将提取的数据转换为列。
非常感谢!