2014-04-27 18 views
2

这是一个后续到这样一个问题:R CMD BATCH or Rscript with stop on error为什么R CMD BATCH中的行为对于选项(error = utils :: dump.frames)有所不同?

如果我.Rprofile我有

options(error = utils::dump.frames) 

那么R CMD批量不能停止错误。

如果我在含有以下内容的文件运行R CMD BATCH

stop("I really mean stop!") 
cat("no, I dont want this printed") 

cat命令仍在执行。

但是当我在该文件上做source时,R停止。为什么这是真的,我如何使行为一致?

+0

你是从RStudio还是R shell安装了'.Rprofile'的错误处理程序的“源代码”? –

回答

1

1.关于你的问题的第一部分:

?dump.frames说:

“如果dump.frames安装为错误处理程序,将继续执行,即使在非交互式会话。查看示例以了解如何转储然后退出。“

这就是为什么R CMD BATCH不会因错误而停止。

如果你想停止执行过再使用(从帮助上面的例子上当受骗!):

## A possible setting for non-interactive sessions 
options(error = quote({dump.frames(to.file = TRUE); q(status = 1)})) 

2.关于你问题的第二部分(与stop代码示例):

我想你的dump.frames错误处理程序也是有效的,因为将它输入到你的.Rprofile中,因此代码执行继续,因为上面解释的原因。

3为什么R在采购相同代码时立即停止?

对不起,不知道(所以我的答案现在reamins不全)

4.如何让我的行为是一致的?

通过使用上述1.)的错误处理程序,代码将始终停止以防万一发生错误。

+0

谢谢澄清。如果您将来遇到问题,我仍然对第3题感兴趣。 –

+0

如何使用上面的示例代码来源文件?使用RStudio(“源”按钮或通过控制台命令?)或使用启动脚本的RScript ...?我认为停止意味着停止,并且意外的行为是当R由于错误而不停止时(这可能是由通过'options(error = ...')设置的错误处理程序引起的)。添加一行'getOption(“error” )'在源文件的开始部分查看活动的错误处理程序使用Ubuntu 14.04和RStudio,当我通过控制台命令按源码按钮或源码时,脚本停在'stop' –

+0

我只是从终端输入源码,我用R在Ubuntu的gnome-terminal。感谢您持续的洞察力。 –

相关问题