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

如何用Base R编写函数捕获Ellipsis,无需大括号返回未求值表达式列表

实现无需大括号的表达式捕获函数fun2

要实现fun2,核心是捕获...中的每个未求值表达式,再将它们逐一包装成大括号包裹的形式,具体代码如下:

fun2 <- function(...) {
    # 捕获...中的所有未求值表达式,转为列表
    raw_exprs <- as.list(substitute(list(...)))[-1L]
    # 遍历每个表达式,用大括号包裹
    lapply(raw_exprs, function(expr) call("{", expr))
}

测试调用效果:

fun2(a = 2, a2 = a * 2)
# [[1]]
# {
#     a = 2
# }
# 
# [[2]]
# {
#     a2 = a * 2
# }

代码说明

  1. substitute(list(...))会将...中的参数以未求值的形式打包成一个列表表达式,as.list(...)转为列表后,[-1L]去掉列表本身的头部(即list这个符号),得到每个传入的原始表达式。
  2. lapply遍历每个原始表达式,用call("{", expr)构造一个大括号包裹的调用表达式,最终返回的列表就和fun1的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:05:56