Ответ 1
Эти ошибки означают, что код 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
Цитаты внутри строк
Это распространенная проблема при попытке передать значения в xPath
в оболочку через system
или при создании запросов xPath
или sql
xPath
.
Двойные кавычки внутри строки в двойных кавычках должны быть экранированы. Аналогично, одиночные кавычки внутри строки в одинарных кавычках должны быть экранированы. В качестве альтернативы, вы можете использовать одинарные кавычки внутри строки в двойных кавычках без экранирования и наоборот.
"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