【问题标题】:Lubridate Objects Masked After Loading Data.Table润滑加载 Data.Table 后被屏蔽的对象
【发布时间】:2015-05-15 00:56:13
【问题描述】:

当我在加载 lubridate 包后加载 data.table 包时,我收到以下错误消息:

Loading required package: data.table
data.table 1.9.4 For help type: ?data.table
*** NB: by=.EACHI is now explicit. See README to restore previous behaviour.

Attaching package: ‘data.table’

The following objects are masked from ‘package:lubridate’:

hour, mday, month, quarter, wday, week, yday, year

有谁知道a) 是什么导致了这个问题,b) 如何防止lubridate 中的这些对象被屏蔽?

更新

与上述相关的问题是我正在使用lubridate 包中的quarter 函数,并且在加载data.table 包后,我不能再以同样的方式这样做。

具体来说,当我运行 quarter(Date, with_year=TRUE)(其中 Date 是 class= 日期的向量)时,我现在收到以下错误:Error in quarter(Date, with_year = TRUE) : unused argument (with_year = TRUE)

如果我简单地说,quarter(Date),那么我可以在没有附加年份的情况下获得所需的输出。例如,如果 Date 设置为 2015 年 5 月 15 日(今天),那么 quarter(Date) 将产生 2(因为我们处于 2015 年第二季度),但我希望它产生 @ 987654335@,因此with_year = TRUE 选项的重要性。

显然,我可以通过使用paste 将年份和quarter(Date) 的输出绑定在一起来克服这个问题,但我更愿意避免这种变通方法。

【问题讨论】:

  • 你应该解释为什么这是一个问题。屏蔽通常意味着包提供了更多功能,而不是更少。
  • @BondedDust 但有时,您会获得不同的功能。这种情况会导致问题。
  • 对.... 有时会出现问题。 ...但是哪些问题....我们需要特异性。究竟是什么问题?我猜这只是一个不知道掩蔽做什么并且没有对术语进行研究的用户。你有更好的理论吗?随时发布答案。我编辑了标签以删除对任一特定包的特异性,因为它对所有 R 包都是通用的。当你在它的时候解释命名空间。
  • 我的近距离投票是因为缺乏明确性,但我可以想象其他投票是“为什么这段代码不起作用”......尽管实际上没有什么不起作用。
  • 感谢 cmets。我已经编辑了我原来的问题,以反映为什么我不希望这种情况发生。让我知道是否还有歧义。

标签: r data.table lubridate


【解决方案1】:

当使用相同名称定义新对象时,包命名空间中的对象名称将被屏蔽。这可以通过用户分配名称来完成,或者通过附加另一个具有相同名称的对象的包来完成。

data.tablelubridate 具有重叠的函数名称。如果您希望lubridate 版本成为默认值,那么最简单的解决方案是先加载data.table,然后再加载lubridate---因此这些函数的data.table 版本将被“更新”lubridate 版本。

library(data.table)
library(lubridate)

否则,解决方法是使用::(如package::function)来完全指定要使用哪个版本的功能,例如:

lubridate::quarter(Date, with_year = T)

另一种选择是在脚本开始时在全局环境中为您想要的 lubridate 函数添加别名,该选项涉及更少的输入,但也可能不太清晰。

quarter = lubridate::quarter

脚本后面对quarter() 的任何使用都将使用函数的lubridate 版本。

另一个选项是conflicted 包,它提供了一个系统,可以从一个包中选择一个功能。它有点强烈和有意,你一定要在使用它之前阅读文档,但你的脚本可能包含这样的内容:

library(conflicted)
conflict_prefer("quarter", "lubridate")

【讨论】:

  • 完美。感谢您的回答。
【解决方案2】:

conflicted 包提供了各种替代方案,在加载库时使用它是一种很好的做法,以便清楚地了解掩码。 https://github.com/r-lib/conflicted

【讨论】:

    猜你喜欢
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多