R: "ошибка унарного оператора" из многострочной команды ggplot2
Я использую ggplot2 для сравнения boxplot двух разных видов, как указано в третьем столбце, показанном ниже:
> 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
Это также происходит, когда я запускаю с помощью переменной расплава.Дейта, чего бы это ни стоило. Кто-нибудь может помочь мне это исправить? Я успешно запускал этот код раньше с другим набором данных, который был отформатирован одинаково, и я не могу выясни, что здесь не так.
3 ответов
похоже, вы могли бы вставить дополнительный +
в начале каждой строки, которую 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? Консоль использует +
в начале строки, когда входные данные неполные.
Это хорошо известная неприятность, когда публикации многострочных команд в R. (Вы можете получить другое поведение, когда вы source()
скрипт для копирования и вставки строк, как с многострочными, так и с комментариями)
правила: всегда ставьте болтающиеся " + " на конец строки, чтобы R знал, что команда не завершена:
ggplot(...) + geom_whatever1(...) +
geom_whatever2(...) +
stat_whatever3(...) +
geom_title(...) + scale_y_log10(...)
не ставьте болтающийся "+" в начале строки, так как это щекочет это
Error in "+ geom_whatever2(...) invalid argument to unary operator"
и, очевидно, не ставьте висячие " + " в конце и начале, так как это синтаксическая ошибка. Итак, изучите привычку быть последовательным: всегда ставьте " + " в конце строки.
cf. ответ на "разделить код на несколько строк в сценарии R"
это оператор " + "в начале строки, который отключает вещи (не только то, что вы используете два оператора" + " последовательно). Оператор " + " может использоваться в конце строк, но не в начале.
это работает:
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*
вы также не можете использовать два оператора'+', что в данном случае вы сделали. Но чтобы исправить это, вам придется выборочно удалить их в начале строк.