r - 加载 dplyr 包时更改 stats::lag 的行为

标签 r dplyr

我在使用 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 之间重新启动 R session 和 lag2 .

这是我的 session :
##  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.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 .也许它还会在加载包时宣布覆盖或屏蔽?

关于r - 加载 dplyr 包时更改 stats::lag 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30466740/

相关文章:

r - 在数据框中保留具有某些值的行并删除所有其他行 [R]

r - 按组分割数据帧并水平堆叠

r - 如果向量包含 5 个元素中的 3 个,则在 dplyr 中返回所有 IS == TRUE

r - dplyr 中基于 Shiny 输入的条件过滤器

r - 从 tidyverse 包中消除 ungroup... 消息

r - 在 R 中创建条件计数变量

r - 如何用另一个数据框中的信息替换数据框的行名称?

使用 lubridate 检索会计年度中的月份数

r - 如何在R中获得非正方形图?

r - 从数据集中仅提取第一次出现的行的有效方法是什么?