Donatas G. wrote: > I have a data.frame with ~100 columns and I need a barplot for each column > produced and saved in some directory. > > I am not sure it is possible - so please help me. > > this is my loop that does not work... > > vars <- list (substitute (G01_01), substitute (G01_02), substitute (G01_03), > substitute (G01_04)) > results <- data.frame ('Variable Name'=rep (NA, length (vars)), > check.names=FALSE) > for (i in 1:length (vars)) { > barplot(table(i),xlab=i,ylab="NuomonÄ—s") > dev.copy(png, filename="/my/dir/barplot.i.png", height=600, width=600) > dev.off() > } > > questions: > > Is it possible to use the i somewhere _within_ a file name? (like it is > possible in other programming or scripting languages?)
Oh yes, very easy. two options: 1) Use sprintf, e.g. filename=sprintf("/my/dir/barplot.%d.png",i) 2) Use paste, i.e., filename=paste('/my/dir/barplot.',i,'.png',sep='') > Since I hate to type in all the variables (they go from G01_01 to G01_10 and > then from G02_01 to G02_10 and so on), is it possible to shorten this list by > putting there another loop, applying some programming thing or so? Well sure! Just loop over each column of your data frame. The column names are gotten from the names() function. I don't see a data frame in your code so I assume d is below: for (i in names(d)){ barplot(d[,i],filename=sprintf("/my/dir/barplot.%s.png",i)) } Notice that names(d) returns a character vector, thus i is a string, whereas in my sprintf example in 1) presumed it an int. Also, be sure to read up on the apply family of functions as an alternative to using loops in R code. Jeff -- http://biostat.mc.vanderbilt.edu/JeffreyHorner ______________________________________________ R-help@stat.math.ethz.ch 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.