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

如何在R中根据输入DataFrame名称命名输出回归结果对象

问题:让回归结果对象名称与输入DataFrame名称对应

我需要对多个DataFrame进行回归建模,希望输出的结果对象名称能和输入的DataFrame名称一一对应,但当前代码生成的结果名是带数字后缀的格式,想改成包含原DataFrame名称的命名方式。

当前代码

list.dfs <- list(BrC15sy_h16_d_EE86228,BrC15sy_h16_d_EE86235,BrC15sy_h16_d_EE86256,
                 BrC15sy_h16_d_EE86257,BrC15sy_h16_d_EE86267,BrC15sy_h16_d_EE86269)


for (i in 1:length(list.dfs)){

 lm.res <- lm(
    as.formula(paste(colnames(list.dfs[[i]])[1], "~ .")),
    data=list.dfs[[i]]
  )

  assign(paste0("lm_Res",i), lm.res, envir = .GlobalEnv)
}

当前输出结果对象名称

lm_Res1
lm_Res2
lm_Res3
lm_Res4
lm_Res5
lm_Res6

期望输出结果对象名称

lm_Res_BrC15sy_h16_d_EE86228
lm_Res_BrC15sy_h16_d_EE86235
lm_Res_BrC15sy_h16_d_EE86256
lm_Res_BrC15sy_h16_d_EE86257
lm_Res_BrC15sy_h16_d_EE86267
lm_Res_BrC15sy_h16_d_EE86269

解决方案

核心问题是原始的list()只存储了DataFrame的内容,没有保留原对象名称。可以通过以下两种方式解决:

方法1:用mget自动获取对象并保留名称

mget可以根据对象名从全局环境中获取数据,同时自动将对象名设为list的元素名称,后续循环时直接使用这些名称生成结果对象名:

# 定义所有目标DataFrame的名称
df_names <- c("BrC15sy_h16_d_EE86228", "BrC15sy_h16_d_EE86235", "BrC15sy_h16_d_EE86256",
              "BrC15sy_h16_d_EE86257", "BrC15sy_h16_d_EE86267", "BrC15sy_h16_d_EE86269")
# 获取DataFrame并生成带名称的list
list.dfs <- mget(df_names)

# 遍历list的元素名称(即原DataFrame名称)
for (df_name in names(list.dfs)) {
  lm.res <- lm(
    as.formula(paste(colnames(list.dfs[[df_name]])[1], "~ .")),
    data = list.dfs[[df_name]]
  )
  # 拼接生成期望的结果对象名称并赋值到全局环境
  assign(paste0("lm_Res_", df_name), lm.res, envir = .GlobalEnv)
}

方法2:手动给list元素命名

如果不想用mget,可以手动给list的每个元素指定名称(名称与原DataFrame一致),再循环遍历名称:

# 手动给list的每个元素命名
list.dfs <- list(
  BrC15sy_h16_d_EE86228 = BrC15sy_h16_d_EE86228,
  BrC15sy_h16_d_EE86235 = BrC15sy_h16_d_EE86235,
  BrC15sy_h16_d_EE86256 = BrC15sy_h16_d_EE86256,
  BrC15sy_h16_d_EE86257 = BrC15sy_h16_d_EE86257,
  BrC15sy_h16_d_EE86267 = BrC15sy_h16_d_EE86267,
  BrC15sy_h16_d_EE86269 = BrC15sy_h16_d_EE86269
)

# 遍历list的元素名称
for (df_name in names(list.dfs)) {
  lm.res <- lm(
    as.formula(paste(colnames(list.dfs[[df_name]])[1], "~ .")),
    data = list.dfs[[df_name]]
  )
  assign(paste0("lm_Res_", df_name), lm.res, envir = .GlobalEnv)
}

两种方法都能生成符合期望的结果对象名称,推荐方法1,当DataFrame数量较多时更高效。

内容的提问来源于stack exchange,提问作者Debajyoti Kabiraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:02:07