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

Resuelto Richie Cotton asked hace 54 años • 3 respuestas

Recibí uno de estos errores.

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

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

Algunos ejemplos sencillos que reproducen los errores y variantes habituales:

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"
Richie Cotton avatar Jan 01 '70 08:01 Richie Cotton
Aceptado

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

Para solucionar el problema, lea atentamente el mensaje de error. El código proporcionado en el mensaje de error muestra dónde R cree que está el problema. Busque esa línea en su código original y busque el error tipográfico.


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

La mejor manera de evitar errores sintácticos es escribir código elegante. De esa manera, cuando escriba mal algo, el problema será más fácil de detectar. Hay muchas guías de estilo de R vinculadas desde la página de información de etiquetas SO R. También puedes usar el formatRpaquete para formatear automáticamente tu código en algo más legible. En RStudio, el método abreviado de teclado CTRL+ SHIFT+ Areformateará su código.

Considere la posibilidad de utilizar un IDE o un editor de texto que resalte los paréntesis y llaves coincidentes y muestre cadenas y números en diferentes colores.


Errores sintácticos comunes que generan estos errores

Paréntesis, llaves o corchetes que no coinciden

Si tiene paréntesis, llaves o corchetes anidados, 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 incluir valores if, for o return entre paréntesis

Este es un error común de los usuarios de MATLAB. En R, if, for, return, etc., son funciones, por lo que es necesario encerrar su contenido 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 con punto y coma, provoca que R falle y hace que el 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

elsecomenzando en una nueva línea

En una declaración if- else, la palabra clave elsedebe aparecer en la misma línea que el final del ifbloque.

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

=en lugar de==

=se utiliza para asignar y dar valores a los argumentos de funciones. ==prueba la igualdad de dos valores.

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

Faltan comas entre argumentos

Al llamar 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 citar rutas de archivos

Las rutas de los archivos son solo cadenas. Deben estar entre comillas dobles o simples.

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

Citas dentro de cadenas

Este es un problema común al intentar pasar valores entrecomillados al shell mediante systemo al crear consultas xPathentrecomilladas sql.

Las comillas dobles dentro de una cadena entre comillas dobles deben tener caracteres de escape. Del mismo modo, es necesario utilizar caracteres de escape entre comillas simples dentro de una cadena entre comillas simples. Alternativamente, puede usar comillas simples dentro de una cadena entre comillas dobles sin escapar, y viceversa.

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

Usando comillas rizadas

Las llamadas comillas "inteligentes" no son tan inteligentes para la programación en R.

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

Usar nombres de variables no estándar sin comillas

?make.namesdescribe lo que constituye un nombre de variable válido. Si crea un nombre de variable no válido (usando assign, tal vez), deberá acceder a él con comillas invertidas,

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

Esto también se aplica a los nombres de columnas en marcos de datos creados con 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

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

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

Obtención de código que no sea R

La sourcefunción ejecuta código R desde un archivo. Se romperá si intentas usarlo para leer tus datos. Probablemente quieras read.table.

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

Archivo de escritorio RStudio dañado

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


Usar expresión sin pegar en anotaciones de gráficos matemáticos

Al intentar crear etiquetas 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 ?plotmathpágina. De lo contrario, el contenido debería estar contenido 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
Richie Cotton avatar Sep 17 '2014 11:09 Richie Cotton

Para mi el error fue:

Error: unexpected input in "�"

y la solución fue abrir el script en un editor hexadecimal y eliminar los primeros 3 caracteres del archivo. El archivo comenzaba con una lista de materiales UTF-8 y parece que Rscript no puede leerlo.

EDITAR: OP solicitó un ejemplo. Aquí va.

~ 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
GDR avatar Sep 24 '2018 10:09 GDR

Si está copiando y pegando código en R, a veces no aceptará algunos caracteres especiales como "~" y aparecerá como "�". Entonces, si un determinado carácter da un error, asegúrese de usar su teclado para ingresar el carácter o busque otro sitio web para copiar y pegar si eso no funciona.

Hayden avatar Jan 18 '2021 22:01 Hayden