错误:在storage.mode(x)< - “double”:由强制引入的NA

时间:2012-10-07 18:49:23

标签: r

我是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) 

也没有帮助。还有其他建议吗?

1 个答案:

答案 0 :(得分:2)

我不确定为什么impute.knn的设置方式如此,但?impute.knn中的示例使用的khanmissdata.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月)

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