错误:意外的符号/输入/字符串常量/数字常量/ SPECIAL在我的代码

我收到这些错误之一。

Error: unexpected symbol in "<my code>" Error: unexpected input in "<my code>" Error: unexpected string constant in "<my code>" Error: unexpected numeric constant in "<my code>" Error: unexpected SPECIAL in "<my code>" Error: unexpected '<some punctuation>' in "<my code>" Error: unexpected '<reserved word>' in "<my code>" 

错误是什么意思,我该如何解决?

一些简单的例子,重现错误和常见的变种:

 aa ## Error: unexpected symbol in "aa" a\ ## Error: unexpected input in "a\" a"" ## Error: unexpected string constant in "a""" ""1 ## Error: unexpected numeric constant in """1" %% ## Error: unexpected SPECIAL in "%%" , ## Error: unexpected ',' in "," = ## Error: unexpected '=' in "=" ) ## Error: unexpected ')' in ")" else ## Error: unexpected 'else' in "else" 

这些错误意味着您尝试运行或来源的R代码在语法上不正确。 那就是,你有一个错字。

要解决该问题,请仔细阅读错误消息。 错误消息中提供的代码显示R认为问题在哪里。 在原始代码中找到该行,然后查找错字。


预防措施,以防止您再次得到错误

避免语法错误的最好方法是编写时髦的代码。 这样,当你输错东西的时候,问题会更容易被发现。 从R R标签信息页面链接了许多R风格指南。 您也可以使用formatR软件包来自动将您的代码格式化为更具可读性的内容。 在RStudio中,键盘快捷键CTRL + SHIFT + A将重新格式化您的代码。

考虑使用IDE或文本编辑器来突出显示匹配的圆括号和大括号,并以不同的颜色显示字符串和数字。


生成这些错误的常见语法错误

不匹配的括号,括号或括号

如果你有嵌套的括号,大括号或括号,关闭它们太容易,太多或太少。

 {}} ## Error: unexpected '}' in "{}}" {{}} # OK 

在乘法时 丢失 *

这是数学家常犯的错误。

 5x Error: unexpected symbol in "5x" 5*x # OK 

不包括,如果,或者在圆括号中返回值

这是MATLAB用户常见的错误。 在R中, if 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从一个新的行开始

ifelse语句中,关键字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时,或者创建引用的xPathsql查询时,这是一个常见问题。

双引号字符串中的双引号需要被转义。 同样,单引号字符串内的单引号需要被转义。 或者,您可以在双引号字符串内使用单引号而不会转义,反之亦然。

 "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("xy", 0) xy ## Error: unexpected symbol in "xy" `xy` # OK 

这也适用于使用check.names = FALSE创建的数据框中的列名称。

 dfr <- data.frame("xy" = 1:5, check.names = FALSE) dfr$xy ## Error: unexpected symbol in "dfr$xy" dfr[,"xy"] # OK dfr$`xy` # also OK 

它也适用于将运算符和其他特殊值传递给函数的情况。 例如,在%in%查找%in%帮助。

 ?%in% ## Error: unexpected SPECIAL in "?%in%" ?`%in%` # OK 

采购非R代码

source函数从文件运行R代码。 如果您尝试使用它来读取数据,它会中断。 可能你想read.table

 source(textConnection("xy")) ## Error in source(textConnection("xy")) : ## textConnection("xy"):1:3: unexpected symbol ## 1: xy ## ^ 

损坏的RStudio桌面文件

RStudio用户报告了由于受损的.rstudio-desktop文件导致的错误源错误。 这些报告只发生在2014年3月左右,所以这可能是一个特定版本的IDE的问题。 可以使用支持页面上的说明重新设置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