如何对 R 中的每一列运行 lm 回归

She*_*don 4 regression r dataframe

我的数据框为:

df=data.frame(x=rnorm(100),y1=rnorm(100),y2=rnorm(100),y3=...)
Run Code Online (Sandbox Code Playgroud)

我想运行一个循环,从第一列的第二列开始回归每一列:

for(i in names(df[,-1])){
    model = lm(i~x, data=df)
}
Run Code Online (Sandbox Code Playgroud)

但我失败了。重点是我想对每一列进行回归循环,并且某些列名称只是一个数字(例如 404.1)。我无法找到使用上述命令为每列运行循环的方法。

Gin*_*mon 5

您的代码看起来很好,除了当您i在 内调用时lm, R 将读取i为字符串,您无法对它进行回归。使用get将允许您拉出对应于 的列i

df=data.frame(x=rnorm(100),y1=rnorm(100),y2=rnorm(100),y3=rnorm(100))

storage <- list()
for(i in names(df)[-1]){
  storage[[i]] <- lm(get(i) ~ x, df)
}
Run Code Online (Sandbox Code Playgroud)

我创建一个空列表storage,我将用循环的每次迭代来填充该列表。这只是个人喜好,但我也建议您不要编写当前循环:

 for(i in names(df[,-1])){
    model = lm(i~x, data=df)
}
Run Code Online (Sandbox Code Playgroud)

您将覆盖model,从而仅返回最后一次迭代结果。我建议您将其更改为列表或矩阵,您可以在其中迭代存储结果。

希望有帮助