2009-08-06 7 views
92

Sto frugando nei manuali, volevo chiedere alla comunità: Come possiamo impostare le variabili globali all'interno di una funzione?Variabili globali in R

Domanda-2: Per quanto riguarda plotting,

Sto usando tracciando grafici multipli in un unico foglio, e per differenziare ognuno di loro, voglio aggiungere titolo per ognuno di loro. Qualcuno può dirmi come posso ottenere questo?

risposta

119

Utilizzare un post per ogni domanda principale.

  1. Come la prima risposta con assign() vi ha mostrato, c'è un modo per assegnare nel contesto globale. Un semplice, più breve (ma non meglio ... bastone con assegnazione) modo è quello di usare l'operatore <<-, cioè

    a <<- "new" 
    

    all'interno della funzione.

  2. Per i grafici, utilizzare main="My title here" per ciascun grafico. Usa qualcosa come par(mar=c(3,3,3,1)) per dare spazio sufficiente.

+23

Questo approccio non viene effettivamente salvato nell'ambiente globale, ma nell'ambito genitore. A volte l'ambito genitore sarà lo stesso dell'ambiente globale, anche se in alcuni casi con molte funzioni annidate non lo farà. – LunaticSoul

57

Dan Goldstein fornisce un motore di ricerca per R che offre risposte veloci a domande come l'impostazione di variabili globali. Per le variabili globali c'è una soluzione in un mailinglist posting:

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

Perché stai cercando di creare variabili globali da una funzione? È molto improbabile che questa sia una buona idea e dovresti pubblicare maggiori dettagli su ciò che stai cercando di ottenere.

+0

Sono molto nuovo alla programmazione R, e quindi uso globali per passare come parametri ;-) ... Sto imparando anche il passaggio dei parametri e cose del genere ... lentamente però !!! BTW, sto provando ad impostare una variabile globale all'interno della mia funzione, e ** non ** a crearla. – Alphaneo

+8

Che dire di voler memorizzare nella cache un oggetto che è costoso da calcolare? nike <- (! CostlyProduct $ ID == blob $ ID) Funzione (blob) { \t se { \t \t # calcolare prodotto costoso \t \t assegnare ("costlyProduct", "x", envir = .GlobalEnv) \t} \t # fare l'elaborazione a buon mercato su costlyProduct } Cosa potrebbe una soluzione di caching più bello essere, mi chiedo? – tim

+4

Dai un'occhiata al pacchetto di appunti – hadley