簡體   English   中英

為什么在使用超賦值 (<<-) 運算符時,在 function 中使用變量會更改 R 中返回的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM