如何避免使用for循环将嵌套列表的元素移到顶层?

时间:2019-06-20 19:57:31

标签: r for-loop nested-lists

我正在尝试将一组线性模型的系数提取到数据帧中。如何在不使用for循环的情况下提取这些值?

为了清楚起见,我的示例中的数据是伪数据。实际项目为一年中的每一天制作空气温度模型,然后尝试为这些模型的参数建模。目前,我只能将每个系数累加到一个单独的变量中,然后将其分别应用于我的数据集:

require(tidyverse)

# making different mpg models from displacement, distinguished by cylinder count
models <- mtcars %>% 
  nest(-cyl, .key = "cardata") %>% 
  mutate(mod = map(cardata, ~lm(mpg ~ disp, data = .))) %>% 
  mutate(coefficients = map(mod, coefficients))    #this only extracts a list of coefficients

# currently using one for-loop to extract each coefficient, looking for a more elegant way...
coef.intercept <- c()
for (i in models$coefficients) {
  coef.intercept <- c(coef.intercept,i[1])
}

coef.disp <- c()
for (i in models$coefficients) {
  coef.disp <- c(coef.disp,i[2])
}

# putting together the final data frame
models <- models %>% 
  mutate(coef.intercept) %>% 
  mutate(coef.disp) %>% 
  select(cyl, coef.intercept, coef.disp) %>% 
  as.data.frame()

使用'map'可以提取系数列表,但是我不能使用'['运算符来获取各个列表的特定元素。

mutate(models, coef.intercept = map(models, coefficients[1])) 

不起作用,出现“错误:索引1的长度必须为1,而不是2”。

1 个答案:

答案 0 :(得分:1)

目前我无法复制您的示例,但是我认为您可以从这里开始,并根据您的需求调整此解决方案。

$false