2017-04-18 181 views
1

我正在試驗來自imputeTS包的函數。該軟件包提供了幾種函數來計算單變量時間序列數據中的缺失值。我測試了它們,它們都很棒,除了na.kalman功能。該功能改變原始數字矢量。下面是一個例子。來自R imputeTS包的na.kalman函數的奇怪行爲

# 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 

正如你所看到的,我創建了10個號碼的載體,而前5個是NA

# 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 

這似乎是dat2顯示na.kalman功能成功地估算了NA。但是,原始矢量dat也發生了變化。這是我想避免的行爲。我想知道是否有辦法要求na.kalman不要更改原始矢量。

  1. 當我改變矢量長度到一個大的數字,比如rnorm(1000),我注意到所有在dat缺少的值將在改變爲第一非缺失值原始數據。看起來好像dat不是dat2之後na.kalman函數的副本。

  2. 我還從imputeTS封裝測試的其他功能,如na.interpolationna.locfna.mean。他們沒有這種行爲。 dat在運行這些函數後仍然是相同的向量。

回答

3

作者imputeTS包在這裏。謝謝你的電郵。

這確實沒有功能......這是一個小錯誤。 我直接修復了這個bug。

不幸的是,在您寫信給我之前幾個小時,我就在CRAN上上傳了一個新的軟件包版本。否則它已經包含在2.1更新中。 我將使用本週末附帶的錯誤修正進行更新。

如果你需要一個固定的版本,同時,你可以直接從github上安裝新版本:

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

對於有興趣的那些問題是什麼:

這是用C++代碼我的問題通過Rcpp調用。 我忘了做一個對象的深層副本。