2009-08-06 25 views
92

Ich stoße in die Handbücher, ich wollte die Community fragen: Wie können wir globale Variablen innerhalb einer Funktion setzen?Globale Variablen in R

Frage-2: In Bezug auf Plotten,

ich mehrere Diagramme in einem einzigen Blatt Plotten verwenden, und jeden von ihnen zu unterscheiden, will ich Titel für jeden von ihnen hinzuzufügen. Kann mir jemand sagen, wie ich das erreichen kann?

Antwort

119

Verwenden einen Beitrag pro Hauptfrage.

  1. Da die erste Antwort mit assign() Ihnen gezeigt hat, gibt es eine Möglichkeit, in der globalen Umgebung zuzuweisen. Eine einfachere, kürzere (aber nicht besser ... Stick mit assign) Art und Weise ist es, den <<- Operator zu verwenden, dh

    a <<- "new" 
    

    innerhalb der Funktion.

  2. Verwenden Sie für Ihre Plots main="My title here" für jedes Plot. Verwenden Sie etwas wie par(mar=c(3,3,3,1)), um genügend Abstand zu geben.

+23

Dieser Ansatz speichert tatsächlich nicht in globaler Umgebung, sondern im übergeordneten Bereich. Manchmal ist der übergeordnete Bereich derselbe wie der der globalen Umgebung, obwohl dies in einigen Fällen mit vielen verschachtelten Funktionen nicht der Fall ist. – LunaticSoul

57

Dan Goldstein bietet eine Suchmaschine für R, die Ihnen schnelle Antworten auf Fragen wie das Setzen globaler Variablen gibt. Für globale Variablen gibt es eine Lösung in einem mailinglist posting:

a <- "old" 
test <- function() { 
    assign("a", "new", envir = .GlobalEnv) 
} 
test() 
a # display the new value 
7

Warum versuchen Sie, globale Variablen innerhalb einer Funktion zu erstellen? Es ist sehr unwahrscheinlich, dass dies eine gute Idee ist und Sie sollten mehr Details darüber veröffentlichen, was Sie erreichen möchten.

+0

Ich bin sehr neu in der R-Programmierung und benutze daher globals um als Parameter zu übergeben ;-) ... Ich lerne auch Parameterübergabe und solche Sachen ... langsam aber !!! BTW, ich versuche, eine globale Variable in meiner Funktion zu setzen und ** nicht ** zu erstellen. – Alphaneo

+8

Wie wäre es, ein Objekt zu cachen, das teuer zu berechnen ist? Nike <- (! CostlyProduct ID $ == blob $ ID) Funktion (Klecks) { \t wenn { \t \t # teure Produkt \t \t assign ("costlyProduct", "x", envir = .GlobalEnv) berechnen \t} \t # tun billige Verarbeitung auf costlyProduct } Was könnte eine schönere Caching-Lösung sein, frage ich mich? – tim

+4

Werfen Sie einen Blick auf das Memoise-Paket – hadley