這裏有兩種不同的方式,其中一個工作和一種不分配一個例子:分配給一個data.frame用`with`
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)
注意的是一個相當簡單的^ 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)
哪個仍然沒有分配到任何地方。這反駁了我的預感,認爲它與封閉的環境被拋棄有關,而是指向一些更基本的論點,而不是做我認爲它的做法。
我很好奇力學爲什麼這是怎麼回事,如果有一個替代允許轉讓。
因爲'dat'不是環境你的最後一個例子不修改'dat'。最好它會通過'as.environment'強制轉換到一個環境,然後被修改,然後立即丟棄,因爲沒有其他引用,所以原來的'dat'保持不變。 – 2013-02-12 03:54:51