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を使用して評価された関数では、インタープリターから評価されたかのように同じではありません。正確なセマンティクスは現在未定義であり、変更される可能性があります。

それにもかかわらず、少なくとも今のanObjectところ、呼び出しが構築されたときに(callまたはへの呼び出しで)評価されるdo.callため、substitute「anObject」ではなく「an_unknown_string」が見つかります。

于 2012-12-10T21:59:50.063 に答える
0

困惑しています。なぜこれを実際よりも複雑にしようとしているのですか?

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

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