2013-03-15 160 views
0

我有一个循环内的函数,我希望循环在出现错误时继续。 我曾尝试:错误循环的继续

for (num in 1:20) { 
    tryCatch(fnABC(num),error=0) 
} 

但循环停止的错误,我得到一个消息:

错误tryCatchOne(表达式,名称,parentenv,处理程序[1L]):
尝试应用非功能

我会很高兴知道我做错了什么。

+0

我可以问一下,根据'tryCatch'说明的文档以及例子,你的理由是为了设置'error = 0'吗? – joran 2013-03-15 18:23:01

+0

感谢您的指导。从文档我尝试tryCatch.W.E(fnABC(num)),这似乎是工作。 – 2013-03-15 18:58:39

回答

1

您可以使用“试试看”的功能来完成你的任务:

for (num in 1:20) { 
    try({ 
     fnABC(num) 
    }, silent=T) 
} 
+0

非常感谢您的帮助。 – 2013-03-17 16:00:12

2

TryCatch的错误参数应该是一个函数,尽管与@joran不同,我无法在帮助页面的任何详细信息部分看到这一点。很明显,但是,从第4个例子(如果你在心灵的从错误信息的正确框架。)

+0

我指的是这样的:“如果找到一个处理程序,那么...处理程序将以条件作为其参数被调用,并且处理程序返回的结果将作为tryCatch调用的值返回。”但也许这有点不透明。 – joran 2013-03-15 18:55:03

+0

这是给我的。我怀疑我的抽象程度介于你和@adam.888之间。 – 2013-03-15 18:57:52

+0

非常感谢您指出这一点。 – 2013-03-17 16:01:32

0
for (num in 1:20) { 
tryCatch(fnABC(num),error = function(e) {error=0 }) 
}