这可能很愚蠢,但我不知道怎么做,
我想要什么?
我的功能是这样的。
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;如果我在上面的命令中直接调用它们就行不通了。如何在命令行中输入这两个变量值。
答案 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)
(我不确定为什么传说中的颜色会在图像中混乱,它们在屏幕上看起来很好)
对于子集,请使用
myvars <- c("var1", "var2")
subset(a[,myvars], a[,c("En","Mn","Hours")], FUN=mean)