r - 如何在 R 中对“...”函数参数进行惰性求值?
问题描述
我想将参数传递给在函数中使用它们之前不会被评估的函数。作为一个简单的例子,如果我想传递... = foo, 'bar'
给以下函数,我将如何处理,而foo
在函数中定义:
myfunc <- function(X, ...) {
for (foo in seq_along(X)) {
cat(..., '\n')
}
}
myfunc(X = 1:5, foo, 'bar')
我尝试使用cat(substitute(...), '\n')
,这似乎只是省略了foo
.
谢谢!
解决方案
1)使用eval(substitute(...))
myfunc <- function(X, ...) {
for (foo in seq_along(X)) {
eval(substitute(cat(..., "\n")))
}
}
myfunc(X = 1:5, foo, 'bar')
给予:
1 bar
2 bar
3 bar
4 bar
5 bar
2) defmacro另一种方法是在 gtools 中使用创建宏defmacro
:
library(gtools)
myfunc2 <- defmacro(X, DOTS, expr = {
for (foo in seq_along(X)) {
cat(..., "\n")
}
})
myfunc2(X = 1:5, foo, 'bar')
推荐阅读
- dll - Windows Pyinstaller ImportError:带有 PyQt5 的 DLL
- applescript - 如何在 InDesign 中使用 applescript 通过脚本标签选择文本框?
- c++ - 在有效和无效的非类型参数包之间进行选择
- c# - 为什么我们应该使用 CMD 创建一个新的 C# 项目?
- html - 自定义离线页面不包括我的 PWA 应用上的 CSS 样式
- c++ - 为什么没有打印这个指针值?
- c++ - 用于计算秒数的计时器未正确实施
- c# - 对 ConfigureSampleClock 中的速率和样本/通道的怀疑
- javascript - 从托管在 Google Cloud Run 上的 React 应用程序查询内部元数据服务器
- python - 给定过去的时间戳,从这一刻开始找到下一个午夜