使用rlang包,我可以创建一个具有以下公式的函数:

new_function(pairlist2(a = , b = ), quote(a * b))

想象一下我在字符载体中有一个b:

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

如何使用arg_names来创建函数参数?

需要指出的是,我事先并不知道参数的数量.另一个过程返回参数,这些参数可能会有所不同.

推荐答案

已经有一个很好的答案,但由于该问题确实使用了rlang标签,我们可以使用rlang missing_arg函数. 我们将从正文中提取变量以获取参数,并假设它们按照遇到的顺序,但如果更好的话,我们可以提供args <- c("a", "b").

library(purrr)
library(rlang)

# input
f <- function() a * b

args <- all.vars(body(f)) # or use args <- c("a","b")
formals(f) <- map(set_names(args), ~ missing_arg())

f
## function (a, b) 
## a * b

相应的基本R代码是:

formals(f) <- sapply(args, \(x) unname(alist(x=)))

R相关问答推荐

按列A中的值进行子集化,并获得列C中对应于R中列B的最大值行的值?使用循环自动化此操作

是什么导致R中的mvtnorm包中出现这个错误?

geom_raster不适用于x比例中超过2,15的值

通过绘图 Select 线串几何体并为其着色

创建重复删除的唯一数据集组合列表

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

在垂直轴中包含多个ggplot2图中的平均值

gt()从gt为相同内容的单元格 colored颜色 不同?

然后根据不同的列值有条件地执行函数

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

在带有`R`中的`ggmosaic`的马赛克图中使用图案而不是 colored颜色

如何使用字符串从重复的模式中提取多个数字?

如何使用FormC使简单算术运算得到的数字是正确的?

在R中的数据框上使用Apply()函数时,如何保留非数字列?

循环遍历多个变量,并将每个变量插入函数R

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

从线的交点创建面

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹