studiodio org for r r-faq

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