加载 dplyr 包时更改 stats::lag 的行为
Changing behaviour of stats::lag when loading dplyr package
我在使用 stats::lag
功能时遇到问题
dplyr
包。具体来说,我从滞后中得到不同的结果
加载前后函数 dplyr
.
例如,这是一个示例时间序列。如果我用
k = -1
,滞后系列从 1971 年开始。
data <- ts(1:10, start = 1970, frequency = 1)
lag1 <- stats::lag(data, k = -1)
start(lag1)[1]
## [1] 1971
现在,如果我加载 dplyr
,同一个调用会产生一个滞后序列,从
1970.
library(dplyr)
##
## Attaching package: 'dplyr'
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
lag2 <- stats::lag(data, k = -1)
start(lag2)[1]
## [1] 1970
start(lag1)[1] == start(lag2)[1]
## [1] FALSE
鉴于加载时的警告 dplyr
,我的猜测是必须这样做
与环境。但是,分离 dplyr
似乎没有帮助。
detach("package:dplyr", unload = TRUE, character.only = TRUE)
lag3 <- stats::lag(data, k = -1)
start(lag3)[1]
## [1] 1970
start(lag1)[1] == start(lag3)[1]
## [1] FALSE
非常感谢任何建议。到目前为止我唯一的解决办法是
在计算 lag1
和 lag2
.
之间重新启动 R 会话
这是我的课程:
## setting value
## version R version 3.2.0 (2015-04-16)
## system i386, mingw32
## ui RTerm
## language (EN)
## collate English_Canada.1252
## tz America/New_York
##
## package * version date source
## assertthat 0.1 2013-12-06 CRAN (R 3.2.0)
## bitops 1.0-6 2013-08-17 CRAN (R 3.2.0)
## DBI 0.3.1 2014-09-24 CRAN (R 3.2.0)
## devtools 1.8.0 2015-05-09 CRAN (R 3.2.0)
## digest 0.6.8 2014-12-31 CRAN (R 3.2.0)
## dplyr 0.4.1 2015-01-14 CRAN (R 3.2.0)
## evaluate 0.7 2015-04-21 CRAN (R 3.2.0)
## formatR 1.2 2015-04-21 CRAN (R 3.2.0)
## git2r 0.10.1 2015-05-07 CRAN (R 3.2.0)
## htmltools 0.2.6 2014-09-08 CRAN (R 3.2.0)
## httr * 0.6.1 2015-01-01 CRAN (R 3.2.0)
## knitr 1.10.5 2015-05-06 CRAN (R 3.2.0)
## magrittr 1.5 2014-11-22 CRAN (R 3.2.0)
## memoise 0.2.1 2014-04-22 CRAN (R 3.2.0)
## Rcpp 0.11.6 2015-05-01 CRAN (R 3.2.0)
## RCurl 1.95-4.6 2015-04-24 CRAN (R 3.2.0)
## rmarkdown 0.6.1 2015-05-07 CRAN (R 3.2.0)
## rversions 1.0.0 2015-04-22 CRAN (R 3.2.0)
## stringi 0.4-1 2014-12-14 CRAN (R 3.2.0)
## stringr 1.0.0 2015-04-30 CRAN (R 3.2.0)
## XML 3.98-1.1 2013-06-20 CRAN (R 3.2.0)
## yaml 2.1.13 2014-06-12 CRAN (R 3.2.0)
我也试过 unloadNamespace
,正如@BondedDust 所建议的:
unloadNamespace("dplyr")
lag4 <- stats::lag(data, k = -1)
## Warning: namespace 'dplyr' is not available and has been replaced
## by .GlobalEnv when processing object 'sep'
start(lag4)[1]
## [1] 1970
start(lag1)[1] == start(lag4)[1]
## [1] FALSE
dplyr 包正在有效覆盖 'lag'。调度机制没有找到 lag
因为实际上没有那个名字的函数,只有 lag.default
的两个副本,一个在 'stats' 中,一个在 'dplyr' 中, 'dplyr' 首先找到副本。您可以使用 :::
-机制强制找到统计版本:
> lag2 <- stats::lag.default(data, k = -1)
Error: 'lag.default' is not an exported object from 'namespace:stats'
> lag2 <- stats:::lag.default(data, k = -1)
> stats::start(lag2)[1]
[1] 1971
dplyr:::lag.default
不使用时间序列特定函数。我无法解释为什么 unloadNamespace 无法删除函数的定义,但它仍然存在:
> unloadNamespace("dplyr")
> getAnywhere(lag.default)
2 differing objects matching ‘lag.default’ were found
in the following places
registered S3 method for lag from namespace dplyr
namespace:stats
Use [] to view one of them
更奇怪:卸载 dply
-命名空间后我看到了这个:
> environment(getAnywhere(lag.default)[1])
<environment: namespace:dplyr>
> environment(getAnywhere(lag.default)[2])
<environment: namespace:dplyr>
> environment(getAnywhere(lag.default)[3])
<environment: namespace:stats>
(然后重新启动并加载 dplyr,我看到了相同的明显双项。)
dplyr::lag
的帮助页面也有些奇怪:
> help(lag,pac=dplyr)
No documentation for ‘lag’ in specified packages and libraries:
you could try ‘??lag’
> help(`lag`,pac=`dplyr`)
No documentation for ‘lag’ in specified packages and libraries:
you could try ‘??lag’
> help(`lag.default`,pac=`dplyr`) # This finally succeeds!
查看 github(在确定我在 CRAN 上拥有最新版本的 dplyr 之后),我发现这是 R CMD check
进程的一个问题:https://github.com/hadley/dplyr/commit/f8a46e030b7b899900f2091f41071619d0a46288。显然 lag.default
不会在以后的版本中被覆盖,但是 lag
会屏蔽统计版本。我想知道 lag.zoo
和 lag.zooreg
会发生什么。说不定加载包的时候也会提示覆盖或者屏蔽?
我在使用 stats::lag
功能时遇到问题
dplyr
包。具体来说,我从滞后中得到不同的结果
加载前后函数 dplyr
.
例如,这是一个示例时间序列。如果我用
k = -1
,滞后系列从 1971 年开始。
data <- ts(1:10, start = 1970, frequency = 1)
lag1 <- stats::lag(data, k = -1)
start(lag1)[1]
## [1] 1971
现在,如果我加载 dplyr
,同一个调用会产生一个滞后序列,从
1970.
library(dplyr)
##
## Attaching package: 'dplyr'
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
lag2 <- stats::lag(data, k = -1)
start(lag2)[1]
## [1] 1970
start(lag1)[1] == start(lag2)[1]
## [1] FALSE
鉴于加载时的警告 dplyr
,我的猜测是必须这样做
与环境。但是,分离 dplyr
似乎没有帮助。
detach("package:dplyr", unload = TRUE, character.only = TRUE)
lag3 <- stats::lag(data, k = -1)
start(lag3)[1]
## [1] 1970
start(lag1)[1] == start(lag3)[1]
## [1] FALSE
非常感谢任何建议。到目前为止我唯一的解决办法是
在计算 lag1
和 lag2
.
这是我的课程:
## setting value
## version R version 3.2.0 (2015-04-16)
## system i386, mingw32
## ui RTerm
## language (EN)
## collate English_Canada.1252
## tz America/New_York
##
## package * version date source
## assertthat 0.1 2013-12-06 CRAN (R 3.2.0)
## bitops 1.0-6 2013-08-17 CRAN (R 3.2.0)
## DBI 0.3.1 2014-09-24 CRAN (R 3.2.0)
## devtools 1.8.0 2015-05-09 CRAN (R 3.2.0)
## digest 0.6.8 2014-12-31 CRAN (R 3.2.0)
## dplyr 0.4.1 2015-01-14 CRAN (R 3.2.0)
## evaluate 0.7 2015-04-21 CRAN (R 3.2.0)
## formatR 1.2 2015-04-21 CRAN (R 3.2.0)
## git2r 0.10.1 2015-05-07 CRAN (R 3.2.0)
## htmltools 0.2.6 2014-09-08 CRAN (R 3.2.0)
## httr * 0.6.1 2015-01-01 CRAN (R 3.2.0)
## knitr 1.10.5 2015-05-06 CRAN (R 3.2.0)
## magrittr 1.5 2014-11-22 CRAN (R 3.2.0)
## memoise 0.2.1 2014-04-22 CRAN (R 3.2.0)
## Rcpp 0.11.6 2015-05-01 CRAN (R 3.2.0)
## RCurl 1.95-4.6 2015-04-24 CRAN (R 3.2.0)
## rmarkdown 0.6.1 2015-05-07 CRAN (R 3.2.0)
## rversions 1.0.0 2015-04-22 CRAN (R 3.2.0)
## stringi 0.4-1 2014-12-14 CRAN (R 3.2.0)
## stringr 1.0.0 2015-04-30 CRAN (R 3.2.0)
## XML 3.98-1.1 2013-06-20 CRAN (R 3.2.0)
## yaml 2.1.13 2014-06-12 CRAN (R 3.2.0)
我也试过 unloadNamespace
,正如@BondedDust 所建议的:
unloadNamespace("dplyr")
lag4 <- stats::lag(data, k = -1)
## Warning: namespace 'dplyr' is not available and has been replaced
## by .GlobalEnv when processing object 'sep'
start(lag4)[1]
## [1] 1970
start(lag1)[1] == start(lag4)[1]
## [1] FALSE
dplyr 包正在有效覆盖 'lag'。调度机制没有找到 lag
因为实际上没有那个名字的函数,只有 lag.default
的两个副本,一个在 'stats' 中,一个在 'dplyr' 中, 'dplyr' 首先找到副本。您可以使用 :::
-机制强制找到统计版本:
> lag2 <- stats::lag.default(data, k = -1)
Error: 'lag.default' is not an exported object from 'namespace:stats'
> lag2 <- stats:::lag.default(data, k = -1)
> stats::start(lag2)[1]
[1] 1971
dplyr:::lag.default
不使用时间序列特定函数。我无法解释为什么 unloadNamespace 无法删除函数的定义,但它仍然存在:
> unloadNamespace("dplyr")
> getAnywhere(lag.default)
2 differing objects matching ‘lag.default’ were found
in the following places
registered S3 method for lag from namespace dplyr
namespace:stats
Use [] to view one of them
更奇怪:卸载 dply
-命名空间后我看到了这个:
> environment(getAnywhere(lag.default)[1])
<environment: namespace:dplyr>
> environment(getAnywhere(lag.default)[2])
<environment: namespace:dplyr>
> environment(getAnywhere(lag.default)[3])
<environment: namespace:stats>
(然后重新启动并加载 dplyr,我看到了相同的明显双项。)
dplyr::lag
的帮助页面也有些奇怪:
> help(lag,pac=dplyr)
No documentation for ‘lag’ in specified packages and libraries:
you could try ‘??lag’
> help(`lag`,pac=`dplyr`)
No documentation for ‘lag’ in specified packages and libraries:
you could try ‘??lag’
> help(`lag.default`,pac=`dplyr`) # This finally succeeds!
查看 github(在确定我在 CRAN 上拥有最新版本的 dplyr 之后),我发现这是 R CMD check
进程的一个问题:https://github.com/hadley/dplyr/commit/f8a46e030b7b899900f2091f41071619d0a46288。显然 lag.default
不会在以后的版本中被覆盖,但是 lag
会屏蔽统计版本。我想知道 lag.zoo
和 lag.zooreg
会发生什么。说不定加载包的时候也会提示覆盖或者屏蔽?