目的の環境 (.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) {
...
}
しかし、私の構文が可能かどうかに興味があります。