【问题标题】:How to make RStudio stop when meeting error or warning遇到错误或警告时如何让 RStudio 停止
【发布时间】:2019-03-07 12:24:38
【问题描述】:

当我在 R 脚本中选择几行代码并运行它时,RStudio 将“顺利”运行所有代码,即使中间部分存在一些警告和错误。因此,我不得不仔细检查“控制台”窗口,看看是否有任何红线。这真的很耗时,我可能会错过错误。当出现错误或警告时,是否有一些方法可以使运行停止?

【问题讨论】:

  • 是否可以选择使用“源”按钮而不是“运行”按钮? RStudio 的行为确实很烦人,但公平地说,大多数时候你不应该执行单个代码,而应该执行整个脚本/项目。
  • 基本上,突出显示多行并点击运行与在控制台中逐一输入相同。使用源而不是运行来运行 script 而不是 line

标签: r rstudio


【解决方案1】:

RStudio 目前通过将选定的文本粘贴到控制台来工作。它不关心它是否有错误。更好的方法是获取文本并获取它。

您可以使用获取选定的文本

selected <- rstudioapi::getSourceEditorContext()$selection[[1]]$text

如果您获取此文本而不是粘贴它,它将在第一个错误处停止。使用

source(exprs = parse(text = selected), echo = TRUE)

另一种方法是将文本复制到剪贴板,然后从那里获取。我不认为 RStudio 目前有办法做到这一点,但你可以添加一个。

此函数在 Windows 和 MacOS 上从剪贴板读取;我不确定pbpaste 在 Linux 上是否普遍可用,但那里应该有一些等价物:

readClipboard <- function() {
  if (.Platform$OS.type == "windows") 
    lines <- readLines("clipboard")
  else
    lines <- system("pbpaste", intern=TRUE)
  lines
}

此代码从剪贴板获取文本:

source(exprs = parse(text = readClipboard()), echo = TRUE)

您可以将这些操作中的任何一个作为加载项放在 RStudio 中的热键上。说明在这里:https://rstudio.github.io/rstudioaddins/

上面的建议只在出现错误时停止。如果您还想停止警告,请使用 @FransRodenburg 所说的options(warn = 2)

【讨论】:

  • 很好的答案,虽然我不明白为什么这不是 RStudio 的默认行为。
  • 错误消息不会以完全相同的格式打印。我不知道这是否可以解决。
【解决方案2】:

当您遇到错误时,您可以通过多种方式强制脚本停止:

  1. 保存您的脚本并使用source(yourscript.R) 运行它;
  2. 将您的脚本包装在一个函数中并尝试使用该函数;
  3. 在 Rmarkdown 文件中工作并尝试执行包含您要运行的所有代码的块(或尝试编织);

如果您真的想在出现警告时停止脚本,您可以通过在脚本开头使用options(warn = 2) 将警告强制为错误。如果您只是想摆脱红色 (lol),您还可以使用 suppressWarnings() 抑制已经检查过的无害警告,或者使用 options(warn = -1) 抑制脚本的所有警告。

但在已保存脚本之外使用options() 时要小心,以免忘记已全局禁用警告,或将它们变成错误。

根据脚本的大小,您可能还只想使用 CTRL+Enter 一点一点地运行它,而不是选择行。

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 2011-05-27
    • 2021-10-19
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多