0

私はRを初めて使用しますがimpute.knn()、6つの最近傍を使用してfrom library(impute)を使用して、大規模なマイクロアレイデータセットの欠損値を推定しようとしています。

次に例を示します。

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なぜこのように設定されているのかはわかりませんが、 の例では要因の 1 つを?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 

ノート

奇妙な例にもかかわらず、mat1integerまたはdoubleの場合も同様です

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 に答える