Mentre sono d'accordo con la consulenza globale di Harlan (cioè non usare qualcosa a meno che non lo si capisce), vorrei aggiungere:
ambienti sono un fondamentale concetto in R, ed a mio avviso, estremamente utile (in altre parole: valgono la pena di capire!). Gli ambienti sono molto importanti per comprendere le problematiche relative all'ambito. Alcune cose basilari che dovresti capire in questo contesto:
search()
: ti mostrerà l'area di lavoro; gli ambienti sono elencati in ordine di priorità. L'ambiente principale è. GlobalEnv e può sempre essere referenziato come tale.
ls()
: vi mostrerà ciò che è contenuto in un ambiente
attach
/detach
: crea un nuovo ambiente per un oggetto
get
, assign
, <<-
, e <-
: si dovrebbe sapere la differenza tra queste funzioni
with
: un metodo per lavorare con un ambiente senza collegarlo.
Un altro puntatore: uno sguardo al the proto package (usato in ggplot), che utilizza per fornire ambienti eredità controllata.
Infine, vorrei sottolineare che gli ambienti sono molto simili alle liste: possono sia archiviare qualsiasi tipo di oggetto al loro interno (vedere this question). Ma a seconda del tuo caso d'uso (ad esempio vuoi occuparti di ereditarietà e priorità), una lista può essere più facile da gestire. E puoi sempre attach
un elenco come un ambiente.
Edit: Se volete vedere un esempio di proto
al lavoro in ggplot
, avere uno sguardo che la struttura di un oggetto ggplot, che è essenzialmente una lista composta in parte di ambienti:
> p <- qplot(1:10, 1:10)
> str(p)
List of 8
$ data :'data.frame': 0 obs. of 0 variables
$ layers :List of 1
..$ :proto object
.. .. $ legend : logi NA
.. .. $ inherit.aes: logi TRUE
...
> class(p$layers[[1]])
[1] "proto" "environment"
> is.environment(p$layers[[1]])
[1] TRUE
Nota come è stato costruito usando proto e come risultato contiene molti ambienti. È inoltre possibile tracciare le relazioni in questi oggetti utilizzando graph.proto
.
Questo può essere nodale ed è sicuramente oltre lo scopo di ciò che è necessario per un utente R "standard" ('install.packages' + importare dati + eseguire test statistici su' data.frame's). Ma per compiti spiacevoli, a volte penso a 'new.env' come creare un puntatore. Se volessi emulare un C 'struct', lo farei con una sequenza di' new.env' nidificati. – isomorphismes
È inoltre possibile eseguire [multi-assegnazione] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/list2env.html) con gli ambienti. (Una caratteristica presumibilmente mancante che ad esempio Pythonistas a volte si lamenta.) – isomorphismes