R: “Unaire operatorfout” van multiline ggplot2-opdracht

Ik gebruik ggplot2 om een boxplot te vergelijken van twee verschillende soorten, zoals aangegeven in de derde kolom hieronder:

> library(reshape2)
> library(ggplot2)
> melt.data = melt(actb.raw.data)
> head(actb.raw.data)
  region  expression species
1     CG -0.17686667   human
2     CG -0.06506667   human
3     DG  1.04590000   human
4    CA1  1.94093333   human
5    CA2  1.55023333   human
6    CA3  1.75800000   human
> head(melt.data)
  region species   variable       value
1     CG   human expression -0.17686667
2     CG   human expression -0.06506667
3     DG   human expression  1.04590000
4    CA1   human expression  1.94093333
5    CA2   human expression  1.55023333
6    CA3   human expression  1.75800000

Als ik echter de volgende code uitvoer:

ggplot(combined.data, aes(x = region, y = expression, fill = species)) +
+     geom_boxplot() +
+     scale_fill_manual(values = c("yellow", "orange"))
+     ggtitle("Expression comparisons for ACTB")
+     theme(axis.text.x = element_text(angle=90, face="bold", colour="black"))

Ik krijg deze foutmelding:

> ggplot(actb.raw.data, aes(x = region, y = expression, fill = species)) +
+     + geom_boxplot() +
+     + scale_fill_manual(values = c("yellow", "orange"))
Error in +geom_boxplot() : invalid argument to unary operator
> + ggtitle("ACTB expression in human vs. macaque")
Error in +ggtitle("ACTB expression in human vs. macaque") : 
 invalid argument to unary operator
> + theme(axis.text.x = element_text(angle=90, face="bold", colour="black"))
Error in inherits(x, "theme") : argument "e2" is missing, with no default

Dit gebeurt ook wanneer ik ren met de variabele smelt.data, voor wat dat waard is. Kan iemand me helpen dit te repareren? Ik heb deze code succesvol uitgevoerd met een andere dataset die identiek is geformatteerd en ik kan niet achterhalen wat er hier mis gaat.


Antwoord 1, Autoriteit 100%

Het lijkt erop dat u een extra +aan het begin van elke regel hebt geplaatst, welke R interpreteert als een unary-operator (zoals -geïnterpreteerd als ontkenning, eerder dan aftrekken). Ik denk dat wat werkt

ggplot(combined.data, aes(x = region, y = expression, fill = species)) +
    geom_boxplot() +
    scale_fill_manual(values = c("yellow", "orange")) + 
    ggtitle("Expression comparisons for ACTB") + 
    theme(axis.text.x = element_text(angle=90, face="bold", colour="black"))

Misschien kopieer je en geplakt van de uitvoer van een R-console? De console gebruikt +aan het begin van de regel wanneer de invoer onvolledig is.


Antwoord 2, Autoriteit 31%

Dit is een bekende overlast wanneer multiline-opdrachten in R plaatsen. (U kunt een ander gedrag krijgen wanneer u source()een script naar wanneer u de regels kopieert, beide met multiline als opmerkingen)

Regel: Plaats altijd de bungelen ‘+’ op het einde van een regel, zodat r kent het opdracht is niet voltooid:

ggplot(...) + geom_whatever1(...) +
  geom_whatever2(...) +
  stat_whatever3(...) +
  geom_title(...) + scale_y_log10(...)

Plaats niet de bungelen ‘+’ aan het begin van de lijn, omdat die de fout kietelt:

Error in "+ geom_whatever2(...) invalid argument to unary operator"

En zet natuurlijk geen bungelende ‘+’ aan beide uiteinden en begin, want dat is een syntaxisfout.

Dus, leer een gewoonte aan om consistent te zijn: zet altijd ‘+’ aan het einde van de regel.

zie antwoord op “Code splitsen over meerdere regels in een R-script”


Antwoord 3, autoriteit 5%

Het is de ‘+’-operator aan het begin van de regel die ervoor zorgt dat de zaken omhoog gaan (niet alleen dat je twee ‘+’-operatoren achter elkaar gebruikt). De operator ‘+’ kan aan het einde van regels worden gebruikt, maar niet aan het begin.

Dit werkt:

ggplot(combined.data, aes(x = region, y = expression, fill = species)) +
geom_boxplot() 

De niet:

ggplot(combined.data, aes(x = region, y = expression, fill = species))
+ geom_boxplot() 
*Error in + geom_boxplot():
invalid argument to unary operator*

Je kunt ook geen twee ‘+’-operators gebruiken, wat je in dit geval hebt gedaan. Maar om dit op te lossen, moet je die aan het begin van regels selectief verwijderen.


Antwoord 4

Probeer de syntaxis in één regel te consolideren. dit zal de fout wissen

Other episodes