В принципе, поскольку вы используете назначение «< -», эта функция создает копию «глобальной» переменной для использования в рамках функции.
Это можно увидеть, добавив вторую функцию g(), которая изменяет значение «global» перед ее печатью в f(), но на этот раз с использованием «< < -». Первая строка в f() создает вашу локально скопированную копию «global» для f (x), а затем вы обновляете глобальную копию «global» с помощью 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 (х) по-прежнему ссылаясь на глобальную копии «глобальный» было бы напечатать «newblah», который был назначен в г (х). Вместо этого он печатает значение, которое было назначено в f (x), на локально скопированную копию «global».
Однако, печать 'global' вне любой функции показывает, что g (x) действительно обновила значение для глобальной копии 'global'.
Теперь, если вы переместите g (x) внутри f (x), то f (x) теперь является родительским элементом g (x).В этом случае «< < -» присваивает значение «global», которое входит в область f (x). Таким образом, глобальная копия «global» по-прежнему пуста, но если вы распечатаете «global» в области f(), вы получите обновленное значение.
global <<- list()
f <- function(x) {
global[[x]] <- "blah"
g <- function(x){
global[[x]] <<- "newblah"
}
g(x)
global
}
f(1) #prints 'newblah'
global #empty
'<< -' должно быть внутри вашей функции –