r - 在 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() 这样的东西可能会有所帮助,但我真的不知道如何从那里开始。
解决方案
使用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>
推荐阅读
- excel - 有没有办法替换这个循环来找到 Instr?
- c# - 如何在 hololens 上调试统一 c# 项目
- javascript - 节点模块外的返回值
- android - 从 android 手机模块启动应用程序活动
- python - 创建从 API .py 到 .exe 的可执行文件,当在控制台中执行 .py 时,会将参数发送给它
- git - 在 GitHub 中意外创建的子模块文件夹
- sql - 从 SQL 中的 3 个字符串创建日期列
- java - JavaFX-11/macOS:DirectoryChooser 崩溃“NSObjectNotAvailableException”
- reactjs - React material-ui Select 组件的标签显示在内容之上
- google-ads-api - google adwords 转换跟踪可以通过后端集成来实现吗?