首页 > 解决方案 > 循环创建新的数据框

问题描述

我有 10 个不同的回归模型,称为“regression1”、“regression2”等,以及它们对应的标准误差,称为“standarderrors1”、“standarderrors2”等。对于每个模型,我都试图创建一个仅包含系数和使用循环使用以下公式的置信区间:

for(i in 1:10){
betas <- regression[[i]]$coefficients
upper_bound <- betas + z_score*standerrors[[i]]
lower_bound <- betas - z_score*standerrors[[i]]

assign(paste0("DF",i), data.frame(betas))
assign(paste0("plot",i))$upper <- upper_bound
assign(paste0("plot",i))$lower <- lower_bound}

这第一部分效果很好,但我正在努力使用循环来创建新的数据框并添加变量,因为我不断收到错误“赋值目标扩展到非语言对象”。

任何有关如何使用循环创建 10 个新数据帧的帮助将不胜感激。

非常感谢!

标签: r

解决方案


正如 Anoushiravan R 所建议的那样,拥有一些数据将帮助人们帮助您找到最佳解决方案,这可能需要例如数据重塑。此外,正如 Ronak Shah 所建议的那样,使用列表可能会更加整洁和高效。这是一个基于tidy包中的函数broom并使用包中的map函数的解决方案purrr(我正在加载所有 tidyverse 包)。

library(tidyverse)
library(broom)
models <- list(
  m1 <- lm(Petal.Width ~ Sepal.Width, data=iris),
  m2 <- lm(Petal.Length ~ Sepal.Length, data=iris)
)

dfs <- map(models, ~tidy(.x)) %>% 
  map(~mutate(.x, lci = estimate-1.96*std.error, uci = estimate+1.96*std.error))

现在您有一个dfs包含每个模型的数据框的列表。


推荐阅读