2015-11-11 24 views
1

在R中是否有一个函数,它将对待评估变量并在类为function时调用它。在一个原始函数中是否有`eval()`和`do.call()`?

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

我老实说不太清楚你在问什么。你能改说吗?预期产出是多少? 'foo(a)== 1'和'foo(b)== 2'?如果是这样,这将是一个应用程序?你为什么要'foo'成为一个原始的? –

+0

@KonradRudolph我已更新问题。其实这只是为了我自己的好奇心。我有函数列表,我按顺序调用某种'stream'。以相同的方式处理变量和功能会很方便。因此,函数列表和值列表将无法区分。 –

+0

@ 42-谢谢你,船长 –

回答

3

很难证明负面,但我宁愿怀疑有将评估非函数变量其值的函数和函数变量的结果使他们成为一个电话并执行呼叫 - 因为这两个根本上是不同的操作。

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

evaluate = function (obj) 
    if(is.function(obj)) obj() else obj 
相关问题