2013-06-21 5 views
29

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

+9

у вас, похоже, слишком много '' '' '' '' '' '' в ваших строках ... В частности, поместите все '+' в начале строк; они, по-видимому, являются остатками печатной продукции в консоли R. – baptiste

+1

Баптист правильный. Если вы вставляете результат с консоли, вы получите эту проблему. Вы можете использовать историю Rstudio или работать из файла, и это позволит вам обойти это. –

+1

Правильно! Ха-ха, это всегда так глупо. Благодаря! Сейчас работает отлично. – soosus

ответ

60

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

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* 

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

18

Это известная неприятность, когда posting multiline commands in R. (Вы можете получить различное поведение, когда вы source() сценарий, когда вы скопировать и вставить строки, как с многострочным и комментариями)

Правило: всегда положить оборванных «+» на конце из линия поэтому R знает команда незавершенная:

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

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

И очевидно, не ставят оборванным " + 'при b oth end и start, так как это синтаксическая ошибка. Итак, изучите привычку быть последовательным: всегда ставьте «+» на конец строки.

cf. answer to "Split code over multiple lines in an R script"