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

R语言do.call调用时能否传入当前函数不需要的额外参数?

方案1:修改函数定义,添加...参数

R函数中...可以捕获所有未匹配的命名参数,不会触发未使用参数的报错,是最简便的实现方式。
修改后的代码示例:

# 函数定义添加...捕获多余参数
a <- function(p, q, ...){p * q}
b <- function(m, n, ...){paste(m, n)}

funs <- c("a", "b")

for(i in funs){
  res <- do.call(i, list(p = 3, q = 3, m = "Yes", n = "No"))
  print(res)
}

运行输出:

[1] 9
[1] "Yes No"

方案2:调用前过滤参数列表(无需修改原函数)

如果无法修改原函数定义(比如调用的是第三方包的内置函数),可以在调用前通过formals()获取目标函数的形参列表,从总参数集中筛选出匹配的参数再传入do.call。
代码示例:

# 无需修改原函数定义
a <- function(p, q){p * q}
b <- function(m, n){paste(m, n)}

funs <- c("a", "b")
# 统一的总参数集
all_args <- list(p = 3, q = 3, m = "Yes", n = "No")

for(i in funs){
  # 获取当前函数的所有形参名
  target_args <- names(formals(i))
  # 筛选匹配的参数
  used_args <- all_args[names(all_args) %in% target_args]
  # 执行调用
  res <- do.call(i, used_args)
  print(res)
}

运行结果和方案1完全一致。如果目标函数本身已经定义了...接收动态参数,调整筛选逻辑保留对应参数即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 03:36:11