2015-10-14 93 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