Fout: onverwacht symbool/invoer/tekenreeksconstante/numerieke constante/SPECIAL in mijn code

Ik heb een van deze fouten ontvangen.

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

Wat betekent de fout en hoe kan ik deze oplossen?

Enkele eenvoudige voorbeelden die de fouten reproduceren, en veelvoorkomende varianten:

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"

Antwoord 1, autoriteit 100%

Deze fouten betekenen dat de R-code die u probeert uit te voeren of de broncode syntactisch niet correct is. Dat wil zeggen, je hebt een typefout.

Lees de foutmelding zorgvuldig door om het probleem op te lossen. De code in de foutmelding laat zien waar R denkt dat het probleem zit. Zoek die regel in je originele code en zoek naar de typefout.


Profylactische maatregelen om te voorkomen dat u de fout opnieuw krijgt

De beste manier om syntactische fouten te voorkomen, is door stijlvolle code te schrijven. Op die manier zal het probleem gemakkelijker te herkennen zijn als u dingen verkeerd typt. Er zijn veel R-stijlgidsen gelinkt vanaf de pagina SO R-taginfo. U kunt ook het pakket formatRgebruiken om uw code automatisch op te maken in iets leesbaars. In RStudio zal de sneltoets CTRL+ SHIFT+ Aje code opnieuw formatteren.

Overweeg het gebruik van een IDE- of teksteditor die overeenkomende haakjes en accolades markeert en tekenreeksen en cijfers in verschillende kleuren weergeeft.


Veelvoorkomende syntactische fouten die deze fouten veroorzaken

Niet-overeenkomende haakjes, accolades of haakjes

Als je haakjes, accolades of haakjes hebt genest, is het heel gemakkelijk om ze een keer te veel of te weinig te sluiten.

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

Ontbrekend*bij vermenigvuldigen

Dit is een veelgemaakte fout van wiskundigen.

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

Geen if, for, of retournerende waarden tussen haakjes

Dit is een veelgemaakte fout van MATLAB-gebruikers. In R zijn if, for, return, etc. functies, dus je moet hun inhoud tussen haakjes plaatsen.

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

Niet meerdere regels gebruiken voor code

Als u meerdere uitdrukkingen op één regel probeert te schrijven, zonder ze door puntkomma’s te scheiden, mislukt R en wordt uw code moeilijker leesbaar.

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

elsebeginnend op een nieuwe regel

In een ifelse-instructie moet het trefwoord elseop dezelfde regel voorkomen als het einde van de ifblok.

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

=in plaats van ==

=wordt gebruikt voor het toewijzen en geven van waarden aan functieargumenten. ==test twee waarden op gelijkheid.

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

Ontbrekende komma’s tussen argumenten

Bij het aanroepen van een functie moet elk argument worden gescheiden door een komma.

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

Geen bestandspaden aanhalen

Bestandspaden zijn slechts tekenreeksen. Ze moeten tussen dubbele of enkele aanhalingstekens staan.

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

Citaten tussen strings

Dit is een veelvoorkomend probleem bij het proberen om waarden tussen aanhalingstekens door te geven aan de shell via system, of bij het maken van xPath– of sql-query’s tussen aanhalingstekens.

Dubbele aanhalingstekens binnen een tekenreeks met dubbele aanhalingstekens moeten worden geëscaped. Evenzo moeten enkele aanhalingstekens binnen een enkele tekenreeks tussen aanhalingstekens worden geëscaped. U kunt ook enkele aanhalingstekens gebruiken binnen een tekenreeks met dubbele aanhalingstekens zonder escapetekens, en vice versa.

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

Gekrulde aanhalingstekens gebruiken

Zogenaamde “slimme” aanhalingstekens zijn niet zo slim voor R-programmering.

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

Niet-standaard variabele namen gebruiken zonder aanhalingstekens

?make.namesbeschrijft wat een geldige variabelenaam is. Als u een ongeldige variabelenaam maakt (misschien met behulp van assign), dan moet u deze openen met aanhalingstekens,

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

Dit geldt ook voor kolomnamen in gegevensframes die zijn gemaakt met 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

Het is ook van toepassing bij het doorgeven van operatoren en andere speciale waarden aan functies. Zoek bijvoorbeeld hulp op %in%.

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

Niet-R-code sourcen

De functie sourcevoert R-code uit vanuit een bestand. Het zal breken als u het probeert te gebruiken om uw gegevens in te lezen. Waarschijnlijk wil je read.table.

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

Beschadigd RStudio-bureaubladbestand

RStudio-gebruikers hebben gemeldfoutieve bronfouten als gevolg van een beschadigd .rstudio-desktop-bestand . Deze meldingen kwamen pas rond maart 2014 voor, dus mogelijk is er een probleem met een specifieke versie van de IDE. RStudio kan worden gereset met behulp van de instructiesop de ondersteuningspagina.


Uitdrukking gebruiken zonder plakken in wiskundige plotannotaties

Als u wiskundige labels of titels in plots probeert te maken, moet de gemaakte uitdrukking een syntactisch geldige wiskundige uitdrukking zijn, zoals beschreven op de ?plotmathpagina. Anders moet de inhoud worden opgenomen in een oproep om te plakken.

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

Antwoord 2, autoriteit 8%

Voor mij was de fout:

Error: unexpected input in "?"

en de oplossing was het openen van het script in een hex-editor en het verwijderen van de eerste 3 tekens uit het bestand. Het bestand begon met een UTF-8 stuklijst en het lijkt erop dat Rscript dat niet kan lezen.

EDIT: OP heeft om een ​​voorbeeld gevraagd. Hier gaat het.

?  ~ 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

Antwoord 3, autoriteit 2%

Als u code in R kopieert, accepteert deze soms bepaalde speciale tekens zoals “~” niet en wordt in plaats daarvan weergegeven als een “?”. Dus als een bepaald teken een foutmelding geeft, gebruik dan je toetsenbord om het teken in te voeren, of zoek een andere website om van te kopiëren en plakken als dat niet werkt.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

four + 1 =

Other episodes