当前位置 : 首页 » 互动问答 » 正文

R:来自multiline ggplot2命令的“一元运算符错误”

分类 : 互动问答 | 发布时间 : 2013-06-22 00:55:45 | 评论 : 3 | 浏览 : 90361 | 喜欢 : 33

我正在使用ggplot2对两种不同物种进行箱线图比较,如下面第三列所示:<notranslate >> library(reshape2) >图书馆(ggplot2) > melt.data = melt(actb.raw.data) > head(actb.raw.data)   区域表达物种 1 CG -0.17686667人类 2 CG -0.06506667人类 3 DG 1.04590000人 4 CA1 1.94093333人 5 CA2 1.55023333人 6 CA3 1.75800000人 >头(melt.data)   区域物种变量值 1 CG人类表达-0.17686667 2 CG人类表达-0.06506667 3 DG人类表达1.04590000 4 CA1人类表达1.94093333 5 CA2人类表达1.55023333 6 CA3人类表达1.75800000

但是,当我运行以下代码时:

ggplot(combined.data,aes(x = region,y = expression,fill = species))+ + geom_boxplot()+ + scale_fill_manual(values = c(“yellow”,“orange”)) + ggtitle(“ACTB的表达式比较”) + theme(axis.text.x = element_text(angle = 90,face =“bold”,color =“black”))

我收到此错误:<notranslate >> ggplot(actb.raw.data,aes(x = region,y = expression,fill = species))+
+ + geom_boxplot()+
+ + scale_fill_manual(values = c(“yellow”,“orange”))
+ geom_boxplot()出错:一元运算符的参数无效
> + ggtitle(“人类与猕猴的ACTB表达”)
+ ggtitle中的错误(“人类与猕猴的ACTB表达”):
 一元运算符的无效参数
> + theme(axis.text.x = element_text(angle = 90,face =“bold”,color =“black”))
继承错误(x,“主题”):缺少参数“e2”,没有默认值

当我使用变量melt.data运行时,也会发生这种情况。有人可以帮我解决这个问题吗?我之前使用格式相同的不同数据集成功运行此代码,我无法弄清楚这里出了什么问题。

> 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

This also happens when I run using the variable melt.data, for whatever that's worth. Can someone help me fix this? I've run this code successfully before with a different dataset that was formatted identically, and I can't figure out what's going wrong here.

回答(3)

  • 1楼
  • 看起来您可能在每行的开头插入了一个额外的+,R将其解释为一元运算符(如-解释为否定,而不是减法)。我认为可行的是

     ggplot(combined.data,aes(x = region,y = expression,fill = species))+
        geom_boxplot()+
        scale_fill_manual(values = c(“yellow”,“orange”))+
        ggtitle(“ACTB的表达式比较”)+
        theme(axis.text.x = element_text(angle = 90,face =“bold”,color =“black”))
    

    也许您从R控制台的输出中复制并粘贴?当输入不完整时,控制台在行的开头使用+

  • 2楼
  • 在R 时,这是一个众所周知的麻烦。 (当你将source()一个脚本复制并粘贴到多行和注释时,你可以得到不同的行为)

    Rule:中发布多行命令总是把悬空的'+'放在end的一行,所以R知道命令未完成:

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

    不要把悬挂的'+'放在行的开头,因为这会使这个发痒 “+ geom_whatever2(...)一元运算符的无效参数”中的错误

    显然不要在两端放置悬空“+”并开始,因为这是语法错误。所以,要养成一致的习惯:总是把'+'放在行尾。

    cf. 回答“在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()
    
    * + geom_boxplot()出错:
    一元运算符的无效参数*
    

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

相关阅读:

Append an object to a list in R in amortized constant time, O(1)?

R: Break for loop

How to sort a dataframe by multiple column(s)?

Drop data frame columns by name

Creating multiline strings in JavaScript

Plot two graphs in same plot in R

Plot two graphs in same plot in R

删除data.frame中包含全部或部分NA(缺失值)的行

Changing column names of a data frame

How to join (merge) data frames (inner, outer, left, right)?