首页 > 解决方案 > 在 R 中使用函数指定参数的名称

问题描述

我想要做的是:我想写一个函数,让我们用一个参数调用它'function_creator':名称和一些额外的参数,这样它的输出就是一个以参数名称为参数的函数我传递给'function_creator'。

以下代码片段说明了我希望 function_creator 的行为方式:

f <- function_creater(name = "y", y_min = 2, y_max = 3)
f
function(y) {
  y >= 2 && y <= 3
}

我如何在 R 中做到这一点?我想像 sys.call() 这样的东西可能会有所帮助,但我真的不知道如何从那里开始。

标签: r

解决方案


使用rlang::new_function()你可以做到这一点。这也使用exprs()fromrlang来创建一个没有默认值的参数(即,一个没有任何内容的命名列表。函数的主体被放入substitute()函数中以交换变量名称的值。

library(rlang)

function_creater <- function(name, y_min, y_max) {

  new_args <- setNames(exprs(temp_name = ), name)
  new_body <- substitute((y >= y_min && y <= y_max), list(y = sym(name),
                                                          y_min = y_min,
                                                          y_max = y_max))

  new_function(new_args, new_body)
}

测试:

> f <- function_creater(name = "y", y_min = 2, y_max = 3)
> f
function (y) 
(y >= 2 && y <= 3)
<environment: 0x000000001af5f518>

推荐阅读