【发布时间】:2017-05-12 18:33:22
【问题描述】:
lubridate 和 data.table 包都有一个名为 isoweek 的函数。
当我从 dplyr 的 mutate 中调用“isoweek”时,似乎默认调用了 data.table::isoweek。例如,在此代码中,2014-12-29 的 ISOWEEK 为“0”。
require(tidyverse)
require(magrittr)
require(lubridate)
require(data.table)
DATES <-data.frame(
DATE= seq(
as.Date("2014-12-22"), as.Date("2015-02-02"), by = "week")) %>%
mutate(ISOYEAR = isoyear(DATE),
LUBRIYEAR = lubridate::isoyear(DATE),
ISOWEEK = isoweek(DATE),
LUBRIWEEK = lubridate::isoweek(DATE),
DTWEEK3 = data.table::isoweek(DATE) )
但是,当我单独调用 isoweek 时,它会调用 lubridate::isoweek。例如,这将返回“1”而不是“0”。
isoweek("2014-12-29")
吸取教训,我总是会指定我想要哪个包,但是为什么默认包会这样变化?
谢谢
【问题讨论】:
-
与函数名关联的包会根据包的加载顺序而变化。最简单的解决方案是 (i) 使用更少的冗余或重叠包,或者 (ii) 永远不要使用 library/require 加载它们,而是始终使用
::。 -
弗兰克:感谢您的回复和提示。我不明白的是,在单个会话中,我会让程序默认在我的 mutate 中使用 data.table::isoweek,但在 mutate 之外调用时使用 lubridate::isoweek
标签: r scope data.table lubridate