0

我想将对象的值作为参数传递给函数。

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

任何帮助表示赞赏。

4

2 回答 2

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 评估的函数,某些函数(例如替换)的行为与从解释器评估的函数不同。精确的语义目前尚未定义,可能会发生变化。

尽管如此,至少现在,在构造调用时(在对oranObject的调用中)进行评估,因此找到“an_unknown_string”而不是“anObject”。calldo.callsubstitute

于 2012-12-10T21:59:50.063 回答
0

我很困惑。你为什么要让这比实际情况更复杂?

someFunc <- function(obj) {
   return(obj)
 }

> someFunc(anObject)
[1] "an_unkown_string"
于 2012-12-11T01:06:21.177 回答