R: "erreur unaire de l'opérateur" de la commande multiline ggplot2

j'utilise ggplot2 pour faire une comparaison boxplot de deux espèces différentes, comme indiqué par la troisième colonne ci-dessous:

> 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

Cependant, lorsque j'exécute le code suivant:

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

j'ai cette erreur:

> 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

cela se produit aussi quand j'utilise la variable melt.de données, pour tout ce qui en vaut la peine. Quelqu'un peut-il m'aider à résoudre ce problème? J'ai déjà utilisé ce code avec succès avec un ensemble de données différent qui a été formaté de manière identique, et je ne peux pas comprendre ce qui ne va pas ici.

33
demandé sur smci 2013-06-21 20:55:45

3 réponses

il semble que vous auriez pu insérer un extra + Au début de chaque ligne, que R interprète comme un opérateur unaire (comme - interprété comme négation, plutôt que soustraction). Je pense que ce sera le travail est

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

peut-être Copiez-vous et collez-vous à partir de la sortie D'une console R? La console utilise + au début de la ligne lors de la saisie est incomplète.

67
répondu Dave Kleinschmidt 2013-06-21 17:01:23

c'est une nuisance bien connue quand affichage des commandes multilignes dans R. (Vous pouvez obtenir un comportement différent lorsque vous source() un script lorsque vous copiez et collez les lignes, à la fois avec multiligne et commentaires)

la Règle: Toujours mettre le " + " à la d'une ligne de R connaît la commande n'est pas fini:

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

ne mettez pas le " + " au début de la ligne, car cela chatouille ce Error in "+ geom_whatever2(...) invalid argument to unary operator"

et évidemment ne mettez pas '+' à la fois fin et début puisque c'est une erreur de syntaxe. Ainsi, apprenez une habitude d'être cohérent: Toujours mettre " + " à la fin de la ligne.

cf. réponse à "Split code sur plusieurs lignes dans un script R"

20
répondu smci 2017-05-23 12:26:10

c'est l'opérateur ' + 'au début de la ligne qui déclenche les choses (pas seulement que vous utilisez deux opérateurs' + ' consécutivement). L'opérateur " + " peut être utilisé à la fin des lignes, mais pas au début.

Ceci fonctionne:

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

Le fait pas:

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

*Error in + geom_boxplot():
invalid argument to unary operator*

vous ne pouvez pas non plus utiliser deux opérateurs'+', ce que vous avez fait dans ce cas. Mais pour corriger cela, vous devrez sélectivement enlever ceux au début des lignes.

3
répondu jidulberger 2014-02-19 20:42:33