如何在 R 中设置错误消息的宽度?

How to set the width of an error message in R?

我知道你可以设置 R 输出的宽度

> options(width = 20)
> 1:30
 [1]  1  2  3  4  5
 [6]  6  7  8  9 10
[11] 11 12 13 14 15
[16] 16 17 18 19 20
[21] 21 22 23 24 25
[26] 26 27 28 29 30

如何将错误消息设置为宽度 20?

> options(width = 20)
> IWantMyErrorMessageToBeWidth20
Error: object 'IWantMyErrorMessageToBeWidth20' not found

这个问题对我来说很有趣,我想试着回答一下。有不对的地方还请指正

当你运行1:30时,R会在屏幕后面执行print(1:30)(或者更具体地说,print.default(1:30))。在这个函数内部调试,你会发现如果不提供一个参数width,它会直接使用options()中设置的宽度。要更改 print() 的输出,您可以更改 options() 中的宽度或编写类似 print(1:30, width=10) 的代码。因此,可以在代码中控制宽度。

然而,IWantMyErrorMessageToBeWidth20是用另一种方式处理的。我假设 R 会首先检查 IWantMyErrorMessageToBeWidth20 是否存在于内存中,发现没有对象叫 IWantMyErrorMessageToBeWidth20,然后触发 R 解释器中的内部停止函数。我想内部停止函数中没有宽度参数。

因此,我建议您听从 Allan 的建议。

如评论中所述,您可以像这样捕获错误并进行处理

tryCatch(
  IWantMyErrorMessageToBeWidth20,
  error = function(err) {
    msg <- conditionMessage(err)
    stop(substr(as.character(msg), 1, 20), call. = FALSE)
  }
)

# Error: object 'IWantMyError