Ошибка: неожиданный символ / ввод / строковая константа / числовая константа / ОСОБЕННОСТЬ в моем коде

Я получил одну из этих ошибок.

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 ответа

Решение

Эти ошибки означают, что код R, который вы пытаетесь запустить или источник, не является синтаксически правильным. То есть у вас есть опечатка.

Чтобы устранить проблему, внимательно прочитайте сообщение об ошибке. Код, указанный в сообщении об ошибке, показывает, где R считает, что проблема в этом. Найдите эту строку в исходном коде и найдите опечатку.


Профилактические меры для предотвращения повторного появления ошибки

Лучший способ избежать синтаксических ошибок - это написать стильный код. Таким образом, когда вы набираете ошибки, проблему будет легче обнаружить. Есть много руководств в стиле R, связанных со страницей информации тега SO R. Вы также можете использовать formatR пакет для автоматического форматирования вашего кода во что-то более читабельное. В RStudio сочетание клавиш CTRL + SHIFT + A переформатирует ваш код.

Подумайте об использовании IDE или текстового редактора, который выделяет совпадающие скобки и фигурные скобки и показывает строки и числа разными цветами.


Распространенные синтаксические ошибки, которые порождают эти ошибки

Несоответствующие скобки, скобки или скобки

Если у вас есть вложенные скобки, скобки или скобки, очень легко закрыть их слишком много или слишком мало раз.

{}}
## Error: unexpected '}' in "{}}"
{{}} # OK

Отсутствует * при выполнении умножения

Это распространенная ошибка математиков.

5x
Error: unexpected symbol in "5x"
5*x # OK

Не переносить, если, для или возвращать значения в скобках

Это распространенная ошибка пользователей 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) 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 или создание цитаты 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 <- 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

Sourcing не код 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 года, поэтому, возможно, это проблема конкретной версии 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

Для меня ошибка была:

Error: unexpected input in "�"

и исправлением было открытие скрипта в шестнадцатеричном редакторе и удаление первых 3 символов из файла. Файл начинался с спецификации UTF-8, и кажется, что 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

Если вы копируете код в R, он иногда не принимает некоторые специальные символы, такие как «~», и вместо этого отображается как «�». Поэтому, если определенный символ выдает ошибку, обязательно используйте клавиатуру для ввода символа или найдите другой веб-сайт, чтобы скопировать и вставить его, если это не сработает.

Другие вопросы по тегам