Variáveis ​​globais em R

151

Estou vasculhando os manuais, queria perguntar à comunidade: Como podemos definir variáveis ​​globais dentro de uma função?

Alphaneo
fonte

Respostas:

174

Como a resposta de Christian nos assign()programas, existe uma maneira de atribuir no ambiente global. Uma maneira mais simples, mais curta (mas não melhor ... fique com a atribuição) é usar o <<-operador, ou seja,

    a <<- "new" 

dentro da função.

Dirk Eddelbuettel
fonte
41
Essa abordagem, na verdade, não salva no ambiente global, mas no escopo pai. Às vezes, o escopo pai será o mesmo do ambiente global, embora, em alguns casos, com muitas funções aninhadas, não seja.
LunaticSoul
5
Por que é assignpreferido <<-?
21419 Jasha
4
O @Jasha <<-pesquisará a cadeia de gabinetes até o ambiente global e atribuirá a primeira variável correspondente que encontrar. Hipoteticamente, se você tem uma função f()aninhada em um fechamento g()e aexiste em g(), o uso de a <<-in f()será atribuído a ain g(), não ao ambiente global. Muitas vezes, porém, é isso que você deseja.
Bob
93

Encontrei uma solução para definir uma variável global em uma postagem da lista de discussão por meio de assign :

a <- "old"
test <- function () {
   assign("a", "new", envir = .GlobalEnv)
}
test()
a  # display the new value
cristão
fonte
1
ver também a resposta aceita deste post: stackoverflow.com/questions/3969852/... para dataframes atualização dentro de uma função
user1420372