Hi Rene, two reasons : - you have to specify the par first in your function, before plotting. - you say for (i in length(f)), but length(f) is a vector with only one value. The correct syntax is :
kk = function(f) { par(mfrow=c(1,length(f))) ls=as.character(f) for (i in 1:length(f)) { pie(dataset.table[ls[i],],main=ls[i]) box() } } There is another important problem : this function only works if dataset.table is specified in your environment. I would do something like this : dataset.table <- table(data.frame(var1=c(1,2,3,1,2,3,1),colour=c("a","b","c","c","a","b","b") )) kk = function(f,data=dataset.table) { par(mfrow=c(3,2)) ls=as.character(f) for (i in 1:length(f)) { pie(data[ls[i],],main=ls[i]) box() } } kk(1:3) newdata <- table(data.frame(var1=c(1,2,3,1,2,3,1,2,3,1),colour=c("a","b","c","c","a","b","b","c","b","a") )) kk(1:3,data=newdata) This allows you to use the function on other datasets, but you don't have to specify your default dataset each time. Cheers Joris On Mon, Oct 19, 2009 at 1:33 PM, Rene <kaixinma...@gmail.com> wrote: > Thanks Joris for the prompt reply. > > I have tried to use par(mfrow=(3,3)), then I type kk(1:3), but it still ends > up showing the last plot only instead of 3 plots. > > I think there must be sth wrong with my loop code, can you see where I did > wrong? > > dataset.table <- > table(data.frame(var1=c(1,2,3,1,2,3,1),colour=c("a","b","c","c","a","b","b") > )) > kk = function(f) > { > ls=as.character(f) > for (i in length(f)) > { > pie(dataset.table[ls[i],],main=ls[i]) > box() > } > } > par(mfrow=(3,2)) > kk(1:3) > > > Thanks a lot! > > Rene > > > -----Original Message----- > From: joris meys [mailto:jorism...@gmail.com] > Sent: Tuesday, 20 October 2009 12:11 a.m. > To: Rene > Subject: Re: [R] loop and plot > > Hi Rene, > > the problem is probably due to the fact that R will send all plots to > the same graphical output window. Each next plot just replaces the > previous one. > > if it's only a few plots, you can divide the graphical window with the > commands par(mfrow=...) (see ?par) or layout(matrix(...)) (see > ?layout). Otherwise you have to ask the window to wait before > refreshing. par(ask=TRUE) (see ?par as well) > > Hope this helps > Cheers > Joris > > On Mon, Oct 19, 2009 at 12:14 PM, Rene <kaixinma...@gmail.com> wrote: >> Dear all, >> >> I am stuck at applying loop function for creating separated plots. >> >> I have coding like below: >> >> dataset.table <- >> > table(data.frame(var1=c(1,2,3,1,2,3,1),colour=c("a","b","c","c","a","b","b") >> )) >> kk = function(f) >> { >> ls=as.character(f) >> pie(dataset.table[ls,],main=ls) >> box() >> } >> >> kk(1) >> kk(2) >> kk(3) >> >> By using above code, I can create 3 single plot respectively, but when I >> type kk(1:3), obviously it will not work. >> >> I know I have to vectorise the coding, then I can use command kk(1:3). I > try >> to use loop: >> >> kk = function(f) >> { >> ls=as.character(f) >> for (i in length(f)) >> { >> pie(dataset.table[ls[i],],main=ls[i]) >> box() >> } >> } >> kk(1:3) >> >> the above code only gives me the last pie plot (ie. kk(3) plot) instead of > 3 >> plots respectively. >> >> Can someone please guide me how to revise the loop coding, and produce 3 >> separated plots one after another on the screen by typing kk(1:3)? >> >> Thanks a lot. >> >> Rene. >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.