使用案例:我在RStudio中进行交互式数据分析,即我突出显示了一堆代码并点击了运行。有时,即使我的代码运行正常,也存在统计上使我的分析无效的条件。我希望在这些情况下停止代码或抛出一些非常疯狂的错误。
最小的工作示例:
stopifnot(TRUE, FALSE)
x <- 42
如果我突出显示两行并运行,42
仍会分配给x
。 那是不好的 - 我不想在stopifnot(TRUE, FALSE)
之后运行任何行(因为它们在统计上是无效的,而在编程上很好)。如果条件不满足,有没有办法完全停止代码?
答案 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并且您收到错误