错误:意外的符号/输入/字符串常量/数字常量/ 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
从一个新的行开始
在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("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