我编写了一个 shebang R脚本,并希望从Perl脚本执行它。我目前使用system ($my_r_script_path, $r_script_arg1, $r_script_arg2, ...)
,我的问题是如何验证R脚本是否正常终止(没有错误或警告)。
猜我应该让我的R脚本在最后返回一些真值,只要一切正常,然后在Perl中捕获这个值,但我不知道该怎么做。
谢谢!
答案 0 :(得分:4)
您可以在命令quit()
中设置返回值,例如q(status=1)
。默认值为0,另请参阅?退出。如何在Perl中捕获那个,就像捕获Perl中的任何其他返回值一样。如果我没记错的话,它会保存在特殊变量$?
中。另请参阅system
的perldoc中的示例,应该在那里进行说明。
在旁注中,我只使用R-Perl界面。您可以在此处找到信息和示例: http://www.omegahat.org/RSPerl/
为了完整性:
在脚本的开头,您可以输入类似的内容:
options(
warn=2, # This will change all warnings into errors,
# so warnings will also be handled like errors
error= quote({
sink(file="error.txt"); # save the error message in a file
dump.frames();
print(attr(last.dump,"error.message"));
sink();
q("no",status=1,FALSE) # standard way for R to end after errors
})
)
这将保存错误消息,并在不保存的情况下中断R会话,退出代码为1且不运行.Last。
尽管如此,如果你更经常这样做,R-Perl接口提供了更多可能值得一试的可能性。