2012-04-23 12 views
6

Estoy un poco confundido por el mecanismo de búsqueda de R. Cuando tengo el siguiente códigoR: búsqueda de entorno

# 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 

entonces yo esperaría para conseguir "2" si miro para "x" en el entorno e3. Esto funciona si hago

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

pero no si uso

> e3[["x"]] 
NULL 

Podría alguien explicar la diferencia? Parece, que

e3[["x"]] 

no es simplemente azúcar sintáctica para

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


Gracias de antemano,
Sven

Respuesta

9

Estas funciones son diferentes.

get realiza una búsqueda de un objeto en un environemnt, así como los marcos de cerramiento (por defecto):

Desde ?get:

Esta función comprueba si el nombre x tiene un valor vinculado a ella en el entorno especificado. Si inherits es TRUE y no se encuentra un valor para x en el entorno especificado, los marcos adjuntos del entorno se buscan hasta que se encuentre el nombre x. Consulte el entorno y el manual 'Definición de idioma R' para obtener detalles sobre la estructura de los entornos y sus recintos.

Por el contrario, el operador [ no busca entornos adjuntos, de manera predeterminada.

De ?'[':

Tanto $ y [[se puede aplicar a entornos. Solo se permiten índices de caracteres y no se realiza ninguna coincidencia parcial. La semántica de estas operaciones es la de get(i, env=x, inherits=FALSE).

+0

Muchas gracias –

Cuestiones relacionadas