Error: inesperado símbolo / entrada / cadena constante / constante numérica / ESPECIAL en mi código

Recibí uno de estos errores.

Error: unexpected symbol in "" Error: unexpected input in "" Error: unexpected string constant in "" Error: unexpected numeric constant in "" Error: unexpected SPECIAL in "" Error: unexpected '' in "" Error: unexpected '' in "" 

¿Qué significa el error y cómo puedo solucionarlo?

Algunos ejemplos simples que reproducen los errores y variantes comunes:

 aa ## Error: unexpected symbol in "aa" 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" 

Estos errores significan que el código R que está intentando ejecutar o fuente no es sintácticamente correcto. Es decir, tienes un error tipográfico.

Para solucionar el problema, lea el mensaje de error con cuidado. El código proporcionado en el mensaje de error muestra dónde piensa R que el problema es. Encuentra esa línea en tu código original y busca el error tipográfico.


Medidas profilácticas para evitar que vuelva a obtener el error

La mejor manera de evitar errores sintácticos es escribir un código con estilo. De esa forma, cuando escribes mal las cosas, el problema será más fácil de detectar. Hay muchas guías de estilo R vinculadas desde la página de información de etiqueta SO R. También puede usar el paquete formatR para formatear automáticamente su código en algo más legible. En RStudio, el atajo de teclado CTRL + SHIFT + A reformatea tu código.

Considere el uso de un IDE o editor de texto que resalte paréntesis y llaves, y muestre cadenas y números en diferentes colores.


Errores sintácticos comunes que generan estos errores

Paréntesis, llaves o corchetes no coincidentes

Si ha nested paréntesis, llaves o corchetes, es muy fácil cerrarlos demasiadas o muy pocas veces.

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

Falta * al hacer la multiplicación

Este es un error común de los matemáticos.

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

No se envuelve si, para o devuelve valores entre paréntesis

Este es un error común entre los usuarios de MATLAB. En R, if , for , return , etc., son funciones, por lo que debe envolver sus contenidos entre paréntesis.

 if x > 0 {} ## Error: unexpected symbol in "if x" if(x > 0) {} # OK 

No usar varias líneas para el código

Intentar escribir varias expresiones en una sola línea, sin separarlas por punto y coma, hace que R falle, y hace que su código sea más difícil de leer.

 x + 2 y * 3 ## Error: unexpected symbol in "x + 2 y" x + 2; y * 3 # OK 

else comenzando en una nueva línea

En una instrucción ifelse , la palabra clave else debe aparecer en la misma línea que el final del bloque if .

 if(TRUE) 1 else 2 ## Error: unexpected 'else' in "else" if(TRUE) 1 else 2 # OK if(TRUE) { 1 } else # also OK { 2 } 

= lugar de ==

= se usa para asignar y dar valores a los argumentos de la función. == prueba dos valores para la igualdad.

 if(x = 0) {} ## Error: unexpected '=' in "if(x =" if(x == 0) {} # OK 

Faltan comas entre argumentos

Cuando se llama a una función, cada argumento debe estar separado por una coma.

 c(1 2) ## Error: unexpected numeric constant in "c(1 2" c(1, 2) # OK 

No citando rutas de archivos

Las rutas de archivos son solo cadenas. Deben estar envueltos en comillas dobles o simples.

 path.expand(~) ## Error: unexpected ')' in "path.expand(~)" path.expand("~") # OK 

Citas dentro de cadenas

Este es un problema común cuando se trata de pasar los valores cotizados al shell a través del system , o la creación de consultas cotizadas xPath o sql .

Las comillas dobles dentro de una cadena de comillas dobles deben ser escapadas. Del mismo modo, las comillas simples dentro de una sola cadena entre comillas deben ser escapadas. Alternativamente, puede usar comillas simples dentro de una cadena entre comillas dobles sin escaparse, y viceversa.

 "x"y" ## Error: unexpected symbol in ""x"y" "x\"y" # OK 'x"y' # OK 

Usando citas rizadas

Las llamadas citas “inteligentes” no son tan inteligentes para la progtwigción R.

 path.expand(“~”) ## Error: unexpected input in "path.expand(“" path.expand("~") # OK 

Usar nombres de variables no estándar sin comillas inversas

?make.names describe qué constituye un nombre de variable válido. Si crea un nombre de variable no válido (usando assign , tal vez), entonces necesita acceder con las comillas invertidas,

 assign("xy", 0) xy ## Error: unexpected symbol in "xy" `xy` # OK 

Esto también se aplica a los nombres de columna en marcos de datos creados con check.names = FALSE .

 dfr <- data.frame("xy" = 1:5, check.names = FALSE) dfr$xy ## Error: unexpected symbol in "dfr$xy" dfr[,"xy"] # OK dfr$`xy` # also OK 

También se aplica al pasar operadores y otros valores especiales a las funciones. Por ejemplo, buscar ayuda en %in% .

 ?%in% ## Error: unexpected SPECIAL in "?%in%" ?`%in%` # OK 

Fuente de código no R

La función source ejecuta el código R desde un archivo. Se romperá si intenta usarlo para leer sus datos. Probablemente quieras read.table .

 source(textConnection("xy")) ## Error in source(textConnection("xy")) : ## textConnection("xy"):1:3: unexpected symbol ## 1: xy ## ^ 

Archivo de escritorio RStudio dañado

Los usuarios de RStudio han informado errores de fuente erróneos debido a un archivo .rstudio-desktop dañado. Estos informes solo ocurrieron alrededor de marzo de 2014, por lo que posiblemente sea un problema con una versión específica del IDE. RStudio se puede restablecer usando las instrucciones en la página de soporte.


Usar expresión sin pegar en anotaciones de ttwig matemática

Al tratar de crear tags o títulos matemáticos en gráficos, la expresión creada debe ser una expresión matemática sintácticamente válida como se describe en la página ?plotmath . De lo contrario, los contenidos deberían estar contenidos dentro de una llamada para pegar.

 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