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

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


person Alphaneo    schedule 06.08.2009    source источник


Ответы (3)


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

    a <<- "new" 

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

person Dirk Eddelbuettel    schedule 06.08.2009
comment
Этот подход фактически не сохраняет в глобальной среде, а вместо этого в родительской области. Иногда родительская область видимости будет такой же, как и глобальная среда, хотя в некоторых случаях с большим количеством вложенных функций это не так. - person LunaticSoul; 25.06.2015
comment
Почему assign предпочтительнее <<-? - person Jasha; 24.04.2019
comment
@Jasha <<- выполнит поиск по цепочке вложений до глобальной среды и назначит первую подходящую переменную, которую он найдет. Гипотетически, если у вас есть функция f(), вложенная в замыкание g(), а a существует в g(), то использование a <<- в f() назначит a в g(), а не глобальную среду. Однако зачастую это именно то, что вам нужно. - person Bob; 12.08.2019

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

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

А что насчет .GlobalEnv$a <- "new"? Я видел здесь явный способ создания переменной в определенной среде: http://adv-r.had.co.nz/Environments.html. Это кажется короче, чем использование функции assign().

person fitzberg    schedule 19.08.2020