【问题标题】:Pass a condition to a function so that function works for all the values of the condition passed....in R将条件传递给函数,以便函数适用于传递的条件的所有值......在R中
【发布时间】:2014-05-23 04:10:58
【问题描述】:

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

我想要什么?

我的功能是这样的。

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 运行相同的函数并再生成两个图,然后使用网格组合所有这些。安排。

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

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

在我从命令行读取并将它们存储在“variable1”和“variable2”中之后,如果我在上面的命令中直接调用它们,它就不起作用了。我应该怎么做才能在命令行中输入这两个变量值。

【问题讨论】:

  • 那么i就是dat.frame中带有变量名的字符串?而Endat.frame 中的另一列?您想在这两列相等的地方进行子集化吗?在dat.frame 中还有另外两个名为hoursvariable 的列是您真正想要绘制的?
  • @MrFlick 我已添加 dta.frame 请检查。

标签: r function ggplot2


【解决方案1】:

我做了一些更改并在您的示例数据上运行它。基本上我只需要使用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)

(我不知道为什么图例的颜色在图像中被弄乱了,它们在屏幕上看起来很好)

对于子集,使用

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

【讨论】:

  • 我可以使用我发布的原始函数处理单变量图。但现在我需要为两个 En 值分别处理两个变量。表示 Var1 ==> En = 1,En = 2(两个图)和 Var2 ==> En=1,En=2(再次是两个图)。
  • 谢谢你,这正是我想要的。我对变量调用还有一个简单的问题。我在最后添加了我的问题,请检查。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多