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

yh2wf1be  于 2023-04-03  发布在  其他
关注(0)|答案(3)|浏览(2336)

我收到了其中一个错误。

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

d7v8vwbk1#

这些错误意味着你试图运行的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或返回值括在括号中

这是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-desktop文件损坏,RStudio用户have reported错误源错误。这些报告仅发生在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
p4tfgftt

p4tfgftt2#

对我来说,错误在于:

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
cxfofazt

cxfofazt3#

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

相关问题