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


151

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.