我想问一下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)
提前谢谢
答案 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"