这些错误意味着您试图运行的R代码或源代码在语法上是不正确的。也就是说,你有一个错误。
若要修复此问题,请仔细阅读错误消息。错误消息中提供的代码显示了R认为问题所在的地方。在原始代码中找到这一行,并查找错误。
预防措施防止你再次犯错误
避免语法错误的最好方法是编写时髦的代码。这样,当你输入错误的东西时,问题就会更容易发现。有许多从R标签信息一页。您还可以使用formatR自动将代码格式化为更具可读性的包。在RStudio中,键盘快捷方式克特 + 换档 + A将重新格式化您的代码。
考虑使用IDE或文本编辑器来突出显示匹配的括号和大括号,并以不同的颜色显示字符串和数字。
产生这些错误的常见语法错误
不匹配的括号、大括号或括号
如果您有嵌套的括号、大括号或括号,那么很容易关闭它们太多或太少。{}}## Error: unexpected '}' in "{}}"{{}} # OK
失踪 * 做乘法时
这是数学家们常见的错误。5x
Error: unexpected symbol in "5x"5*x # OK
不包装括号中的if、for或返回值
这是MATLAB用户常见的错误。在R,if, for, 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) 1else 2## Error: unexpected 'else' in "else" if(TRUE) 1 else 2 # OKif(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
字符串中的引号
当试图将引用的值传递给shell时,这是一个常见的问题。system,或创建引用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("x y", 0)x y## Error: unexpected symbol in "x y"`x y` # OK
这也适用于用check.names = FALSE.dfr
它也适用于将运算符和其他特殊值传递给函数时。例如,查找帮助%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用户报告由于损坏引起的错误源错误.rstudio-desktop档案。这些报告只发生在2014年3月左右,因此这可能是IDE特定版本的一个问题。可以使用指示在支持页面上。
在数学图注释中使用没有粘贴的表达式
当试图在图中创建数学标签或标题时,创建的表达式必须是语法上有效的数学表达式,如?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