assign
の最初の引数はオブジェクト名である必要があります。 assign
の使用は、基本的には、割り当てヘルプページの最後の反例と同じです。お守り:「< <を - 」
> x=list(a=1, b="name")
> f <- function(){
+ assign('x["d"]', FALSE, parent.frame())
+ }
> g <- function(y) {f(); print(`x["d"]`)}
> g(x)
[1] FALSE # a variable with the name `x["d"]` was created
をこれは、あなたが使用したいところかもしれないが、それは一般的に疑わしいと考えられています。
> f <- function(){
+ x$d <<- FALSE
+ }
> g <- function(y) {f(); print(y)}
> g(x)
$a
[1] 1
$b
[1] "name"
$d
[1] FALSE
さらに考え、この演習のためのいずれかの目標が存在しない状態で提供され、用語を無視ガボールがRに特定の意味を持っていますが、あなたの目標ではなかったかもしれない指摘した「属性」。あなたが望むのは出力があなたの仕様に合っているならば、これはその目標を達成しますが、地球環境におけるxの変化は起こっていないことに注目してください。
> f <- function(){
+ assign('y', c(x, d=FALSE), parent.frame())
+ }
> g <- function(y) {f(); print(y)}
> g(x)
$a
[1] 1
$b
[1] "name"
$d
[1] FALSE
> x # `x` is unchanged
$a
[1] 1
$b
[1] "name"
f
ためparent.frameは外の変数を変更する?g
の「内部と呼ばれるかもしれないが、改変は、地球環境に出て伝播しません。
を何をしようとするものです – hadley
非常に大きなオブジェクトを繰り返し呼び出される関数に渡すことを避けようとしています。この関数はオブジェクトの一部も変更します。 – gappy
オブジェクトの周りを回ってプロファイリングしても問題があることを発見しましたか?Rはobjをコピーしませんとにかくあなたがここでやっているそれを変更しない限りこの複雑なアプローチが実際に時間を節約することは明らかではありません。 – hadley