1. ホーム
  2. r

[解決済み】R: 複数行の ggplot2 コマンドで「単項演算子エラー」が発生する。

2022-01-17 14:20:25

質問

ggplot2を使って、2つの異なる種をボックスプロットで比較しています(下図の3番目の列で示されます)。

> 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

ところが、以下のコードを実行すると

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

こんなエラーが出ます。

> 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

これは、何気に変数melt.dataを使って実行したときにも起こります。誰かこれを解決するのを手伝ってくれませんか?以前、同じようにフォーマットされた別のデータセットでこのコードを実行したことがあるのですが、何が間違っているのかがわからないのです。

解決方法は?

を追加で挿入したようです。 + を単項演算子として解釈しています(例えば - 引き算ではなく、否定と解釈)。 私が思うに、うまくいくのは

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

おそらく、Rコンソールの出力からコピー&ペーストしたのでは? コンソールでは + は、入力が不完全な場合に行頭に置かれます。