这些错误意味着您尝试运行或源代码的 R 代码在语法上不正确。也就是说,你有一个错字。
要解决此问题,请仔细阅读错误消息。错误消息中提供的代码显示了 R 认为问题出在哪里。在您的原始代码中找到该行,并查找错字。
预防措施,防止您再次出现错误
避免语法错误的最佳方法是编写时尚的代码。这样,当您输入错误时,问题将更容易被发现。 SO R tag info 页面链接了许多 R 风格指南。您还可以使用formatR 包自动将您的代码格式化为更易读的内容。在 RStudio 中,键盘快捷键 CTRL + SHIFT + A 将重新格式化您的代码。
考虑使用 IDE 或文本编辑器来突出显示匹配的括号和大括号,并以不同颜色显示字符串和数字。
产生这些错误的常见语法错误
括号、大括号或方括号不匹配
如果您有嵌套的圆括号、大括号或方括号,则很容易将它们关闭太多或太少。
{}}
## Error: unexpected '}' in "{}}"
{{}} # OK
缺失 * 在做乘法时
这是数学家常犯的错误。
5x
Error: unexpected symbol in "5x"
5*x # OK
不在括号中包装 if、for 或 return 值
这是 MATLAB 用户的常见错误。在R中,if、for、return等都是函数,所以需要将它们的内容用括号括起来。
if x > 0 {}
## Error: unexpected symbol in "if x"
if(x > 0) {} # OK
代码不使用多行
试图在一行上编写多个表达式,而不用分号分隔它们会导致 R 失败,并且使您的代码更难阅读。
x + 2 y * 3
## Error: unexpected symbol in "x + 2 y"
x + 2; y * 3 # OK
else 换行
在if-else 语句中,关键字else 必须与if 块的末尾出现在同一行。
if(TRUE) 1
else 2
## Error: unexpected 'else' in "else"
if(TRUE) 1 else 2 # OK
if(TRUE)
{
1
} else # also OK
{
2
}
= 而不是 ==
= 用于为函数参数赋值和赋值。 == 测试两个值是否相等。
if(x = 0) {}
## Error: unexpected '=' in "if(x ="
if(x == 0) {} # OK
参数之间缺少逗号
调用函数时,每个参数必须用逗号分隔。
c(1 2)
## Error: unexpected numeric constant in "c(1 2"
c(1, 2) # OK
不引用文件路径
文件路径只是字符串。它们需要用双引号或单引号括起来。
path.expand(~)
## Error: unexpected ')' in "path.expand(~)"
path.expand("~") # OK
字符串中的引号
当尝试通过 system 将带引号的值传递给 shell,或者创建带引号的 xPath 或 sql 查询时,这是一个常见问题。
双引号字符串中的双引号需要转义。同样,单引号字符串中的单引号也需要转义。或者,您可以在双引号字符串中使用单引号而不进行转义,反之亦然。
"x"y"
## Error: unexpected symbol in ""x"y"
"x\"y" # OK
'x"y' # OK
使用大引号
所谓的“智能”引号对于 R 编程来说并不那么智能。
path.expand(“~”)
## Error: unexpected input in "path.expand(“"
path.expand("~") # OK
使用不带反引号的非标准变量名
?make.names 描述了有效变量名的构成。如果你创建了一个无效的变量名(也许是使用assign),那么你需要用反引号来访问它,
assign("x y", 0)
x y
## Error: unexpected symbol in "x y"
`x y` # OK
这也适用于使用check.names = FALSE 创建的数据框中的列名。
dfr <- data.frame("x y" = 1:5, check.names = FALSE)
dfr$x y
## Error: unexpected symbol in "dfr$x y"
dfr[,"x y"] # OK
dfr$`x y` # also OK
它也适用于将运算符和其他特殊值传递给函数时。例如,在 %in% 上查找帮助。
?%in%
## Error: unexpected SPECIAL in "?%in%"
?`%in%` # OK
采购非 R 代码
source 函数从文件运行 R 代码。如果您尝试使用它来读取数据,它将中断。可能你想要read.table。
source(textConnection("x y"))
## Error in source(textConnection("x y")) :
## textConnection("x y"):1:3: unexpected symbol
## 1: x y
## ^
RStudio 桌面文件损坏
RStudio 用户 have reported 由于 .rstudio-desktop 文件损坏而导致源错误。这些报告仅在 2014 年 3 月左右发生,因此可能是特定版本的 IDE 存在问题。可以使用支持页面上的the instructions 重置 RStudio。
在数学绘图注释中使用不粘贴的表达式
尝试在绘图中创建数学标签或标题时,创建的表达式必须是语法上有效的数学表达式,如?plotmath 页面所述。否则内容应该包含在粘贴调用中。
plot(rnorm(10), ylab = expression(alpha ^ *)))
## Error: unexpected '*' in "plot(rnorm(10), ylab = expression(alpha ^ *"
plot(rnorm(10), ylab = expression(paste(alpha ^ phantom(0), "*"))) # OK