【问题标题】:Meaning of objects being masked by the global environment被全局环境掩盖的对象的含义
【发布时间】:2014-07-11 22:07:46
【问题描述】:

当我将包加载到全局环境中时,我收到以下消息

> library(saber)

Attaching package: ‘saber’

The following objects are masked _by_ ‘.GlobalEnv’:

    load.schedule, teamStats

我不知道这意味着什么,也不知道我是否应该担心它。

为什么会发送此消息,它的含义是什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    这意味着您的全局环境中存在与您的包中(导出的)事物同名的对象(通常是函数)。键入 search() 以查看 R 解析名称的顺序。

    解决办法是,

    1. 不要在全局环境中创建具有这些名称的对象
    2. 将包中的对象重命名为不太可能产生冲突的名称,或重新考虑导出它们的决定,或
    3. 请记住,您必须始终将这些对象称为saber::teamStats

    可能 (2) 是最好的,除非导致该消息的情况确实不寻常。

    【讨论】:

      【解决方案2】:

      对于这个特殊案例,我认为还没有完全回答第三个隐含的问题。在您自己的函数的早期版本卡在全局环境中并屏蔽您尝试测试的新版本的情况下,如何解决它?

      在这种情况下,用每个 rev 重命名函数是不切实际的。我有同样的情况,发现在重新启动 R 之前删除工作目录中的 .Rdata 文件解决了这个问题。

      这在我组装包裹的数百次中只发生过两次。我仍然不确定这些函数是如何偶尔陷入全局的。

      【讨论】:

        【解决方案3】:

        这意味着您的工作区以及正在加载的库中有名为load.scheduleteamStats 的对象。它警告您,当您调用 load.schedule 时,它将使用您工作区中的那个(因为它在搜索路径中是第一个),而不是您附加的那个。举个例子

        ddply <- function(x) x + 1
        library(plyr)
        
        # Attaching package: ‘plyr’
        # 
        # The following object is masked _by_ ‘.GlobalEnv’:
        # 
        #     ddply
        
        ddply(3) # the one we just defined is used, as global env is first in the search path
        #[1] 4
        

        【讨论】:

          【解决方案4】:

          上面的答案给出了低层次的原因。

          我只是认为指出当我在 RStudio 中打开一个项目并加载该项目的“相同”库时收到该消息会很有用。

          根据上面的解释,这样做显然会产生某种冲突。

          【讨论】:

            【解决方案5】:

            原因是你在Rconsole中使用了以上两个变量作为局部变量。由于它是全局变量,如果不需要,您需要清理现有项目,否则重命名局部变量

            就我而言:

            我将时间序列声明为气体。后来在调用预测包期间我遇到了同样的错误,我重命名了库并使用了包

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-12-16
              • 2018-12-23
              • 2018-10-27
              • 1970-01-01
              • 2019-05-21
              • 1970-01-01
              • 2023-03-23
              • 1970-01-01
              相关资源
              最近更新 更多