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

时间:2014-09-17 11:24:07

标签: r r-faq

我收到了其中一个错误。

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"

3 个答案:

答案 0 :(得分:53)

这些错误意味着您尝试运行或源代码的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

答案 1 :(得分: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

答案 2 :(得分:1)

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