2017-04-18 5 views
1

Ich experimentiere mit Funktionen aus dem imputeTS Paket. Dieses Paket bietet mehrere Funktionen, um fehlende Werte in univariaten Zeitreihendaten zu imitieren. Ich habe sie getestet und sie alle großartig, außer der na.kalman Funktion. Diese Funktion ändert den ursprünglichen numerischen Vektor. Unten ist ein Beispiel.Merkwürdiges Verhalten der na.kalman-Funktion aus dem R imuteTS Paket

# Load packages 
library(imputeTS) 

# Set seeds 
set.seed(123) 

# Generate 10 random number 
dat <- rnorm(10) 

# Replace the first 10 numbers to be NA 
dat[1:5] <- NA 

# Check the numbers in dat 
dat 
[1]   NA   NA   NA   NA   NA 1.7150650 0.4609162 -1.2650612 -0.6868529 
[10] -0.4456620 

Wie Sie sehen können, habe ich einen Vektor mit 10 Zahlen, während der ersten 5 NA sind.

# Apply the na.kalman function 
dat2 <- na.kalman(dat) 

# Check the numbers in dat2 
dat2 
[1] 1.7150650 1.7150650 1.7150650 1.7150650 1.7150650 1.7150650 0.4609162 -1.2650612 -0.6868529 
[10] -0.4456620 

# Check the numbers in dat again 
dat 
    [1] 1.7150650 1.7150650 1.7150650 1.7150650 1.7150650 1.7150650 0.4609162 -1.2650612 -0.6868529 
[10] -0.4456620 

Es scheint, wie die dat2 zeigt die na.kalman Funktion erfolgreich die NA zugeschrieben. Der ursprüngliche Vektor dat wurde jedoch ebenfalls geändert. Dies ist ein Verhalten, das ich vermeiden möchte. Ich würde gerne wissen, ob es eine Möglichkeit gibt, na.kalman zu fragen, den ursprünglichen Vektor nicht zu ändern.

Hinweis

  1. Wenn ich die Vektorlänge auf eine große Anzahl, wie rnorm(1000) geändert, merke ich, dass alle fehlenden Werte in dat wird auf den ersten nicht-fehlenden Werte in der geändert werden Originale Daten. Es scheint wie dat ist nicht einfach eine Kopie von dat2 nach der na.kalman Funktion.

  2. Getestet habe ich auch andere Funktionen aus dem imputeTS Paket, wie na.interpolation, na.locf, na.mean. Sie haben dieses Verhalten nicht. dat bleibt der gleiche Vektor nach dem Ausführen dieser Funktion.

Antwort

3

Autor des imputeTS-Pakets hier. Vielen Dank für Ihre E-Mail.

Dies ist in der Tat keine Funktion ... es ist eher ein kleiner Fehler. Ich habe diesen Fehler direkt behoben.

Leider habe ich nur wenige Stunden vor dem Schreiben eine neue Paketversion auf CRAN hochgeladen. Sonst wäre es bereits im 2.1-Update enthalten. Ich werde ein Update mit dem Bugfix am Ende der Woche machen.

Wenn Sie eine feste Version mittlerweile benötigen, können Sie die neue Version direkt von Github installieren:

library(devtools) 
install_github("SteffenMoritz/imputeTS") 

Für diejenigen interessiert, was das Problem war:

Es war ein Problem mit C++ Code I Anruf über Rcpp. Ich habe vergessen, eine tiefe Kopie eines Objekts zu machen.

Verwandte Themen