0

我是 R 新手,但我正在尝试使用impute.knn()来自库(估算)的 6 个最近邻来估计大型微阵列数据集中的缺失值。

这是一个例子:

seq1 <- seq(1:12)
mat1 <- matrix(seq1, 3)
mat1[2,2] <- "NA"
impute.knn(mat1, k=6)

我收到以下错误:

Error in knnimp.internal(x, k, imiss, irmiss, p, n, maxp = maxp) : 
NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(x) <- "double" : NAs introduced by coercion

我还尝试了以下方法:

impute.knn(mat1[2,2], k=6)

我收到以下错误:

Error in rep(1, p) : invalid 'times' argument

我的google-fu今天已经关闭了。关于为什么我可能会收到此错误的任何建议?

编辑:我试过

mat1[2,2] <- NA 

正如詹姆斯建议的那样,但我遇到了分段错误。使用

replace(mat1, mat1[2,2], NA) 

也无济于事。还有其他建议吗?

4

1 回答 1

4

我不确定为什么impute.knn要这样设置,但是其中的示例?impute.knn使用khanmiss了一个data.frame因素,当被强制转换matrix为字符时。

您遇到了分段错误,因为您试图用 K > ncol(mat1)最近的邻居进行估算。可能值得向包作者报告一个错误,因为这很容易被签入R并返回错误,而不是C杀死 R 的级别错误。

mat1 <- matrix(as.character(1:12), 3)
mat1[2,2] <- NA # must not be quoted for it to be a NA value
# mat1 is a 4 column matrix so
impute.knn(mat1, 1)
impute.knn(mat1, 2)
impute.knn(mat1, 3)
impute.knn(mat1, 4)
# Will all work 

笔记

尽管有一个奇怪的例子,mat1当它是整数或双精度时也会

mat1 <- matrix(1:12,3)
mat1[2,2] <- NA
impute.knn(mat1,2)

mat1 <- matrix(seq(0,1,12),3)
mat1[2,2] <- NA
impute.knn(mat1,2)

带回家留言

不要尝试使用比您拥有的更多信息来使用估算。

也许包作者应该注意

fortunes(15)

真的很难预料用户会有多愚蠢。——Brian D. Ripley R-devel(2003 年 10 月)

并内置一些错误检查,因此一个简单的错误不会导致段错误。

于 2012-10-07T23:09:58.793 回答