2

有一个 R 函数(我们称之为 MyFunction )有时会导致 R 会话崩溃,但大多数时候它不会。必须以顺序方式将此功能应用于大量对象。

for(i in 1:nrow(objects))
{
     result[i] <- MyFunction(objects[i]);
}

我来自 C# 背景——其中函数很少会导致“会话”崩溃,程序员通常会在 try-catch 块中包围这样的函数调用。但是,在 R 中,我看到一些函数只会使会话崩溃,而使用 tryCatch 并没有帮助,因为该函数不会导致异常,而是会导致完整的会话崩溃;-)

只是想知道“捕捉”崩溃的最佳方法是什么。我正在考虑编写一个 Python 脚本,该脚本从 Python 调用 R 函数(通过其中一个 R-Python 连接器)并在 Python 中捕获 R 崩溃。那行得通吗?
有什么建议吗?

干杯!

4

2 回答 2

2

使用mcparallel并行包中的函数在分叉进程中运行该函数。这样,如果 R 崩溃了,只有子进程崩溃,并且向主进程返回错误。如果您想将此函数应用于大量对象并将结果收集到列表中,请使用mclapply

于 2013-04-07T17:43:04.440 回答
0

您好,根据我的经验,这种行为非常罕见。您可能不知道有一个调试器可以帮助您逐步完成功能。

install.packages('debug') #install the debug package
library(debug)
mtrace(myFunctionToBeDebuged) #this function will start the debuger
mtrace(myFunctionToBeDebuged, FALSE) #to stop the function to be traced

注意:当您在调试器中时,您是否想退出它qqq()

于 2013-04-07T17:49:53.077 回答