R imputeTS 包中 na.kalman 函数的奇怪行为

www*_*www 1 r time-series missing-data imputation imputets

我正在尝试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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我创建了一个包含 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
Run Code Online (Sandbox Code Playgroud)

看起来dat2na_kalman函数成功地估算了NA. 然而,原始向量dat也发生了变化。这是我想避免的行为。我想知道是否有办法要求na_kalman不改变原始向量。

笔记

  1. 当我将向量长度更改为一个很大的数字时,例如rnorm(1000),我注意到 中的所有缺失值都dat将更改为原始数据中的第一个非缺失值。看来dat不是简单的复制dat2afterna_kalman函数。

  2. 我还测试了imputeTS包中的其他功能,例如na_interpolationna_locfna_mean。他们没有这种行为。dat运行这些函数后仍然是相同的向量。

sta*_*007 5

imputeTS 包的作者在这里。谢谢你的电邮。

这确实不是一个功能……这是一个小错误。我直接修复了这个bug。

更新:新版本现在也在 CRAN 上进行了修复。3.0 版本已修复。如果遇到此错误,只需更新 imputeTS 包即可。

不幸的是,就在你写信给我的几个小时前,我在 CRAN 上上传了一个新的软件包版本。否则它已经包含在 2.1 更新中了。我将在本周末之前进行更新并修复错误。

如果同时需要固定版本,可以直接从github安装新版本:

library(devtools)
install_github("SteffenMoritz/imputeTS")
Run Code Online (Sandbox Code Playgroud)

对于那些感兴趣的人来说,问题是什么:

这是我通过 Rcpp 调用的 C++ 代码的问题。我忘记制作对象的深层副本。