2014-09-17 4 views
36

Я получил одну из этих ошибок.Ошибка: неожиданный символ/ввод/строка константа/числовая константа/SPECIAL в моем коде

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

Эти ссылки не нужны. – Roland

+4

Они могли отмахнуться от нескольких дуплексов. Хорошее дополнение к FAQ, Ричи. – hrbrmstr

+2

Хотя обширный список ответов хорош, проблема «выбора перегрузки» может фактически привести пользователей в порядок. Есть ли вероятность, что вы можете сократить до 10 или менее ссылок, которые покрывают 99% ошибок? –

ответ

46

Эти ошибки означают, что 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 

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

Это общая ошибка пользователей 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 пользователи have reported ошибочных ошибок источника из-за поврежденный .rstudio-desktop файл. Эти отчеты появились только в марте 2014 года, поэтому, возможно, это проблема с конкретной версией среды IDE. RStudio можно сбросить с помощью the instructions на странице поддержки.


Используя выражение без пасты в математическом участке Аннотация

При попытке создать математические этикетки или названия в сюжетах, выражение созданного должна быть синтаксический действительным математическое выражение, как описано на странице ?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 
Смежные вопросы