2

目的の環境 (.GlobalEnv など) の名前に値を割り当てる R で「エクスポートされた」関数を作成しようとしています。次の構文を使用したいと思います。

# desired semantics: x <- 60
exported(x) <- 60
# ok if quotes prove necessary.
exported("x") <- 60

いくつかのバリエーションを試しました。最も基本的に:

`export<-` <- function(x, obj) {
  call <- as.list(match.call())
  elem <- as.character(call[[2]])
  assign(elem, obj, .GlobalEnv)
  get(elem, .GlobalEnv)
}
exported(x) <- 50

上記では、最後の引数が使用されていないというエラーが発生します。以下は、「オブジェクト 'x' が見つからない」という文句です。

setGeneric("exported<-", function(object, ...) {
  standardGeneric("exported<-")
})

setReplaceMethod("exported", "ANY", function(object, func) {
  call <- as.list(match.call())
  name <- as.character(call$object)
  assign(name, func, other.env)
  assign(name, func, .GlobalEnv)
  get(name, .GlobalEnv)
})

exported(x) <- 50

名前の代わりに文字ベクトルを使用する上記のアプローチでは、「割り当てのターゲットが非言語オブジェクトに展開されます」。

これはRで可能ですか?


編集: 実際には、「エクスポート済み」内でさらに作業を行いたいと考えています。簡潔にするためにコードは省略されています。また、次のようなことを使用できることも認識しています。

exported(name, func) {
  ...
}

しかし、私の構文が可能かどうかに興味があります。

4

1 に答える 1

6

なぜあなたがassign?を使わないのか理解できません。

assign( "x" , 60 , env = .GlobalEnv )
x
[1] 60

引数はenv、変数を割り当てる環境を指定します。

e <- new.env()
assign( "y" , 50 , env = e )
ls( env = e )
[1] "y"
于 2013-08-15T19:39:30.950 に答える