You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环输出中显示线性回归模型的自变量名称

问题

给定如下数据集:

structure(list(gender = structure(c(2L, 1L, 1L, 1L, 1L), .Label = c("1", 
"2"), class = "factor"), Work_less = c(0, 1, 0, 0, NA), happy = c(7, 
8, 7, 6, 7), lifestatisfied = c(8, 8, 9, 9, 7), country = c(8, 
8, 9, 9, 7)), row.names = c(NA, -5L), class = "data.frame")

尝试用以下代码拟合多个线性模型:

model <- list()
for (i in 2:ncol(dat)) {
  model[[i]] <- lm(lifestatisfied ~  dat[,i], dat)
}

但输出中自变量仅显示为dat[, i],而非对应的变量名称,示例输出如下:

[[2]]

Call:
lm(formula = lifestatisfied ~ dat[, i], data = dat)

Coefficients:
(Intercept)     dat[, i]  
     8.6667      -0.6667  


[[3]]

Call:
lm(formula = lifestatisfied ~ dat[, i], data = dat)

Coefficients:
(Intercept)     dat[, i]  
       11.7         -0.5  

请问如何修改代码,让输出显示模型对应的自变量名称?

解决方案

问题出在直接在lm的公式中使用dat[,i],R会把这个表达式原样保留,不会解析成对应的变量名。需要动态构建公式对象,让R识别出变量名称。以下是两种可行的方法:

方法1:使用as.formula()构建公式字符串

先获取目标变量的名称,拼接成公式字符串后转换成公式对象:

model <- list()
# 获取第2列到最后一列的变量名
var_names <- colnames(dat)[2:ncol(dat)]
for (i in seq_along(var_names)) {
  # 动态生成公式字符串
  formula_str <- paste("lifestatisfied ~", var_names[i])
  model[[i]] <- lm(as.formula(formula_str), data = dat)
  # 给列表元素命名,方便后续识别对应模型
  names(model)[i] <- var_names[i]
}

方法2:使用reformulate()函数(更简洁)

reformulate()可以直接通过变量名生成公式,response参数指定因变量:

model <- list()
var_names <- colnames(dat)[2:ncol(dat)]
for (i in seq_along(var_names)) {
  model[[i]] <- lm(reformulate(var_names[i], response = "lifestatisfied"), data = dat)
  names(model)[i] <- var_names[i]
}

修改后,模型输出中的自变量会显示真实名称,比如第一个模型的输出会变成:

$Work_less

Call:
lm(formula = lifestatisfied ~ Work_less, data = dat)

Coefficients:
(Intercept)    Work_less  
     8.6667      -0.6667  

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:48:17