Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按名称访问R data.table对象中存储的列表项_R_List_Data.table - Fatal编程技术网

如何按名称访问R data.table对象中存储的列表项

如何按名称访问R data.table对象中存储的列表项,r,list,data.table,R,List,Data.table,我想使用data.table功能运行月度回归并返回coef、残差等 在下面的示例代码中,我希望能够看到每个命名列表。我的第一个reg.list调用就是这样做的,但它要求我为每个要返回的列表调用fit.lm helper函数。这可能是没有效率的。我的第二个reg.list调用只调用一次,但我将所有变量串在一起,而不是在命名列表中。也许我没有用正确的方法来处理这个问题 f1基于@IceCreamToucan的说法,我认为这里的主要问题是fit.lm函数正在推出不同长度的列表,因此data.tabl

我想使用data.table功能运行月度回归并返回coef、残差等

在下面的示例代码中,我希望能够看到每个命名列表。我的第一个reg.list调用就是这样做的,但它要求我为每个要返回的列表调用fit.lm helper函数。这可能是没有效率的。我的第二个reg.list调用只调用一次,但我将所有变量串在一起,而不是在命名列表中。也许我没有用正确的方法来处理这个问题



f1基于@IceCreamToucan的说法,我认为这里的主要问题是fit.lm函数正在推出不同长度的列表,因此data.table无法将结果展平。如果让函数为返回列表的每个项目推出相同数量的值,data.table可以使结果平坦化并保持数据整洁。请参阅下面的代码->

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(c(as.list(mod$coefficients),
           'sse' = sqrt(mean(mod$residuals^2)), 
           'r2' = summary(mod)$r.squared
           )
         )
}



fdata[,fit.lm(datadate), by = datadate]

f1基于@IceCreamToucan的说法,我认为这里的主要问题是fit.lm函数正在推出不同长度的列表,因此data.table无法将结果展平。如果让函数为返回列表的每个项目推出相同数量的值,data.table可以使结果平坦化并保持数据整洁。请参阅下面的代码->

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(c(as.list(mod$coefficients),
           'sse' = sqrt(mean(mod$residuals^2)), 
           'r2' = summary(mod)$r.squared
           )
         )
}



fdata[,fit.lm(datadate), by = datadate]

f1感谢@IceCreamToucan和@Bryan提供的有用信息。利用我从你们两人那里学到的东西,我能够构建我想要的东西(见下面的代码)。我想返回3个列表(或对象),这样coef将是回归中有多少coef的列表,残差将是多少残差的列表



fit.lm感谢@IceCreamToucan和@Bryan提供的有用信息。利用我从你们两人那里学到的东西,我能够构建我想要的东西(见下面的代码)。我想返回3个列表(或对象),这样coef将是回归中有多少coef的列表,残差将是多少残差的列表



fit.lm您可以删除
列表
部分,因为它已经是一个列表,然后写入
fdata[,fit.lm(datadate),by=datadate]
。然后,您将
coef
等作为列名,并可以以常规方式访问它们。您可以删除
列表
部分,因为它已经是一个列表,然后写入
fdata[,fit.lm(datadate),by=datadate]
。然后,您将
coef
等作为列名,并可以以常规方式访问它们。