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

加载dplyr包时更改stats::lag的行为,r,dplyr,R,Dplyr,使用时,我在使用stats::lag函数时遇到问题 dplyrpackage。具体来说,我从滞后中得到了不同的结果 加载前后的函数dplyr 例如,下面是一个时间序列示例。如果我用 k=-1,滞后序列始于1971年 data <- ts(1:10, start = 1970, frequency = 1) lag1 <- stats::lag(data, k = -1) start(lag1)[1] ## [1] 1971 鉴于加载dplyr时出现的警告,我猜这是必须的 与环境有

使用时,我在使用
stats::lag
函数时遇到问题
dplyr
package。具体来说,我从滞后中得到了不同的结果 加载前后的函数
dplyr

例如,下面是一个时间序列示例。如果我用
k=-1
,滞后序列始于1971年

data <- ts(1:10, start = 1970, frequency = 1)
lag1 <- stats::lag(data, k = -1)
start(lag1)[1]

## [1] 1971
鉴于加载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
正如@bondedust建议的那样,我还尝试了
unloadNamespace

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
unloadNamespace(“dplyr”)

lag4dplyr包有效地覆盖了“lag”。调度机制没有找到
lag
,因为实际上没有该名称的函数,只有两个
lag的副本。默认值为
,一个在“stats”中,一个在“dplyr”中,首先找到的是“dplyr”副本。您可以使用
::
-机制强制查找stats版本:

> 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
更奇怪的是:在卸载
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>

查看github(在确定我在CRAN上有最新版本的dplyr之后),我发现这是
R CMD check
过程的一个问题:。显然,
lag。默认值
不会在将来的版本中被过度写入,但是
lag
会屏蔽统计数据版本。我想知道
lag.zoo
lag.zooreg
会发生什么。也许它还将宣布在加载包时过度写入或屏蔽?

detach
可能不会完全有效。我通常使用
unloadNamespace
。(但我只是尝试了一下,结果无效。)谢谢你的建议。不过我还是得到了
start=1970
。但是,我在上面的问题中添加了这个选项。是的。我同意这是令人费解的
getAnywhere(lag.default)
使用dply加载的retruns:
2个不同的对象与'lag.default'匹配,它们位于以下位置:从命名空间dplyr namespace为lag注册S3方法:dplyr namespace:stats使用[]查看其中一个
。似乎dplyr正在覆盖lag.default an并没有给出警告。使用注释工具将消息发送到@Hadley,这样做了!非常感谢您的帮助。仅供参考,我最近在
zoo
软件包中遇到了这个问题。有趣的是,当我在
zoo
之后加载
dplyr
时,
lag.zoo
似乎被屏蔽了,尽管没有警告。42-的变通方法仍然有效,即
zoo:::lag.zoo(x,n)
> 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
> 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
> environment(getAnywhere(lag.default)[1])
<environment: namespace:dplyr>
> environment(getAnywhere(lag.default)[2])
<environment: namespace:dplyr>
> environment(getAnywhere(lag.default)[3])
<environment: namespace:stats>
> 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!