[R] Using R to create pdf's from each file in a directory

Jeffrey Horner jeff.horner at vanderbilt.edu
Sat Apr 21 06:10:12 CEST 2007


gecko951 wrote:
> The Platform I am using R on is RHEL3.  I run a bash script that collects
> data into many CSV files and have been processing them one at a time on my
> local machine with an excel macro.  I would like to use R to take data
> points from each of the CSV files and create line graphs in PDF format
> because it will save me ALOT of time.  I am able to successfully do this
> when I call the file name directly...however my script bombs when I try to
> do multiple files.  I would like the created pdf's to have the same filename
> as the original csv files.  I have looked quite a bit and not found much
> help on "batch processing" an entire directory.  My current code is as
> follows:
> 
> list <- dir("/tmp/data")
> for(x in list){
> d <- read.table(x, sep="\t", header=TRUE) # read data
> pdf("/tmp/graph/x.pdf")                              # file for graph
> plot(d$BlockSeqNum, d$MBs,                              # Blocks as x, MB/s
> as y     
>      type="l",                                     # plot lines, not points
>      xlab="Blocks",                                  # label x axis
>      ylab="MB/s",                                  # label y axis
>      main=x)          # add title
> dev.off()                                          # close file
> q()                                                # quit

Below will get you closer to what you want, assuming that your files end 
in .csv, which they should, especially if you'll be creating new files 
in the same directory with a different extension. You certainly don't 
want to re-run your R code and call read.table on a pdf. Another point 
is that your current working directory for R, returned by getwd(), is 
already '/tmp/data'. Otherwise read.table wouldn't work, and a more 
portable solution is to use a variable to hold the directory name:

workdir <- '/tmp/data'
for (x in dir(workdir,pattern='.csv$')){
   d <- read.table(paste(workdir,'/',x,sep=''), sep="\t", header=TRUE)
   pdf(paste(workdir,'/',sub('.csv$','.pdf',x),sep=''))
   plot(d$BlockSeqNum, d$MBs,
     type="l",
     xlab="Blocks",
     ylab="MB/s",
     main=x)
   dev.off()
}
q()

Best,

Jeff
---
http://biostat.mc.vanderbilt.edu/JeffreyHorner



More information about the R-help mailing list