描述

我正在处理一些批处理脚本,这些脚本将执行一些R脚本.我希望全局更改R错误的处理方式,以使错误以彩色显示.在这个过程中,我遇到了一个非常奇怪的错误.我使用了options()命令来更改错误的处理方式.奇怪的是,当文件来源于RStudio时,新的错误表达式会像预期的那样停止脚本的进一步执行,但当从命令提示符调用脚本时,自定义错误doesn't会停止执行.

我有以下R脚本:

# set global error options
options(error =function(){

  cat(" \033[97;101m There was an error! \033[0m\n")

})

# apples is undefined so it should return an error
print(apples)

# because the command above produces an error, this shouldn't print:
print("bananas")

当我从R内部编写脚本时,脚本会像预期的那样在print(apples)停止执行.

enter image description here

然而,当我try 在Windows命令提示符中使用R可执行文件执行脚本时,脚本并没有像它应该执行的那样在print(apples)停止执行,相反,它继续运行并执行print("bananas")

enter image description here

我认为这与自定义错误有关,因为当我将R脚本更改为使用默认的错误表达式时,命令提示符将如预期的那样在print(apples)停止执行.以下是修改后的脚本:

# set global error options
options(error = NULL)

# apples is undefined so it should return an error
print(apples)

# because the command above produces an error, this shouldn't print:
print("bananas")

And here's the result: enter image description here

问题

  1. 为什么会发生这种事?
  2. 在从命令提示符执行R脚本时,如何确保自定义错误表达式实际停止R脚本的执行?
  3. 有没有更好的方法使R错误在命令提示符窗口中以彩色显示?也许是一些相当于colorout套餐的窗口?
  4. 如果这是一个漏洞,它是谁的错误,以及关于在哪里报告它的任何 idea ?

我不想使用trycatch,因为我想全局更改所有可能的错误消息的显示 colored颜色 ,而不仅仅是特定的代码块.我希望能够从批处理脚本内部和RStudio内部运行这些R脚本,而不会因为错误而完全结束R会话,只是进一步执行脚本.


推荐答案

虽然我不知道行为为什么会改变,但我们可以参考https://adv-r.hadley.nz/debugging.html#dump.frames,以获得带有非零退出状态的q uit立即的提示.

options(error = function(){
  cat(" \033[97;101m There was an error! \033[0m\n")
  if (!interactive()) q(status = 1)
})

您还可以根据需要 Select 指定其他参数save=runLast=.

R相关问答推荐

从cv.glmnet R包中查找培训SSE

如何使用TukeyHSD绘制事后概率热图

如何将多个数据帧附加到R中的多个相应的CSV文件中?

强制相关图以显示相关矩阵图中的尾随零

是否有R函数来判断一个组中的所有值是否与另一个组中的所有值相同?

工作流程_set带有Dplyrr风格的 Select 器,用于 Select 结果和预测因子R

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

过滤器数据.基于两列的帧行和R中的外部向量

在不安装软件包的情况下测试更新

当月份额减go 当月份额

错误:非常长的R行中出现意外符号

如何在一次运行中使用count进行多列计数

如何使用STAT_SUMMARY向ggplot2中的密度图添加垂直线

在GG图中绘制射线的自动程序

在保留列表元素属性的同时替换列表元素

Geom_arcbar()中出错:找不到函数";geom_arcbar";

解析嵌套程度极高的地理数据

仅当后续值与特定值匹配时,才在列中回填Nas

有没有办法将不等长的列表转换为R中的数据帧

如何预测原始数据集并将值添加到原始数据集中