Я копаюсь в руководствах, я хотел спросить сообщество: как мы можем установить глобальные переменные внутри функции?
Глобальные переменные в R
Ответы (3)
Как показывает ответ Кристиана с assign()
, есть способ назначать в глобальной среде. Более простой и короткий (но не лучше ... придерживайтесь assign) способ - использовать оператор <<-
, т.е.
a <<- "new"
внутри функции.
person
Dirk Eddelbuettel
schedule
06.08.2009
Этот подход фактически не сохраняет в глобальной среде, а вместо этого в родительской области. Иногда родительская область видимости будет такой же, как и глобальная среда, хотя в некоторых случаях с большим количеством вложенных функций это не так.
- person LunaticSoul; 25.06.2015
Почему
assign
предпочтительнее <<-
?
- person Jasha; 24.04.2019
@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
см. также принятый ответ этого сообщения: 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