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

Posted

技术标签:

【中文标题】错误:我的代码中出现意外的符号/输入/字符串常量/数字常量/SPECIAL【英文标题】:Error: unexpected symbol/input/string constant/numeric constant/SPECIAL in my code 【发布时间】:2014-11-11 09:51:41 【问题描述】:

我收到了其中一个错误。

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>"        

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

重现错误的一些简单示例和常见变体:

a a
## Error: unexpected symbol in "a a"
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"

【问题讨论】:

他们可以阻止相当多的重复。对常见问题的很好补充,Richie。 虽然广泛的答案列表很好,但“选择过载”问题实际上可能会将用户赶走。您是否有机会将覆盖 99% 错误的链接减少到 10 个或更少? 如果每个阅读这篇文章的人都点击几个链接,然后投票关闭任何看起来质量低下的东西,怎么样。一旦垃圾被清除,我将减少这个链接列表。 顺便说一句,链接在每个类别中从最旧到最新排序。 我不确定这在实践中会有多大用处,但我认为这不是一个糟糕的主意。不过,我确实认为如果没有大量链接列表,这个问题会好很多。 (海事组织) 【参考方案1】:

这些错误意味着您尝试运行或源代码的 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中,ifforreturn等都是函数,所以需要将它们的内容用括号括起来。

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,或者创建带引号的 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("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

【讨论】:

【参考方案2】:

对我来说,错误是:

Error: unexpected input in "�"

修复是在十六进制编辑器中打开脚本并从文件中删除前 3 个字符。该文件以 UTF-8 BOM 开头,Rscript 似乎无法读取。

编辑:OP 请求了一个示例。就这样吧。

➜  ~ cat a.R
cat('hello world\n')
➜  ~ xxd a.R
00000000: efbb bf63 6174 2827 6865 6c6c 6f20 776f  ...cat('hello wo
00000010: 726c 645c 6e27 290a                      rld\n').
➜  ~ R -f a.R        

R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an html browser interface to help.
Type 'q()' to quit R.

> cat('hello world\n')
Error: unexpected input in "�"
Execution halted

【讨论】:

如果您提供了一个可重现的示例,将会很有帮助。也可以将文件编码设置为解决方案吗? 不确定我将如何提供可重现的示例。在这里粘贴一个base64编码的文件,这样特殊字符就不会丢失?粘贴十六进制转储? 怎么样:使用cat()创建一个包含违规内容的文件,然后通过system()调用Rscript。或者可能是littler 包。【参考方案3】:

如果您将代码复制粘贴到 R 中,它有时不会接受一些特殊字符,例如“~”,而是显示为“�”。因此,如果某个字符出现错误,请确保使用键盘输入该字符,或者如果这不起作用,请从另一个网站复制粘贴。

【讨论】:

以上是关于错误:我的代码中出现意外的符号/输入/字符串常量/数字常量/SPECIAL的主要内容,如果未能解决你的问题,请参考以下文章

测试目标中的程序中出现意外的“@”

错误 1200:意外符号?

语法错误,“FLATTEN”处或附近出现意外符号

语法错误;意外符号:

PHP - 错误ASCII = 16状态= 0输入中的意外字符

JS 装饰器的 ESLint 意外字符“@”