以下は、2 つの異なる方法で代入する例です。1 つは機能し、もう 1 つは機能しません。
library(datasets)
dat <- as.data.frame(ChickWeight)
dat$test1 <- with(dat, Time + weight)
with(dat, test2 <- Time + weight)
> colnames(dat)
[1] "weight" "Time" "Chick" "Diet" "test1"
私はこの行動に慣れてきました。おそらくもっと驚くべきことは、それtest2
が消えてしまうことです (私が期待していたように、ベース環境に巻き込まれるのではなく):
> ls(pattern="test")
character(0)
with はかなり単純な ^H^H^H^H^H^H 短い関数であることに注意してください。
function (data, expr, ...)
eval(substitute(expr), data, enclos = parent.frame())
まず、の機能を複製しましょう:
eval( substitute(Time+weight), envir=dat, enclos=parent.frame() )
別のエンクロージャでテストします。
testEnv <- new.env()
eval( substitute(test3 <- Time+weight), envir=dat, enclos=testEnv )
ls( envir=testEnv )
まだどこにも割り当てられていません。これは、囲んでいる環境が破棄されたことに関連していたという私の推測を反証し、むしろ、,enclos
私が思っていることをしていないという議論のより基本的なことを示しています。
なぜこれが起こっているのか、そして割り当てを可能にする代替手段があるかどうかについて、私は興味があります。