Эти ошибки означают, что 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
Эти ссылки не нужны. – Roland
Они могли отмахнуться от нескольких дуплексов. Хорошее дополнение к FAQ, Ричи. – hrbrmstr
Хотя обширный список ответов хорош, проблема «выбора перегрузки» может фактически привести пользователей в порядок. Есть ли вероятность, что вы можете сократить до 10 или менее ссылок, которые покрывают 99% ошибок? –