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

时间:2015-05-15 00:56:13

标签: r data.table lubridate

当我在加载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

是否有人知道a)导致此问题的原因以及b)如何防止lubridate内的这些对象被屏蔽?

更新

与上述相关的问题是我正在使用quarter包中的lubridate函数,并且在加载data.table包之后,我无法再使用quarter(Date, with_year=TRUE)包同样的方式。

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

如果我只是Date,那么我可以在没有附加年份的情况下获得所需的输出。例如,如果将quarter(Date)设置为2015年5月15日(今天),则2将产生2015.2(因为我们已经在2015年第二季度),但是我d喜欢它产生with_year = TRUE,因此paste选项的重要性。

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

2 个答案:

答案 0 :(得分:7)

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

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

library(data.table)
library(lubridate)

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

lubridate::quarter(Date, with_year = T)

另一种选择,包括少一点打字,但也许不太清楚,就是在脚本开始时将全局环境中所需的润滑功能别名化。

quarter = lubridate::quarter

稍后在脚本中使用quarter()将使用函数的lubridate版本。

答案 1 :(得分:0)

conflicted软件包提供了多种选择,并且是一种很好的做法,可以在加载库时使用它,以便在屏蔽时保持清晰。 https://github.com/r-lib/conflicted Picture from Hadley's twitter feed