2015-05-26 16 views
17

dplyr paketi kullanırken stats::lag işlevinde sorun yaşıyorum. Spesifik olarak, dplyr yüklenmesinden önce ve sonra gecikme fonksiyonundan farklı sonuçlar elde ediyorum. Örneğin, örnek bir zaman serisidir. Ben k = -1 ile lag hesaplayabilirseniz ben dplyr yüklerseniz, gecikmeli serisi, Şimdiİstatistikleri değiştirme davranışı: dplyr paketi yüklenirken gecikme

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

## [1] 1971 

1971 yılında başlar, aynı çağrı alındığında 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 

başlayan gecikmeli serisini verir dplyr yüklerken uyarılarım, bunun Ortamlar ile yapması gerektiğidir. Ancak, dplyr'u ayırmak yardımcı olmaz.

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 

Her türlü öneri çok takdir edilmektedir. Şimdiye kadar yaptığım tek çözüm, lag1 ve lag2 hesaplamaları arasındaki R oturumunu yeniden başlatmasıdır. @BondedDust önerdiği gibi ben de, unloadNamespace denedim

## 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("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 
+0

'detach' tamamen etkili olmayabilir. Genelde 'unloadNamespace' kullanıyorum. (Ama sadece denenmiş ve etkisizdi.) Öneri için –

+0

teşekkürler. Yine de "start = 1970" elde ediyorum. Ancak, yukarıdaki soruya bu seçeneği ekledik. –

+1

Evet. Katılıyorum bu şaşırtıcı. 'GetAnywhere (lag.default) 'günlerde, yüklü retruns ile: 'lag.default' eşleşen nesnelerin farklı' 2 aşağıdaki yerlerde bulundu ad dplyr ad gelen gecikme için kayıtlı S3 yöntemi: ad dplyr: kullanımlar [istatistik ] onlardan birini görüntülemek için. Görünüşe göre dplyr lag.default üzerine bir uyarı vermeyerek üzerine yazıyor. –

cevap

18

dplyr paket etkin bir 'gecikme' üzerine.Yapıyor

İşte benim oturumu var. Sevk mekanizması lag bulamıyor çünkü gerçekten bu isimde bir işlev yok, sadece lag.default'un iki kopyası, bir 'istatistik' ve bir tane 'dplyr' ve 'dplyr' kopyası önce bulunuyor. Sen ::: -mechanism kullanımı ile bulunacak istatistik sürümünü zorlayabilirsiniz:

> 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 zaman serisi özel işlevlerini kullanmaz. Ben unloadNamespace işlevin tanımını kaldırmak için başarısız açıklamak mümkün değilim ama hala orada:

> 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 

Daha acayiplik: dply -namespace boşaltma sonra bu bakın:

> environment(getAnywhere(lag.default)[1]) 
<environment: namespace:dplyr> 
> environment(getAnywhere(lag.default)[2]) 
<environment: namespace:dplyr> 
> environment(getAnywhere(lag.default)[3]) 
<environment: namespace:stats> 

(Ve Daha sonra yeniden başlatmayı ve yükleme dplyr, ben de aynı görünür çift girişine bakın)

dplyr::lag yardım sayfasındaki bir gariplik de var.

Github'a bakıyorum (CRAN'da dplyr'ın en son sürümüne sahip olduğumu belirledikten sonra), bunun R CMD check işlemi için bir sorun olduğunu görüyorum: https://github.com/hadley/dplyr/commit/f8a46e030b7b899900f2091f41071619d0a46288. Görünüşe göre lag.default gelecek sürümlerde fazla yazılmayacak, ancak lag istatistik versiyonunu maskeleyecek. lag.zoo ve lag.zooreg'a ne olduğunu merak ediyorum. Belki de paket yüklendiğinde aşırı yazma veya maskelemeyi duyuracak mı?

+0

@hadley göndermek için açıklama tesisi kullanma! Yardımlarınız için çok teşekkürler. –

+1

Bilginize, Geçenlerde 'zoo' paketi ile bu sorunu koştu. Ben sonra 'dplyr' yüklediğinizde İlginçtir,' 'lag.zoo' zoo' YOK uyarı olsa maskeli gibi görünüyor. 42 çalışması çevresinde, yani 'hayvanat bahçesi ::: lag.zoo (x, n) 'hala geçerlidir. –