Al fin luego de tanto luchar ya hallamos la solución de este atolladero que muchos de nuestros usuarios de este sitio han tenido. Si tienes algún detalle que aportar no dudes en dejar tu información.
Solución:
Estos errores significan que el código R que está intentando ejecutar o la fuente no es sintácticamente correcto. Es decir, tiene 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 cree R 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 tener el error
La mejor forma de evitar errores sintácticos es escribir código elegante. De esa manera, cuando escriba 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 etiquetas SO R. También puede utilizar el formatR
package para formatear automáticamente su código en algo más legible. En RStudio, el atajo de teclado CONTROL + CAMBIO + A reformateará su código.
Considere usar un IDE o 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 ha anidado paréntesis, llaves o corchetes, es muy fácil cerrarlos demasiadas o muy pocas veces.
}
## Error: unexpected '}' in "}"
# OK
Desaparecido*
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 ajusta si, para o devuelve valores 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 debe ajustar 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, hace que R falle, además de hacer 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 un if
–else
declaración, la palabra clave else
debe aparecer en la misma línea que el final de la if
cuadra.
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 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
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
Sin citar rutas de archivo
Las rutas de archivo son solo cadenas. Deben estar entre comillas simples o dobles.
path.expand(~)
## Error: unexpected ')' in "path.expand(~)"
path.expand("~") # OK
Cotizaciones dentro de cadenas
Este es un problema común al intentar pasar valores cotizados al shell a través de system
, o creando cotizado xPath
o sql
consultas.
Comillas dobles dentro de una cita doble string necesita ser escapado. Del mismo modo, las comillas simples dentro de una sola cita string necesita ser escapado. Alternativamente, puede usar comillas simples dentro de una comilla doble string sin escapar, y viceversa.
"x"y"
## Error: unexpected symbol in ""x"y"
"x"y" # OK
'x"y' # OK
Usar comillas rizadas
Las denominadas 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 inversas
?make.names
describe lo que constituye un nombre de variable válido. Si crea un nombre de variable no válido (usando assign
, quizás), entonces debes acceder a él con comillas inversas,
assign("x y", 0)
x y
## Error: unexpected symbol in "x y"
`x y` # OK
Esto también se aplica a los nombres de columna 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
Aprovisionamiento de código no R
los source
La función ejecuta el código R desde un archivo. Se romperá si intenta usarlo para leer sus 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 fuente erróneos debido a un .rstudio-desktop
expediente. 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 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 ?plotmath
página. De lo contrario, el contenido debe incluirse dentro de una llamada a 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
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 leer eso.
EDITAR: OP solicitó un ejemplo. Aquí va.
➜ ~ cat a.R
cat('hello worldn')
➜ ~ xxd a.R
00000000: efbb bf63 6174 2827 6865 6c6c 6f20 776f ...cat('hello wo
00000010: 726c 645c 6e27 290a rldn').
➜ ~ 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 worldn')
Error: unexpected input in ""
Execution halted
Reseñas y puntuaciones
Si te mola la invitación, tienes el poder dejar una reseña acerca de qué le añadirías a esta sección.