最近几个月,我发现在安装了R-Studio的Windows和unix R上都会出现非常烦人的行为。
发生错误后,R会自动执行它在产生错误的行后面找到的每个代码(此处:“意外符号”)。这是一个示例代码
vec1 <- c("Hallo", "World"
vec2 <- c(1,2,3)
print(vec2)
print(vec1)
在第一行:
vec1 <- c("Hallo", "World"
R缺少结束“)”。在错误地初始化之后,会发生这种情况:
vec1 <- c("Hallo", "World"
+
+ vec2 <- c(1,2,3)
Error: unexpected symbol in:
"
vec2"
>
> print(vec2)
Error in print(vec2) : object 'vec2' not found
>
> print(vec1)
Error in print(vec1) : object 'vec1' not found
>
R显然确实试图寻找一个结束括号,找到一个,给出预期的“意外符号” - 错误,但不是停止它,而是尝试执行下一行(以及其他所有后续行)。 这个R-或R-Studio是否相关,我该如何阻止它呢?
编辑: 我应该根据评论澄清问题所在。我不打算这种行为,也不打算在我的代码中包含错误的行!
有时只会忘记添加括号,逗号等等,但仍然会初始化这样一行。然后 - 至少对我来说 - R有这种非常烦人的行为然后贯穿整个代码。这是一个真实的例子:
稍后在相同的情况下,模型对象被写了,这非常烦人。
所以再一次,我不想让你纠正代码,我想知道为什么R表现得如同被摧毁以及如何阻止它。
答案 0 :(得分:3)
听起来你期待R在发现错误时停止。毕竟,这就是像C和Java这样的传统编译语言。但R不是编译语言。每行代码按顺序解释。这是R的固有部分,与RStudio没有任何关系。在你的例子中,R很难找出对c()
的调用结束的位置,因为你错过了右括号。
我发现一个RStudio功能可以防止这种特定类型的错误,它是自动格式化程序(CTRL-SHIFT-A)。格式化您提供的代码示例时,很明显,当您查看缩进时,某些内容不正确。
代码从此更改......
vec1 <- c("Hallo", "World"
vec2 <- c(1, 2, 3)
print(vec2)
print(vec1)
对此..
vec1 <- c("Hallo", "World"
vec2 <- c(1, 2, 3)
print(vec2)
print(vec1)
底部的三行向右缩进的事实让我警告我可能错过了一个右括号。
如果您的问题是关于更广泛的错误处理,您通常可以使用函数来防止R在遇到错误时继续。这不适用于你的例子,因为括号是错误的,但它给出了一个更广泛的问题的答案,即何时可以让R在遇到问题时停止。
让我们生成错误。
stop("This is an error")
print("The code keeps running!")
注意错误后第二行是如何运行的。现在让我们将该代码包装在一个函数中。
demo_function <- function() {
stop("This is an error")
print("The code keeps running!")
}
demo_function()
该函数抛出错误并停止执行。
出于这个原因,将高风险代码置于函数内是个好主意。使用您提供的示例,只要您尝试定义函数,R就会抛出错误,这可能会帮助您在开发过程的早期捕获错误。
答案 1 :(得分:0)
您必须在语法中添加一些逗号(',')和一些括号,请尝试:
> vec1 <- c("Hello", "World")
> vec2 <- c(1,2,3)
> print(vec2)
> print(vec1)
它应该有用。
答案 2 :(得分:0)
根据R-Studio的客户支持,此行为与R-Studio相关,可以通过在全局选项 - >全局选项下取消“执行语句中的所有行”来停止。编辑 - &gt;执行。抱歉打扰。