R中是否有一个函数,它处理评估变量并在其类为function
时调用它。
a <- 1
b <- function() 2
所以我希望从a
和do.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
答案 0 :(得分:4)
很难证明是消极的,但我怀疑有一个函数可以将非函数变量评估为它们的值,而函数变量则是将它们变成一个调用并执行调用的结果 - 因为这两个是从根本上不同的操作。
那就是说,当你意识到做自己很容易。事实上更容易:不需要do.call
:
evaluate = function (obj)
if(is.function(obj)) obj() else obj