在R中对多参数函数遍历变量全排列生成新数据集的方法
解决方案
步骤1:生成所有有序变量对
首先获取数据集中的所有变量名,生成所有x≠y的有序变量对(对应排列组合n=10、r=2的需求,共10×9=90对):
# 获取变量名 vars <- colnames(your_data) # 替换your_data为你的数据集名称 # 生成所有x≠y的有序对 var_pairs <- expand.grid(x = vars, y = vars, stringsAsFactors = FALSE) var_pairs <- var_pairs[var_pairs$x != var_pairs$y, ]
步骤2:优化计算函数
调整你的函数,让它直接接收变量名,并返回带正确列名的单列数据框,方便后续合并:
new_fun <- function(data, x_name, y_name) { x <- data[[x_name]] y <- data[[y_name]] # 计算目标值并返回带列名的data.frame data.frame(!!paste0(x_name, "/", y_name) := (x - y) / (x + y)) }
步骤3:批量应用函数并合并结果
用Base R或tidyverse工具批量处理所有变量对,合并成最终数据集:
Base R 方法
# 批量生成每一列的结果 result_list <- lapply(1:nrow(var_pairs), function(i) { new_fun(your_data, var_pairs$x[i], var_pairs$y[i]) }) # 合并所有列 new_dataset <- do.call(cbind, result_list)
tidyverse 方法(更简洁)
library(purrr) library(dplyr) new_dataset <- pmap_dfc(var_pairs, ~new_fun(your_data, ..1, ..2))
验证结果
最终生成的new_dataset会有50行(与原数据行数一致)、90列(所有有序变量对的计算结果),列名格式为varX/varY,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

