修改ggplot函数外的aes列表

Osd*_*orp 3 r ggplot2 aesthetics

这是我在论坛中关于R的第一个问题,如果我在制定问题或指定标题时犯了错误,请提前抱歉.

关键是对于ggplot的特定任务,我在ggplot函数之外定义美学,然后将其作为参数提供.

>mytmpaes<-aes(x=Sample,y=ddCt.lin,ymax=ddCt.lin+ddCt.lin.sd,ymin=ddCt.linddCt.lin.sd,fill=factor(endog))
>my.ggplot(x,mytmpaes)
Run Code Online (Sandbox Code Playgroud)

但有时我只想修改mytmpaes列表中的一些对象,而不是使用aes()定义所有这些对象.但是,我真的不知道如何处理这个特殊列表.aes列表如下所示:

>mytmpaes
List of 5
$ x    : symbol Sample
$ y    : symbol ddCt.lin
$ ymax : language ddCt.lin + ddCt.lin.sd
$ ymin : language ddCt.lin - ddCt.lin.sd
$ fill : language factor(Rep)
Run Code Online (Sandbox Code Playgroud)

我想出了如何修改其中一些像这样:

 > mytmpaes$x<-as.symbol('Names')
 > mytmpaes$fill<-call('factor',quote(target))
 > mytmpaes
 List of 5
  $ x   : symbol Names
  $ y   : symbol ddCt.lin
  $ ymax: language ddCt.lin + ddCt.lin.sd
  $ ymin: language ddCt.lin - ddCt.lin.sd
  $ fill: language factor(endog)
Run Code Online (Sandbox Code Playgroud)

但是,我找不到用类似表达式修改ymax或ymin的方法.例如,我想将ymax更改为'ddCt.log2 - ddCt.log2.sd'.

有人可以给我一些建议吗?另外,有没有更正确的方法来修改aes列表?

谢谢,

亚历杭德罗

sha*_*dow 5

如果你这么做了,我建议你使用类似的功能aes:

aes.update <- function (aes, ...) 
{
  aes_new <- structure(as.list(match.call()[-c(1,2)]), class="uneval")
  aes_new <- ggplot2:::rename_aes(aes_new)
  aes[names(aes_new)] <- aes_new
}
Run Code Online (Sandbox Code Playgroud)

然后你可以一次更新所有内容

mytmpaes_new <- aes.update(mytmpaes, x=Names, ymax=ddCt.log2 - ddCt.log2.sd)
Run Code Online (Sandbox Code Playgroud)