1

我正在尝试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副本。dat2na_kalman

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

4

1 回答 1

5

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

这确实没有功能......这是一个相当小的错误。我直接修复了这个错误。

更新:现在 CRAN 上也有修复的新版本。已在 3.0 版中修复。如果您遇到此错误,只需更新 imputeTS 包。

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

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

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

对于那些对问题所在感兴趣的人:

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

于 2017-04-18T22:46:45.100 回答