[英]Why does using a variable in a function change the value returned in R when using superassignment (<<-) operator?
為什么 bar 和 baz 的行為不同? 當調用 bar 時,打印的值和全局 scope 中的值是相同的,但是當調用 baz 時,打印的值和全局 scope 中的值不同。 看起來,唯一的區別是 a 在父環境中使用(但未定義)。
a = 1:3
b = 4
foo <- function(a) {
a[1] <<- b
print(a)
}
bar <- function(a) {
foo(a)
}
baz <- function(a) {
a
foo(a)
}
bar(a) # 4 2 3
a # 4 2 3
a <- 1:3
baz(a) # 1 2 3
a # 1 2 3
復雜賦值運算符<<-
更改父環境中變量的值。 當bar
被調用時:
a
傳遞給foo
foo
然后在全局環境中將a
的第一個元素的值更改為4
foo
打印a
> bar(a) # 4 2 3
[1] 4 2 3
這里唯一需要注意的是,由於foo
是在全局環境中創建的,它通過詞法范圍在創建它的環境中搜索b
的值,這也是全局環境。 當foo
最后打印a
時就是這種情況,它再次在創建它的環境(即全局環境)中搜索它的值。 所以a
將變為c(4, 2, 3)
。
但是,當您致電baz
時,
a
這是原始的c(1, 2, 3)
foo
發生我上面解釋的相同的事情所以這就是為什么第一個打印是原始a
而第二個是修改過的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.