我是R的新手,但我正在尝试使用来自库(impute)的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)
也没有帮助。还有其他建议吗?
答案 0 :(得分:2)
我不确定为什么impute.knn
的设置方式如此,但?impute.knn
中的示例使用的khanmiss
是data.frame
个因素,强迫matrix
时会成为角色。
您遇到了分段错误,因为您试图使用K > ncol(mat1)
最近邻居进行估算。可能值得报告包作者的错误,因为可以在R
中轻松检查并返回错误,而不是导致R杀死的C
级错误。
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月)
并构建一些错误检查,因此一个简单的错误不会导致段错误。