我想将对象的值作为参数传递给函数。
# This is my object
anObject <- "an_unkown_string"
# I would like to do the equivalent of:
someFunc("an_unkown_string")
# .. by somehow calling on the object containing the string
someFunc( ??? (anObject) )
例如,下面的示例函数(基于save()
):
someFunc <- function(...) {
names <- as.character(substitute(list(...)))[-1L]
return(names)
}
# Ideally, the output would be:
someFunc( ??? (anObject) )
[1] "an_unkown_string"
我无权修改someFunc
我尝试了以下,但没有成功。
someFunc(Name_of_Object)
someFunc(eval(Name_of_Object))
someFunc(evalq(Name_of_Object))
someFunc(force(Name_of_Object))
someFunc(eval(parse(text=Name_of_Object)))
感谢任何帮助。
答案 0 :(得分:4)
怎么样
> do.call(someFunc, list(anObject))
[1] "an_unkown_string"
或者你可以制作一个包装
myWrap <- function(...) {
do.call(someFunc, as.list(...))
}
> myWrap(anObject)
[1] "an_unkown_string"
构建调用并对其进行评估的另一种方法:
> call("someFunc", anObject)
someFunc("an_unkown_string")
> eval(call("someFunc", anObject))
[1] "an_unkown_string"
我想我应该提到?do.call
说
对于使用do.call计算的函数,某些函数(如替换函数)的行为将不同,就像从解释器中评估它们一样。精确的语义目前尚未定义,可能会发生变化。
尽管如此,至少现在,anObject
在构建调用时(在调用call
或do.call
时)进行评估,因此substitute
找到“an_unknown_string”而不是“anObject”。
答案 1 :(得分:0)
我很困惑。你为什么试图让它比实际上更复杂?
someFunc <- function(obj) {
return(obj)
}
> someFunc(anObject)
[1] "an_unkown_string"