加载Data.Table后蒙脱的Lubridate对象

L P*_*L P 2 r lubridate data.table

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

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
Run Code Online (Sandbox Code Playgroud)

有谁知道a)导致这个问题的原因是什么?b)如何防止这些物体lubridate被掩盖?

更新:

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

具体来说,当我运行quarter(Date, with_year=TRUE)(其中Date是class = Dates的向量)时,我现在得到以下错误: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),但我宁愿避免这种解决方法.

Gre*_*gor 7

当使用相同名称定义新对象时,将屏蔽程序包命名空间中的对象名称.这可以由用户完成,也可以通过附加具有相同名称对象的另一个包来完成.

data.tablelubridate具有重叠的函数名称.如果您希望lubridate版本是默认版本,那么最简单的解决方案是首先加载data.table,然后加载lubridate---因此data.table,这些函数的版本将被"较新" lubridate版本屏蔽.

library(data.table)
library(lubridate)
Run Code Online (Sandbox Code Playgroud)

否则,解决方案是使用::(如在package::function)中完全指定要使用的函数版本,例如:

lubridate::quarter(Date, with_year = T)
Run Code Online (Sandbox Code Playgroud)

另一种选择,包括少一点打字,但也许不太清楚,将在脚本开始时在全局环境中为您想要的润滑功能添加别名.

quarter = lubridate::quarter
Run Code Online (Sandbox Code Playgroud)

quarter()稍后在脚本中的任何使用都将使用lubridate该函数的版本.