2014-04-19 37 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