Локальная переменная v1
не существует , пока вы не вызовете функцию f1
, а затем среда, в которой она живет, обычно разрушается при выходе из f1
.Но вы можете получить его, если вы измените f1
:
rm(list = ls())
f1 <- function() {
v1 <- 1
environment() # return the local environment
}
f1()$v1
Для вашего второго вопроса вы присвоили e1
на f1
, а не наоборот.Так что f1
имеет среду e1
, в которой он ищет вещи.Если вы укажете родительскую среду для new.env
, вот где она продолжит искать вещи:
e1 <- new.env(parent=baseenv())
e1$foo <- 42
bar <- 43 # Global variable, not found through e1
f2 <- function() {
foo # Finds in e1
bar # Not found...
}
environment(f2) <- e1
f2() # Error: object 'bar' not found
ls(e1) # "foo"
e1$f2 <- f2
ls(e1) # "f2" "foo"