【发布时间】:2020-01-19 16:04:33
【问题描述】:
我想使用 data.table 功能运行每月回归并返回 coef、残差等。
在下面的示例代码中,我希望能够看到每个命名列表。我的第一个 reg.list 调用就是这样做的,但它需要我为要返回的每个列表调用我的 fit.lm 辅助函数。这可能效率不高。我的第二个 reg.list 调用只调用一次,但我将所有变量串在一起而不是在命名列表中。也许我没有以正确的方式解决这个问题。
f1 <- data.table(datadate = '1/1/2019', id=paste('id', 1:100, sep=''), x=runif(100), y=runif(100))
f2 <- data.table(datadate = '1/2/2019', id=paste('id', 1:100, sep=''), x=runif(100), y=runif(100))
f3 <- data.table(datadate = '1/3/2019', id=paste('id', 1:100, sep=''), x=runif(100), y=runif(100))
fdata <- rbind(f1,f2,f3)
fit.lm <- function(mdate) {
cols <- c("datadate", "id", 'y', 'x')
load <- fdata[datadate == mdate, ..cols]
mod <- lm(formula = 'y ~ x', data = load)
return(list(coef = list(mod$coefficients), residuals = list(mod$residuals), r2 = list(summary(mod)$r.squared)))
}
reg.list <- fdata[, list( coef = fit.lm(datadate)$coef,
residuals = fit.lm(datadate)$residuals,
r2 = fit.lm(datadate)$r2), by = datadate]
reg.list <- fdata[, list(mod = fit.lm(datadate)), by = datadate]
reg.list[[2]]
在我第二次调用 reg.list 时,我必须按如下方式访问输出:
reg.list[[2]][1]
reg.list[[2]][2]
reg.list[[2]][3]
reg.list[[2]][4]
reg.list[[2]][5]
reg.list[[2]][6]
reg.list[[2]][7]
reg.list[[2]][8]
reg.list[[2]][9]
这似乎不是一种非常用户友好的方式。我想我做错了什么。我想做类似的事情:
reg.list[2][['coef']]
reg.list[2][['residuals']]
reg.list[2][['r2']]
【问题讨论】:
-
您可以删除
list部分,因为它已经是一个列表,并写fdata[, fit.lm(datadate), by = datadate]。然后你有coef等作为列名,并且可以按通常的方式访问它们。
标签: r list data.table