37

我正在使用 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 运行时,也会发生这种情况,无论它值多少钱。有人可以帮我解决这个问题吗?我之前使用格式相同的不同数据集成功运行了此代码,但我无法弄清楚这里出了什么问题。

4

4 回答 4

74

看起来您可能+在每行的开头插入了一个额外的内容,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 控制台的输出中复制并粘贴?当输入不完整时,控制台+在行首使用。

于 2013-06-21T17:01:23.853 回答
23

在 R 中发布多行命令时,这是众所周知的麻烦事。source()(当您使用脚本复制和粘贴行时,您可以获得不同的行为,包括多行和注释)

规则:始终将悬空的“+”放在行,以便 R 知道命令未完成:

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

不要将悬空的“+”放在行首,因为这会引起错误:

Error in "+ geom_whatever2(...) invalid argument to unary operator"

显然不要在两端和开头都加上悬空的“+”,因为这是一个语法错误。

因此,要养成保持一致的习惯:始终将“+”放在行尾。

参看。回答“在 R 脚本中将代码拆分为多行”

于 2014-03-29T12:56:13.090 回答
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*

您也不能使用两个“+”运算符,在这种情况下您已经完成了。但要解决这个问题,您必须有选择地删除行首的那些。

于 2013-11-06T21:30:49.157 回答
0

尝试将语法合并到一行中。这将清除错误

于 2019-11-28T07:46:35.137 回答