2012-04-23 9 views
6

Sono un po 'confuso dal meccanismo di ricerca di R. Quando ho il seguente codiceR: ricerca ambiente

# create chain of empty environments 
e1 <- new.env() 
e2 <- new.env(parent=e1) 
e3 <- new.env(parent=e2) 

# set key/value pairs 
e1[["x"]] <- 1 
e2[["x"]] <- 2 

quindi mi aspetto di ottenere "2" se guardo per "x" in ambiente e3. Questo funziona se faccio

> get(x="x", envir=e3) 
[1] 2 

ma non se uso

> e3[["x"]] 
NULL 

Qualcuno potrebbe spiegare la differenza? Sembra, che

e3[["x"]] 

non è lo zucchero sintattico per

get(x="x", envir=e3) 


Grazie in anticipo,
Sven

risposta

9

Queste funzioni sono diverse.

get esegui una ricerca di un oggetto in un environemnt, così come le cornici di cinta (per impostazione predefinita):

Da ?get:

Questa funzione cerca di vedere se il nome x ha un valore associato ad esso nell'ambiente specificato. Se inherits è TRUE e non si trova un valore per x nell'ambiente specificato, vengono cercati i frame che racchiudono l'ambiente finché non viene rilevato il nome x. Consultare l'ambiente e il manuale 'Definizione del linguaggio R' per i dettagli sulla struttura degli ambienti e dei relativi allegati.

Al contrario, l'operatore [ non esegue la ricerca negli ambienti che lo contengono, per impostazione predefinita.

Da ?'[':

Sia $ e [[può essere applicato ad ambienti. Sono consentiti solo indici di caratteri e non viene eseguita alcuna corrispondenza parziale. La semantica di queste operazioni è quella di get(i, env=x, inherits=FALSE).

+0

Grazie mille –

Problemi correlati