我正在使用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运行时,也会发生这种情况。有人可以帮我解决这个问题吗?我之前使用格式相同的不同数据集成功运行此代码,我无法弄清楚这里出了什么问题。
答案 0 :(得分:70)
看起来您可能在每行的开头插入了一个额外的+
,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控制台的输出中复制并粘贴了?当输入不完整时,控制台在行的开头使用+
。
答案 1 :(得分:20)
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"
显然,不要把悬挂' +'在两端并开始,因为那是一个语法错误。所以,要养成保持一致的习惯:始终把' +'在行尾。
答案 2 :(得分:4)
这就是行开头的“+”运算符(不仅仅是你连续使用两个'+'运算符)。 '+'运算符可以在行的末尾使用,但不能在开头使用。
这有效:
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*
你也不能使用两个'+'运算符,在这种情况下你已经完成了。但要解决这个问题,你必须在行的开头有选择地删除它们。
答案 3 :(得分:0)
尝试将语法合并为一行。这将清除错误