r - 在什么情况下应使用new.env创建新环境?

标签 r

在“最有用的R技巧是什么?”中(here),我读到使用环境可以提供“按引用传递功能”。这种方法有任何限制和/或陷阱吗?

另外,一般而言,使用创建的环境有何利弊?这是我很长时间以来一直感到困惑的事情,因此任何澄清或引用都将对我很有帮助。

先感谢您。

最佳答案

虽然我同意Harlan的总体建议(即除非您理解,否则不要使用某些东西),但我会补充:

环境是R中的一个基本概念,在我看来,环境非常有用(换句话说:它们值得理解!)。环境对于理解与范围相关的问题非常重要。在这种情况下,您应该了解一些基本知识:

  • search():向您显示工作区;环境按优先级顺序列出。主要环境是.GlobalEnv,并且可以始终这样引用。
  • ls():向您显示环境
  • 中包含的内容
  • attach / detach:为对象
  • 创建新环境
  • getassign<<-<-:您应该知道这些函数
  • 之间的区别
  • 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/

    相关文章:

    r - 解决约瑟夫斯排列

    r - 在 R 中堆叠具有相似名称的列

    r - 将原始字节作为 R 中的原始字节导入

    r - R代码调试和纠错理解

    r - 按名称添加两个向量

    r - 为 Mac 创建 R 的可移植版本(并为此版本从源安装包)

    r - 在插入符号中拟合无截距模型

    r - 更新包并防止它恢复到原始状态

    r - 在基本 R 图形中,是否可以找到添加的矩形的精确位置?

    r - R 中的词干提取