Глобальные переменные в R

151

Я заглядываю в руководства, я хотел спросить сообщество: как мы можем установить глобальные переменные внутри функции?

Alphaneo
источник

Ответы:

174

Как показывает ответ Кристиана с assign()указаниями, в глобальной среде существует способ назначения. Проще, короче (но не лучше ... придерживаться назначения) использовать <<-оператор, т.е.

    a <<- "new" 

внутри функции.

Дирк Эддельбюттель
источник
41
Этот подход на самом деле не сохраняет в глобальной среде, а вместо этого в родительской области. Иногда родительская область действия будет такой же, как глобальная среда, но в некоторых случаях с большим количеством вложенных функций она не будет.
LunaticSoul
5
Почему assignпредпочтительнее <<-?
Яша
4
@Jasha <<-будет искать цепочку вложений вплоть до глобальной среды и присваивать первой соответствующей ей переменной. Гипотетически, если у вас есть функция, f()вложенная в замыкание g()и aсуществующая в g(), то использование a <<-in f()будет присваивать ain g(), а не глобальной среде. Часто это то, что вы хотите, однако.
Боб
93

Я нашел решение о том, как установить глобальную переменную в списке рассылки с помощью assign :

a <- "old"
test <- function () {
   assign("a", "new", envir = .GlobalEnv)
}
test()
a  # display the new value
Кристиан
источник
1
см. также принятый ответ на этот пост: stackoverflow.com/questions/3969852/… для обновления фреймов данных внутри функции
user1420372