Variabel global dalam R

151

Saya membuka manual, saya ingin bertanya kepada komunitas: Bagaimana kita bisa mengatur variabel global di dalam suatu fungsi?

Alphaneo
sumber

Jawaban:

174

Seperti jawaban Christian dengan assign()menunjukkan, ada cara untuk ditugaskan di lingkungan global. Cara sederhana, lebih pendek (tapi tidak lebih baik ... tetap dengan menetapkan) adalah dengan menggunakan <<-operator, yaitu

    a <<- "new" 

di dalam fungsi.

Dirk Eddelbuettel
sumber
41
Pendekatan ini sebenarnya tidak menyelamatkan dalam lingkungan global, tetapi sebaliknya dalam lingkup induk. Kadang-kadang lingkup induk akan sama dengan lingkungan global, meskipun dalam beberapa kasus dengan banyak fungsi bersarang tidak.
LunaticSoul
5
Mengapa assignlebih disukai <<-?
Jasha
4
@Jasha <<-akan mencari rantai lampiran hingga ke lingkungan global dan menetapkan ke variabel pencocokan pertama yang ditemukannya. Hipotetis, jika Anda memiliki fungsi yang f()bersarang dalam penutupan g()dan aada di g(), maka menggunakan a <<-di f()akan menetapkan ke adalam g(), bukan ke lingkungan global. Seringkali, inilah yang Anda inginkan.
Bob
93

Saya menemukan solusi untuk cara menetapkan variabel global dalam posting milis melalui assign :

a <- "old"
test <- function () {
   assign("a", "new", envir = .GlobalEnv)
}
test()
a  # display the new value
Kristen
sumber
1
lihat juga jawaban yang diterima dari pos ini: stackoverflow.com/questions/3969852/... untuk memperbarui dataframe dalam suatu fungsi
user1420372