在“最有用的R技巧是什么?”中(here),我读到使用环境可以提供“按引用传递功能”。这种方法有任何限制和/或陷阱吗?
另外,一般而言,使用创建的环境有何利弊?这是我很长时间以来一直感到困惑的事情,因此任何澄清或引用都将对我很有帮助。
先感谢您。
最佳答案
虽然我同意Harlan的总体建议(即除非您理解,否则不要使用某些东西),但我会补充:
环境是R中的一个基本概念,在我看来,环境非常有用(换句话说:它们值得理解!)。环境对于理解与范围相关的问题非常重要。在这种情况下,您应该了解一些基本知识:
search()
:向您显示工作区;环境按优先级顺序列出。主要环境是.GlobalEnv,并且可以始终这样引用。 ls()
:向您显示环境attach
/ detach
:为对象get
,assign
,<<-
和<-
:您应该知道这些函数with
:一种无需附加环境即可使用环境的方法。 另一个指针:看看the proto package(在ggplot中使用),它使用环境提供受控继承。
最后,我要指出的是,环境与列表非常相似:它们都可以在其中存储任何类型的对象(请参见this question)。但是根据您的用例(例如,您要处理继承和优先级),列表可以更容易使用。而且,您始终可以将列表作为环境进行
attach
。编辑:如果您想在
proto
中使用ggplot
的示例,请看一下ggplot对象的结构,它实际上是部分由环境组成的列表:> p <- qplot(1:10, 1:10)
> str(p)
List of 8
$ data :'data.frame': 0 obs. of 0 variables
$ layers :List of 1
..$ :proto object
.. .. $ legend : logi NA
.. .. $ inherit.aes: logi TRUE
...
> class(p$layers[[1]])
[1] "proto" "environment"
> is.environment(p$layers[[1]])
[1] TRUE
请注意,它是如何使用proto构造的,并因此包含许多环境。您还可以使用
graph.proto
在这些对象中绘制关系。
关于r - 在什么情况下应使用new.env创建新环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267671/