在一个原始函数中是否有`eval()`和`do.call()`?

时间:2015-11-11 16:34:22

标签: r

R中是否有一个函数,它处理评估变量并在其类为function时调用它。

a <- 1
b <- function() 2

所以我希望从ado.call(b)的评估中返回,自动理解第二个是一个函数并对其进行评估。

当然,我可以使用is.function()进行检查并致电do.call,在其他情况下请致电eval,但我认为可能已经完成。

> eval(a)
[1] 1
> do.call(a, args = list())
Error in do.call(a, args = list()) : 
  'what' must be a character string or a function

> eval(b)
function() 2
> do.call(b, args = list())
[1] 2

我确实希望

a <- 1
b <- function() 2

> someFun(a)
1
> someFun(b)
2

1 个答案:

答案 0 :(得分:4)

很难证明是消极的,但我怀疑有一个函数可以将非函数变量评估为它们的值,而函数变量则是将它们变成一个调用并执行调用的结果 - 因为这两个是从根本上不同的操作。

那就是说,当你意识到做自己很容易。事实上更容易:不需要do.call

evaluate = function (obj)
    if(is.function(obj)) obj() else obj