首页 > 解决方案 > 如何在 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.

谢谢!

标签: rlazy-evaluation

解决方案


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')

推荐阅读