Parece que hay al menos 3 cosas diferentes que puede hacer:
- Clonar un entorno (crear un duplicado exacto)
- copiar el contenido de un entorno a otro entorno
- Compartir el mismo entorno
para clonar:
# Make the source env
e1 <- new.env()
e1$foo <- 1
e1$.bar <- 2 # a hidden name
ls(e1) # only shows "foo"
# This will clone e1
e2 <- as.environment(as.list(e1, all.names=TRUE))
# Check it...
identical(e1, e2) # FALSE
e2$foo
e2$.bar
Para copiar el contenido, puede hacer lo @gsk mostraron. Pero, de nuevo, la bandera all.names
es útil:
# e1 is source env, e2 is dest env
for(n in ls(e1, all.names=TRUE)) assign(n, get(n, e1), e2)
Para compartir el medio ambiente es lo @koshke lo hicieron. Probablemente esto sea mucho más útil. El resultado es el mismo que si la creación de una función local:
f2 <- function() {
v1 <- 1
v2 <- 2
# This local function has access to v1 and v2
flocal <- function() {
print(v1)
print(v2)
}
return(flocal)
}
f1 <- f2()
f1() # prints 1 and 2
es una respuesta completa –