Понять разницу между локальными и глобальными операторами присваивания в R может быть непросто. Вот пример, который должен прояснить ситуацию.

Во-первых, давайте создадим две переменные с именами «global_var» и «local_var» и присвоим им значения «global» и «local» соответственно. Обратите внимание, что мы используем стандартный оператор присваивания «‹-» для обеих переменных.

global_var <- 'global'
local_var <- 'local'
global_var
# RETURNS: 'global'
local_var
# RETURNS: 'local'

Далее давайте создадим функцию для проверки глобального оператора присваивания («‹‹-»). Внутри этой функции мы присвоим новое значение обеим только что созданным переменным; однако мы будем использовать оператор «‹-» для local_var и оператор «‹‹-» для global_var, чтобы мы могли наблюдать разницу в поведении.

my_function <- function() {
   global_var <<- 'na'
   local_var <- 'na'
   print(global_var)
   print(local_var)
}
my_function()
# RETURNS:
# 'na'
# 'na'

Эта функция работает так, как вы ожидаете интуитивно, верно? Далее начинается самое интересное, когда мы снова выводим значения этих переменных.

global_var
# RETURNS: 'na'
local_var
# RETURNS: 'local'

Из этого результата мы можем увидеть разницу в поведении, вызванную разными операторами присваивания. При использовании оператора «‹-» внутри функции его область действия ограничена только той функцией, в которой он находится. С другой стороны, оператор «‹‹-» позволяет редактировать значение переменной за пределами также функционировать.