org - r studiodio
Error: símbolo inesperado/entrada/constante de cadena/constante numérica/ESPECIAL en mi código (2)
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 detenidamente. El código proporcionado en el mensaje de error muestra dónde R cree que está el problema. Encuentra esa línea en tu código original y busca el error tipográfico.
Medidas profilácticas para evitar que vuelva a aparecer el error.
La mejor manera de evitar errores sintácticos es escribir un código elegante.
De esa manera, 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 la 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
+
MAYÚS
+
A
reformateará su código.
Considere usar un IDE o editor de texto que resalte los paréntesis y las llaves, y muestre cadenas y números en diferentes colores.
Errores sintácticos comunes que generan estos errores
Paréntesis, llaves o paréntesis que no coinciden
Si tiene paréntesis, llaves o paréntesis anidados, es muy fácil cerrarlos demasiadas o muy pocas veces.
{}}
## Error: unexpected ''}'' in "{}}"
{{}} # OK
Falta
*
al hacer 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 por 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 una instrucción
if
-
else
, 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 argumentos de 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
No citando rutas de archivos
Las rutas de archivo son solo cadenas. Deben estar entre comillas dobles o simples.
path.expand(~)
## Error: unexpected '')'' in "path.expand(~)"
path.expand("~") # OK
Citas dentro de cuerdas
Este es un problema común cuando se intenta pasar valores cotizados al shell a través del
system
o al crear consultas
xPath
o
sql
xPath
.
Las comillas dobles dentro de una cadena entre comillas dobles deben escaparse. Del mismo modo, las comillas simples dentro de una sola cadena entre comillas deben escaparse. 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
Usar comillas rizadas
Las llamadas citas "inteligentes" no son tan inteligentes para la programación de R.
path.expand(“~”)
## Error: unexpected input in "path.expand(“"
path.expand("~") # OK
Uso de 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
, tal vez), entonces necesita 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
Abastecimiento de código no R
La función
source
ejecuta el 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 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 siguiendo
las instrucciones
de la página de soporte.
Usar expresión sin pegar en anotaciones de trama matemática
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 página
?plotmath
.
De lo contrario, el contenido debe 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
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 simples que reproducen los errores y variantes comunes:
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"
Para mí 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 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