加载后遮盖的润滑对象 Data.Table

Lubridate Objects Masked After Loading Data.Table

当我在加载 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 年第二季度),但我'我喜欢它产生 2015.2,因此 with_year = TRUE 选项很重要。

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

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

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")

conflicted 提供了各种替代方案,在加载库时使用它是一个很好的做法,可以在屏蔽上保持清晰。 https://github.com/r-lib/conflicted