2015-10-14 97 views
2

非常基本的問題。但我無法將其應用於我的代碼。因此,尋求幫助在這裏R中的誘捕錯誤

我得到下面提到的錯誤,同時運行該R代碼

knn.pred <- knn(tdm.stack.nl_train, tdm.stack.nl_Test, tdm.cand_train, prob = TRUE) 

>  Error in knn(tdm.stack.nl_train, tdm.stack.nl_Test, tdm.cand_train, prob = TRUE) : 
>  dims of 'test' and 'train' differ. 

我想下面給出打印錯誤消息。但是我無法做到這一點。我不擅長編寫函數..請幫忙。

out <- tryCatch(when error = {print('New words seen in testing data')}) 

回答

0

你可以這樣做:

tryCatch(knn.pred <- knn(tdm.stack.nl_train, tdm.stack.nl_Test, tdm.cand_train, prob = TRUE), 
     error = function(e) { 
      stop('New words seen in testing data') 
     }) 

這顯示爲:

tryCatch(knn.pred <- knn(tdm.stack.nl_train, tdm.stack.nl_Test, tdm.cand_train, prob = TRUE), 
      error = function(e) { 
      stop('New words seen in testing data') 
      }) 

Error in value[[3L]](cond) : New words seen in testing data 
+0

非常感謝你。這工作。順便說一下,你能解釋一下這個函數(e)在這裏意味着什麼?再次感謝。 – Arun

+0

@阿倫不客氣,很高興我能幫上忙。函數(e)'位稱爲[匿名函數](http://adv-r.had.co.nz/Functional-programming.html)。參數錯誤需要一個函數,當'tryCatch'中發生錯誤時將調用該函數。既然我們希望它停止並打印出一個特定的錯誤,我們通過使用一個匿名函數來完成它。匿名函數實際上是一個正常的函數,唯一的例外是它沒有名字(因此是匿名的)。 – LyzandeR

+0

而'函數(e)'中的'e'是任意的。基本上它可以是任何你喜歡的。如果你喜歡,你可以使用'function(whatever)'。人們通常使用'e',因爲它是'error'的第一個字母。 – LyzandeR

1

這是更好,更容易使用try:

knn.pred <- try(knn(tdm.stack.nl_train, tdm.stack.nl_Test, tdm.cand_train, prob = TRUE)) 

if (inherits(knn.pred, "try-error") { # error management 
    print('New words seen in testing data') 
} 
+0

感謝這非常有用的信息。 – Arun