我想在r中有一個子程序來計算均值和範圍。因此,它應該返回一個完整的ggplot,它將在main中處理(保存或打印)。如何從一個子類中返回一個ggplot對象?
下面是代碼:
myqcc<-function(messung, sample)
{
require(ggplot2)
y<-cbind(messung,sample)
x1<-aggregate(messung~sample,data=y,mean)
myrange<-aggregate(messung~sample,data=y,range)
stat<-cbind(x1,"range"=myrange$messung[,2]-myrange$messung[,1])
x2<-mean(stat$messung)
range1<-mean(stat$range)
A2<-0.577
D3<-0
D4<-2.115
UCLm<-x2+A2*range1
LCLm<-x2-A2*range1
UCLr<-range1*D4
LCLr<-range1*D3
g1<-ggplot(stat,aes(x=sample,y=messung)) + geom_line() + geom_point() + geom_hline(aes(LCLm), colour="#BB0000", linetype="dashed") +geom_hline(aes(UCLm), colour="#BB0000", linetype="dashed") + ggtitle("X-Bar Chart for current samples")
return(g1)
}
ggsave(myqcc(x,y), file="Stichprobe.jpg", width=9, height=4,dpi=100)
運行它,結果在 「LCLm無法找到」。
下面是調試輸出:
myqcc<-function(messung, sample)
+ {
+
+ require(ggplot2)
+ y<-cbind(messung,sample)
+ x1<-aggregate(messung~sample,data=y,mean)
+ myrange<-aggregate(messung~sample,data=y,range)
+ stat<-cbind(x1,"range"=myrange$messung[,2]-myrange$messung[,1])
+ x2<-mean(stat$messung)
+ range1<-mean(stat$range)
+ A2<-0.577
+ D3<-0
+ D4<-2.115
+
+ UCLm<-x2+A2*range1
+ LCLm<-x2-A2*range1
+ UCLr<-range1*D4
+ LCLr<-range1*D3
+
+ g1<-ggplot(mystat,aes(x=sample,y=messung)) + geom_line() + geom_point() + geom_hline(aes(LCLm), colour="#BB0000", linetype="dashed") +geom_hline(aes(UCLm), colour="#BB0000", linetype="dashed") + ggtitle("X- Bar Chart for current samples")
+ browser()
+ return(g1)
+ }
> ggsave(myqcc(x,y), file="Stichprobe.jpg", width=9, height=4,dpi=100)
Called from: myqcc(x, y)
Browse[1]> LCLm
[1] 2.970867
Browse[1]>
debug bei #22:return(g1)
Browse[2]>
Fehler in eval(expr, envir, enclos) : Objekt 'LCLm' nicht gefunden
正如你所看到的,LCLm被定義並具有價值,但在ggplot不能使用。