R: "Унарная ошибка оператора" из многострочной команды ggplot2

Я использую ggplot2 для сопоставления ящиков с двумя разными видами, как показано в третьем столбце, показанном ниже:

> 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, что бы это ни стоило. Может ли кто-нибудь помочь мне исправить это? Я успешно запустил этот код с другим набором данных, который был отформатирован одинаково, и я не могу понять, что здесь происходит.

Ответ 1

Похоже, что вы добавили дополнительный + в начале каждой строки, который R интерпретирует как унарный оператор (например, - интерпретируется как отрицание, а не вычитание). Я думаю, что будет работать

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? Консоль использует + в начале строки, когда вход неполный.

Ответ 2

Это известная неприятность, когда размещение многострочных команд в R. (При использовании source() a script вы можете получить другое поведение при копировании и вставке строк, как с многострочной, так и с комментариями).

Правило: всегда помещает оборванное "+" в конец строки, так что R знает, что команда недоделана:

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

Не ставьте висячие "+" в начале строки, так как это щекочет это Error in "+ geom_whatever2(...) invalid argument to unary operator"

И, очевидно, не ставьте болванку "+" на обоих концах и начинайте с того, что это синтаксическая ошибка. Итак, изучите привычку быть последовательным: всегда добавляйте "+" в конец строки.

ср. ответьте на "Разделить код на несколько строк в R script"

Ответ 3

Это оператор "+" в начале строки, который срабатывает (не только то, что вы используете два оператора "+" последовательно). Оператор "+" может использоваться в конце строк, но не в начале.

Это работает:

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

Нет:

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

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

Вы также не можете использовать два оператора "+", которые в этом случае вы сделали. Но чтобы исправить это, вам придется выборочно удалить те, которые были в начале строк.