5

这是一个基本的 R 问题:R 有环境的概念。那么它有什么目的,我什么时候需要开始一个以上的,我如何在它们之间切换?多个环境的优势是什么(除了查找 .Rdata 文件的内容)?

4

3 回答 3

8

环境的概念很重要,你一直在使用它们,但大多是在没有意识到的情况下。如果您只是使用 R 而没有做任何花哨的事情,那么您只需要间接使用环境,并且您不需要显式创建和操作环境。只有当您进入更高级的用法时,您才需要了解更多。您(间接)使用环境的主要地方是每个函数都有自己的环境,因此每次运行函数时,您都在使用新的环境。为什么这很重要,因为这意味着如果函数使用名为“x”的变量,并且您有一个名为“x”的变量,那么计算机可以保持它们正常并在需要时使用正确的变量以及您的“x”副本" 不会被函数版本覆盖。

您可能会使用环境的其他一些情况:每个包都有自己的环境,因此两个包都可以使用相同的内部函数名称加载,并且它们不会相互干扰。您可以通过附加一个新环境并将函数定义加载到该环境而不是全局或工作环境中来使您的工作空间更加干净。当您编写自己的函数并希望在函数之间共享变量时,您将需要了解环境。如果您曾经遇到过重要的情况(如果您不认识这些短语,那么它可能无关紧要),Environmets 可用于模拟传递引用而不是传递值。

于 2012-10-26T19:32:21.470 回答
6

You can think of environments as unordered lists. Both datatypes offer something like the hash table data structure to the user, i.e., a mapping from names to values. The lack of ordering in environments offers better performance when compared with lists on similar tasks.

The access functions [[ and $ work for both.

A nice fact about environments which is not true for lists is that environments pass by reference when supplied as function arguments, offering a way to improve performance when working large objects.

于 2012-10-26T18:59:36.010 回答
4

就个人而言,我从不直接与环境打交道。相反,我将脚本划分为函数。这导致增加的可重用性和更多的结构。此外,每个函数都在自己的环境中运行,确保对变量等的干扰最小。

于 2012-10-26T18:42:03.987 回答