加载后遮盖的润滑对象 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.table
和 lubridate
具有重叠的函数名称。如果您希望 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
当我在加载 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.table
和 lubridate
具有重叠的函数名称。如果您希望 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