2014-07-10 85 views
1

我想写的是具有可变参数的AES调用ggplot一个函数里面AES列:通过不同的功能

hmean <- function(data, column, Label=label){ 
    ggplot(data,aes(column)) + 
    geom_histogram() + 
    facet_wrap(~Antibody,ncol=2) + 
    ggtitle(paste("Mean Antibody Counts (Log2) for ",Label," stain")) 
} 
hmean(Log2Means,Primary.Mean, Label="Primary") 
Error in eval(expr, envir, enclos) : object 'column' not found 

Primary.Mean是变化的参数(我有多个手段)。在此之后各个岗位我都试过

  1. 通过列名报价,不需要加引号(其中yieds无论是“令人惊喜的字符串常量”或“找不到对象错误)
  2. 建立一个本地ennvironment(foo <-environment()其次在ggplot一个environment= ARG)
  3. 使用它们的data2$column <- data[,column]

无创建数据集的新副本出现ggplot内工作。我怎么写的作品?功能我会用不同的data.frames和列称之为:

hmean(Log2Means, Primary.mean, Label="Primary") 
hmean(Log2Means, Secondary.mean, Label="Secondary") 
hmean(SomeOtherFrame, SomeColumn, Label="Pretty Label") 
+0

有没有任何答案对您有帮助?如果是这样,不要忘记接受:https://stackoverflow.com/help/someone-answers – ROLO

回答

1

你可以试试这个:

hmean <- function(data, column, Label=label){ 

    # cool trick? 
    data$pColumn <- data[, column] 

    ggplot(data,aes(pColumn)) + 
    geom_histogram() + 
    facet_wrap(~Antibody,ncol=2) + 
    ggtitle(paste("Mean Antibody Counts (Log2) for ",Label," stain")) 
} 
hmean(Log2Means,'Primary.Mean', Label="Primary") 
2

您的例子并不reproducible,但很可能这将工作:

hmean <- function(data, column, Label=label){ 
    ggplot(data, do.call("aes", list(y = substitute(column)))) + 
     geom_histogram() + 
     facet_wrap(~Antibody,ncol=2) + 
     ggtitle(paste("Mean Antibody Counts (Log2) for ",Label," stain")) 
} 

hmean(Log2Means,Primary.Mean, Label="Primary") 

如果您需要更多参数到aes,请这样做:

do.call("aes", list(y = substitute(function_parameter), x = quote(literal_parameter))) 
-1

我最终得到它与aes_string()调用:aes_string(x=foo, y=y, colour=color),我们ycolor也被定义为外部ggplot()