R imputeTS 包中 na.kalman 函数的奇怪行为
Strange behavior of the na.kalman function from the R imputeTS package
我正在试验 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
不改变原来的向量
备注
当我将向量长度更改为较大的数字时,例如rnorm(1000)
,我注意到dat
中的所有缺失值都将更改为第一个非-原始数据中的缺失值。似乎 dat
不仅仅是 dat2
在 na_kalman
函数之后的副本。
我还测试了 imputeTS
包中的其他函数,例如 na_interpolation
、na_locf
、na_mean
。他们没有这种行为。 dat
在 运行 这些函数之后仍然是相同的向量。
这里是 imputeTS 包的作者。感谢您的电子邮件。
这确实不是一个功能...它是一个小错误。
我直接修复了这个bug。
Update: New Version with fix also on CRAN now. Fixed with version 3.0. Just
update the imputeTS package, if you encounter this bug.
不幸的是,我在你写信给我的几个小时前就在 CRAN 上上传了一个新的软件包版本。否则它早就包含在 2.1 更新中了。
我将在本周末进行包含错误修复的更新。
如果同时需要固定版本,可以直接从github安装新版本:
library(devtools)
install_github("SteffenMoritz/imputeTS")
对于问题所在感兴趣的人:
这是我通过 Rcpp 调用的 C++ 代码的问题。
我忘记制作一个对象的深拷贝。
我正在试验 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
不改变原来的向量
备注
当我将向量长度更改为较大的数字时,例如
rnorm(1000)
,我注意到dat
中的所有缺失值都将更改为第一个非-原始数据中的缺失值。似乎dat
不仅仅是dat2
在na_kalman
函数之后的副本。我还测试了
imputeTS
包中的其他函数,例如na_interpolation
、na_locf
、na_mean
。他们没有这种行为。dat
在 运行 这些函数之后仍然是相同的向量。
这里是 imputeTS 包的作者。感谢您的电子邮件。
这确实不是一个功能...它是一个小错误。 我直接修复了这个bug。
Update: New Version with fix also on CRAN now. Fixed with version 3.0. Just update the imputeTS package, if you encounter this bug.
不幸的是,我在你写信给我的几个小时前就在 CRAN 上上传了一个新的软件包版本。否则它早就包含在 2.1 更新中了。 我将在本周末进行包含错误修复的更新。
如果同时需要固定版本,可以直接从github安装新版本:
library(devtools)
install_github("SteffenMoritz/imputeTS")
对于问题所在感兴趣的人:
这是我通过 Rcpp 调用的 C++ 代码的问题。 我忘记制作一个对象的深拷贝。