基本上,因爲你使用的是「< - 」分配的功能創建函數的範圍內使用的「全球」變量的副本。
這可以通過在第二個函數g()中添加,它在f()打印出來之前改變'global'的值,但這次使用「< < - 」賦值。在f()的第一行創建您的F(x)的「全球性」的局部範圍的副本,然後您更新的「全球性」使用G(X)在全球複製。
global <<- list()
f <- function(x) {
global[[x]] <- "blah"
g(x)
global
}
g <- function(x){
global[[x]] <<- "newblah"
}
f(1) #prints 'blah', despite the fact the g(x) has already updated the value
global #prints 'newblah'
如果f(x)仍然引用'global'的全局副本,它會打印g(x)中指定的「newblah」。相反,它打印這是在F(X)分配到的全球'的局部範圍的副本中的值。
然而,印刷「全球性」的任何功能外示出了G(X)沒有實際上更新「全球性」的全局複製的值。
現在,如果你移動內部F G(X)(X),則f(x)是現在G的父(X)。在這種情況下,「< < - 」分配給f(x)範圍內的'global'的值。所以'全局'的全局副本仍然是空的,但是如果你在f()的範圍內輸出'global',你會得到更新後的值。
global <<- list()
f <- function(x) {
global[[x]] <- "blah"
g <- function(x){
global[[x]] <<- "newblah"
}
g(x)
global
}
f(1) #prints 'newblah'
global #empty
'<< - '應該在你的函數裏面 –