R语言:以固定列为因变量批量生成多自变量R²统计表
动态计算因变量A与所有自变量的回归R²值
假设你有一个结构动态变化的data.frame,仅列A固定为因变量,其余列为自变量,需要自动遍历所有自变量,计算每个与A做简单线性回归后的R²值,并生成统计表。
示例数据
df <- data.frame( 'A' = runif(20,min=0, max=100), 'B' = runif(20,min=0, max=100), 'C' = runif(20,min=0, max=100), 'D' = runif(20,min=0, max=100), 'E' = runif(20,min=0, max=100) )
已定义的R²计算函数
rsq <- function(x, y) summary(lm(y~x,na.action = na.omit))$r.squared
期望输出格式
A~B A~C A~D A~E 1 0.009213715 0.009213715 0.009213715 0.009213715
问题痛点
硬编码方式(手动指定每个自变量)无法适配列名、列数动态变化的场景,需要自动化的遍历方案。
解决方案
方法1:基础R实现(sapply)
利用sapply遍历除A外的所有列,自动计算R²并整理成目标格式:
# 筛选出所有自变量列(除A外) predictors <- df[, !names(df) %in% "A"] # 遍历计算每个自变量与A的R²,得到命名向量 r2_vec <- sapply(predictors, function(col) rsq(col, df$A)) # 转换为一行的data.frame,并设置列名 r2_df <- as.data.frame(t(r2_vec)) colnames(r2_df) <- paste0("A~", names(r2_vec)) # 查看结果 r2_df
方法2:tidyverse风格实现(purrr)
如果你习惯使用tidyverse工具链,可以用purrr的map_dfc更简洁地完成:
library(purrr) library(dplyr) r2_df <- df %>% select(-A) %>% # 移除因变量列,保留所有自变量 map_dfc(~rsq(.x, df$A)) %>% # 遍历计算R²并合并为data.frame set_names(paste0("A~", names(.))) # 设置列名格式 r2_df
两种方法都能自动适配data.frame的动态变化,只要列A存在,就会自动遍历其余所有列完成计算,无需手动修改代码。
内容的提问来源于stack exchange,提问作者ofront
相关产品推荐
相关产品推荐

