2012-10-07 160 views
0

我是R新手,但我試圖使用庫中的impute.knn()來估計大型微陣列數據集中的缺失值)使用6個最近的鄰居。錯誤:在storage.mode(x)< - 「double」中:通過強制引入NAA

下面是一個例子:

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

沒有一個可重複的例子它可能是很多東西:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

你使用什麼軟件包包含' impute.knn'? – James

+4

我懷疑這個行'mat1 [2,2] < - 「NA」'是怪罪。 '「NA」'是一個字符串,嘗試使用'NA'。 – James

回答

2

我不知道爲什麼impute.knn設置事情是這樣的,但是內?impute.knn的示例使用khanmiss這是由多種因素,當其裹挾matrix將字符data.frame

由於您試圖使用K > ncol(mat1)歸因於最近的鄰居,因此您會遇到分段錯誤。報告給包作者的錯誤這可能是值得,因爲這很容易在R進行檢查,並返回一個錯誤,而不是殺死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 

儘管陌生例如C級錯誤,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) 

It really is hard to anticipate just how silly users can be. —Brian D. Ripley R-devel (October 2003)

謹慎,建立一些錯誤檢查這樣一個簡單的錯誤不會導致一個段錯誤。

+0

我在我的數據集上試過這個,但是當我嘗試通過dim(矩陣)獲取尺寸時,返回NULL。有什麼想法爲什麼? –

+0

如果你發佈你的數據,那麼我可以回答你的問題。如果你的數據被稱爲* my_data *,發佈* dput(head(my_data))的結果* – mnel

+0

我最終發佈我的問題在這裏,因爲我不能在評論中共享代碼:http://stackoverflow.com/questions/12774318 /矩陣匝數成出頭,否則,當-I-運行它,通轉嫁給-KNN –

相關問題