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