在"什么是最有用的R技巧?" (这里),我读到使用环境给出"传递参考功能".这种方法有任何限制和/或陷阱吗?
另外,一般来说,使用创建环境的优缺点是什么?这是我一直困惑的事情,所以任何清晰度或参考对我都非常有帮助.
先感谢您.
Sha*_*ane 35
虽然我同意Harlan的总体建议(即除非你了解它,否则不要使用某些东西),我会补充:
环境是R 中的一个基本概念,在我看来,非常有用(换句话说:它们值得理解!).环境对于理解与范围相关的问题非常重要.在这种情况下你应该理解的一些基本的东西:
search():会告诉你工作区; 环境按优先级顺序列出.主要环境是.GlobalEnv,并且始终可以这样引用.ls():将显示环境中包含的内容attach/ detach:为对象创建新环境get,assign,<<-,和<-:你应该知道这些功能之间的差异with:一种在不附加环境的情况下处理环境的方法.另一个指针:看看该原包(在ggplot使用),其使用的环境中,以提供受控的继承.
最后,我要指出环境与列表非常相似:它们都可以在其中存储任何类型的对象(请参阅此问题).但是根据您的用例(例如,您是否要处理继承和优先级),列表可以更容易使用.而且您可以始终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
Run Code Online (Sandbox Code Playgroud)
注意它是如何使用proto构建的,因此包含许多环境.您还可以使用绘制这些对象中的关系graph.proto.