如果不满足条件,则暂停R脚本(以交互方式运行)

时间:2016-02-25 21:54:40

标签: r rstudio data-analysis

使用案例:我在RStudio中进行交互式数据分析,即我突出显示了一堆代码并点击了运行。有时,即使我的代码运行正常,也存在统计上使我的分析无效的条件。我希望在这些情况下停止代码或抛出一些非常疯狂的错误。

最小的工作示例:

stopifnot(TRUE, FALSE)
x <- 42

如果我突出显示两行并运行,42仍会分配给x那是不好的 - 我不想在stopifnot(TRUE, FALSE)之后运行任何行(因为它们在统计上是无效的,而在编程上很好)。如果条件不满足,有没有办法完全停止代码?

4 个答案:

答案 0 :(得分:6)

我的解决方案是将代码括在括号中:

{
  stopifnot(TRUE, FALSE)
  x <- 42
}

答案 1 :(得分:1)

核选择将是终止会议。这将退出或重新启动Rstudio。

y <- 2
if (y ==2) quit(save="ask")
x <- 42

save="ask"选项会显示提示,并回答&#34; no&#34;将继续杀死会议。在Rstudio中进行测试,会话终止并重新启动。

更好的选择是将分析包装在具有退出策略的函数调用中

doAnalysis <- function() {

   ...

   stopifnot(TRUE, FALSE)

   ...


}
doAnalysis()

如果在此函数调用期间需要生成间歇变量,可以使用

将它们放在Global环境中
y <<- 2

答案 2 :(得分:1)

来自?options

options(error = utils::recover)

stopifnot(TRUE, FALSE)
x <- 43

以交互方式运行时,返回:

options(error = utils::recover)

stopifnot(TRUE, FALSE)

Error: FALSE is not TRUE

Enter a frame number, or 0 to exit   

1: stopifnot(TRUE, FALSE)

Selection: x <- 43
Enter an item from the menu, or 0 to exit
Selection: 

点击0后:

> x
Error: object 'x' not found
No suitable frames for recover()

请注意,这是一个相当激烈的回应(您似乎希望如此)。此外,线仍然运行,但没有效果。这意味着如果运行大量代码,可能很难找到原始错误。最好的方法是将options(error = NULL)source保留在您的脚本中。

答案 3 :(得分:0)

你的意思是;

x <- 42
if (x == 42) stop("X is 42"); x <- 43

?结果将是x == 42并且您收到错误