如果功能失败,请重新执行(R)

时间:2018-11-06 13:24:32

标签: r

我有一个函数f,该函数f是一个95%的for循环巨人(该函数的具体细节无关紧要)。该功能正常运行时,有时会停止运行(由于各种原因)。由于f的设计,当重新执行f时,它会从中断点重新启动并继续正常工作,直到完成或停止并必须重新启动。显然,第一种方法是“定位并修复错误”,这将在某个时候完成。但是,与此同时,该功能必须产生结果。我的问题是,有没有办法自动重新执行它?

例如(伪代码)

execute(f)

if(f fails){

execute(f)

} else {}

当f最终完成时,我们继续进行代码的另一部分。

所以我的问题是,这可行吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

只需使用it('should compile partial as per the context', () => { const receivedOutput = someFunctionReturningHTMLString(); const newNode = document.createElement('div'); newNode.innerHTML(receivedOutput); // Assuming your output is `<a href="/" class="some_class1 some_class2" >` const link = newNode.querySelector('a'); // Test the attributes that matter to you as normal HTML expect(link.getAttribute('class')).toBe('some_class1 some_class2') expect(link.getAttribute('href')).toBe('/') }); 。它是标准的R函数,将表达式作为参数,如果表达式正确运行,则返回表达式返回的值;如果发生错误,则返回类try的对象。例如:

try-error

如您所见,您可以将表达式括在a<-try(2+2) a #[1] 4 class(a) #[1] "numeric" a<-try(2+"") class(a) #[1] "try-error" 中,然后检查返回的对象是否继承自try并决定在两种情况下的处理方式。就您而言,您可以:

try-error

以上,我尝试进行repeat { tmp<-try(execute(f)) if (!(inherits(tmp,"try-error"))) break } 。如果运行正确,则退出循环。如果没有,它将继续尝试。