2014-04-19 38 views
0

我是R新手。我一直在努力研究我的代碼,但我無法理解哪個「部件」會去哪裏。這是我得到的代碼:在R中創建3個圖的用戶定義函數時遇到問題。

df=10 
boxplot(rt(1000,df),rnorm(1000),names=c(paste("t,df=",df),"Standard Normal"))    
x=seq(0,1,length=150) 
plot(qt(x,df),qnorm(x),xlab=paste("t, df=",df),ylab="standard 
Normal",main="qq-plot") 
abline(0,1) 
curve(dnorm(x),-3.5,3.5,main="Density Comparison") 
curve(dt(x,df),lty=2,add=TRUE) 
legend("topright",legend=c("standard 
normal",paste("t,df=",df)),lty=c(1,2)) 

我應該創建用戶定義的函數,它接受作爲DF的輸入和輸出3種類型的地塊。我需要使用:df = 5,10,25和50.

這是我到目前爲止。請啞下來對我來說,因爲我不是很熟悉,其中R術語和我不知道我把東西放在他們應該去..:

my.plot = function(n, df) { 
a = rt(n,df) 
b=rnorm(1000) 
x= seq(0,1,length=150) 
qt=qt(x,df) 
qn=qnorm(x) 
dn=dnorm(x) 
ledt=dt(x,df) 
n=1000 
} 
thebox= boxplot(a,b,names=c(paste("t,df=",df),"Stand rd Normal")) #1boxplot. 
theplot= plot(qt,qn,xlab=paste("t, df=",df),ylab="standard Normal",main="qq-plot")  
abline(0,1) 
onecurve= curve(dn,-3.5,3.5,main="Density Comparison") #density curve 
twocurve= curve(ledt, lty=2,add=TRUE) 
legend("topright",legend=c("standard normal",paste("t,df=",df)),lty=c(1,2) 
} 
return(thebox) 
return(theplot) 
return(oneplot) 
return(twocurve) 
} 
par(mfrow=c(1,3)) 
my.plot(1000,5) 
my.plot(1000,10) 
my.plot(1000,25) 
my.plot(1000,50) 

回答

0

它的工作原理是這樣的: 1.您只有輸入參數是df。所以你的函數只有一個輸入變量。 2.由於您已具有剩餘的代碼功能(即在定義df後)可以按原樣使用代碼。

下面是演示代碼的簡單實現。您可以修改它以滿足您的需求。

my.plot <- function(df) { 
    par(mfrow=c(1,3)) 
    boxplot(rt(1000,df),rnorm(1000),names=c(paste("t,df=",df),"Standard Normal"))    
    x=seq(0,1,length=150) 
    plot(qt(x,df),qnorm(x),xlab=paste("t, df=",df),ylab="standard 
    Normal",main="qq-plot") 
    abline(0,1) 
    curve(dnorm(x),-3.5,3.5,main="Density Comparison") 
    curve(dt(x,df),lty=2,add=TRUE) 
    legend("topright",legend=c("standard 
          normal",paste("t,df=",df)),lty=c(1,2)) 
    par(mfrow=c(1,1)) 
} 

my.plot(5) 
for(df in c(5,10,15,25)) my.plot(df) 
+0

我對最後兩行感到困惑。我認爲它應該是'my.plot(5)'? –

+0

你是對的...我已經寫在我的控制檯功能和測試,然後定製到原來的選擇... 剛剛更新...請告訴我它是如何工作的! – Shambho

+0

哇非常感謝你的幫助。我試了一下,它確實有效。唯一奇怪的是,不是打印五個1x3的地塊,而是隻打印最後一個df = 25的地塊。無論如何,謝謝Shambho。 – user3550614