Окружающая среда - PullRequest
1 голос
/ 02 марта 2012

Я хотел бы спросить кое-что о средах R: В следующем простом коде я создаю локальную переменную "v1".«f1» лежит в глобальной среде, как мы видим, когда набираем «environment (f1)».Мой вопрос: как мы можем получить доступ к "v1" из консоли R .«v1 $ f1» не работает.Есть ли объяснение этому?

rm(list = ls())
f1 <- function() {
    v1 <- 1
}
environment(f1)

Далее, если я создаю среду "e1"

e1 <- new.env()

и я помещаю "f1" внутри "e1"

environment(f1) <- e1

Когда я использую "ls (e1)", я не получаю "f1".Кто-нибудь знает почему?

ls(e1)

Заранее спасибо

1 Ответ

3 голосов
/ 02 марта 2012

Локальная переменная 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...