R的环境

时间:2012-03-02 00:01:50

标签: r

我想问一下R的环境: 在下一个简单的代码中,我创建了局部变量“v1”。 “f1”位于全球环境中,正如我们在输入“环境(f1)”时所看到的那样。 我的问题是我们如何从R控制台中访问“v1” 。 “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 个答案:

答案 0 :(得分:3)

本地变量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"