J'utilise ggplot2 pour comparer deux espèces différentes, comme l'indique 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, quand je lance 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"))
Je reçois 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 également lorsque je cours en utilisant la variable melt.data, quelle que soit la valeur de celle-ci. Quelqu'un peut-il m'aider à résoudre ce problème? J'ai déjà exécuté ce code avec un autre jeu de données dont le formatage était identique, et je ne peux pas comprendre ce qui ne va pas ici.
Il semble que vous ayez inséré un +
Supplémentaire au début de chaque ligne, que R interprète comme un opérateur unaire (comme -
Interprété comme une négation plutôt qu'une soustraction). Je pense que ce qui fonctionnera 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 que vous copiez et collez à partir de la sortie d'une console R? La console utilise +
Au début de la ligne lorsque la saisie est incomplète.
Ceci est une nuisance bien connue quand affichage de 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 plusieurs lignes et avec des commentaires)
Règle: placez toujours le '+' pendant à la fin d'un ligne pour que R sache que la commande est inachevée:
ggplot(...) + geom_whatever1(...) +
geom_whatever2(...) +
stat_whatever3(...) +
geom_title(...) + scale_y_log10(...)
Ne mettez pas le '+' pendant au début de la ligne, car cela chatouille cette Error in "+ geom_whatever2(...) invalid argument to unary operator"
Et, évidemment, ne mettez pas le signe '+' aux deux bouts, car c'est une erreur de syntaxe. Alors, prenez l’habitude d’être cohérent: mettez toujours "+" en fin de ligne.
cf. réponse à "Scinder le code sur plusieurs lignes dans un script R"
C'est l'opérateur "+" au début de la ligne qui fait bouger 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.
Cela marche:
ggplot(combined.data, aes(x = region, y = expression, fill = species)) +
geom_boxplot()
Le ne 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 résoudre ce problème, vous devrez les supprimer au début des lignes.