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

如何通过`...`扩展R tidyverse函数以支持任意自定义参数

需求实现说明

这个需求在R中完全可以实现,核心思路是捕获...传入的所有动态参数,统一应用和原有三个参数一致的处理逻辑,再动态传入到网格生成、分组汇总的步骤中即可。

修改后的完整函数代码

library(dplyr)
library(stringr)

foo <- function(time = 1, outcome = 1, trt_gr = 1, ...){
  # 处理原有固定参数
  fixed_params <- list(
    time = seq_len(time),
    outcome = seq_len(outcome),
    trt_gr = seq_len(trt_gr)
  )
  # 捕获...传入的动态参数,逐个应用seq_len处理
  dot_params <- list(...)
  dot_params <- lapply(dot_params, seq_len)
  # 合并所有参数
  all_params <- c(fixed_params, dot_params, list(info. = c("control","treatment")))
  # 生成全量网格
  data <- expand.grid(all_params)
  # 动态提取所有非info.的列作为分组列
  group_cols <- setdiff(names(all_params), "info.")
  # 分组汇总
  data %>% 
    group_by(across(all_of(group_cols))) %>%
    summarise(info. = str_c(sort(info., decreasing = TRUE), 
                            collapse = ' vs. '), .groups = 'drop') 
}

调用测试示例

比如新增两个动态参数gender和age_group,调用方式和输出如下:

# 传入自定义动态参数
foo(gender = 2, age_group = 3)

输出结果会自动包含新增的gender、age_group两个维度,每个维度的取值都是对应的seq_len生成的序列,info.字段的生成逻辑和原有逻辑完全一致。

关键逻辑说明

  • 用list(...)捕获用户传入的所有动态参数,统一执行seq_len处理,保证和原有三个参数的处理逻辑一致
  • 动态生成分组列,不需要手动修改分组规则,新增的参数会自动加入分组维度
  • 完全兼容原有调用方式,原有不带...参数的调用逻辑不会受到任何影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:27:01