将条件传递给函数,以便函数适用于R中传递的条件的所有值

时间:2014-05-23 04:10:58

标签: r function ggplot2

这可能很愚蠢,但我不知道怎么做,

我想要什么?

我的功能是这样的。

plot_exp <- 
function(i){  
    dat <- subset(dat.frame,En == i )
    ggplot(dat,aes(x=hours, y=variable, fill = Mn)) + 
      geom_point(aes(x=hours, y=variable, fill = Mn),size = 3,color = Mi) + geom_smooth(stat= "smooth" , alpha = I(0.01))
  }
ll <- lapply(seq_len(EXP), plot_exp)
do.call(grid.arrange,  ll)

我有两个变量 Var1,Var2(将通过命令行传递,因此无法使用子集对其进行分组)

我想为var1和var2运行上面的函数,我的函数为每个完整的执行产生两个图。所以现在它应该为var1生成2个图,为var2生成两个图。

我只是想知道如何在这里应用逻辑来处理我想要的东西?谢谢

这就是data.frame的样子

En     Mn    Hours  var1       var2
1      1     1      0.1023488  0.6534707
1      1     2      0.1254325  0.5423215
1      1     3      0.1523245  0.2542354
1      2     1      0.1225425  0.2154533
1      2     2      0.1452354  0.4521255
1      2     3      0.1853324  0.2545545
2      1     1      0.1452369  0.2321542
2      1     2      0.1241241  0.2525212
2      1     3      0.0542232  0.2626214
2      2     1      0.8542154  0.2154522 
2      2     2      0.0215420  0.5245125
2      2     3      0.2541254  0.2542512

我将把上面的data.frame表作为输入,我想为var1运行一次我的函数并生成两个图,然后再为var2运行相同的函数并再生成两个图,然后使用grid组合所有。安排。

我必须从命令行读取变量值,然后我必须执行以下操作以从主数据框中获取所需数据。

subset((aggregate(cbind(variable1,variable2)~En+Mn+Hours,a, FUN=mean)))

从命令行读取并将它们存储在&#34; variable1&#34;和&#34;变量2&#34;如果我在上面的命令中直接调用它们就行不通了。如何在命令行中输入这两个变量值。

1 个答案:

答案 0 :(得分:0)

我做了一些更改并在您的示例数据上运行它。基本上我只需要使用aes_string而不是aes来允许带有列名的变量。

myvars<-c("var1", "var2")

plot_exp <- function(i, plotvar) {  
    dat <- subset(dat.frame,En == i )
    ggplot(dat,aes_string(x="Hours", y=plotvar, fill = "Mn")) + 
       geom_point(aes(color=Mn), size = 3) + 
       geom_smooth(stat= "smooth" , alpha = I(0.01), method="loess")
  }
ll <- do.call(Map, c(plot_exp, expand.grid(i=1:2, plotvar=myvars, stringsAsFactors=F)))
do.call(grid.arrange,  ll)

(我不确定为什么传说中的颜色会在图像中混乱,它们在屏幕上看起来很好)

plot of var1 and var2

对于子集,请使用

myvars <- c("var1", "var2")
subset(a[,myvars], a[,c("En","Mn","Hours")], FUN=mean)