当我在加载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
的输出绑定在一起来克服这一点,但我更愿意避免这种解决方法。
答案 0 :(得分:7)
当使用相同名称定义新对象时,将屏蔽程序包命名空间中的对象名称。这可以由用户完成,也可以通过附加另一个具有相同名称对象的包来完成。
data.table
和lubridate
具有重叠的函数名称。如果您希望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