Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to iterate over file names in a R script?

A very simple R script adds a ascending row index to a textfile "0.txt" and also adds a header "time" to it. After that the data is written to a file "0-edit.txt"

data<-read.table("0.txt", header=TRUE,sep=",",row.names= NULL);
colnames(data)[1] = "time"
write.table(data,quote=FALSE,sep=", ","0-edit.txt");

Assume i have 4 files called 0.txt, 1.txt, 2.txt, ...in the same folder, how can I use a counter (or something else) to iterate over those file names in my script?

like image 357
Martin H Avatar asked Jan 31 '11 17:01

Martin H


2 Answers

Here is a solution without a loop using lapply:

infiles <- dir(pattern='\\.txt$')

change.files <- function(file){
  data <- read.table(file, header=TRUE, sep=",", row.names=NULL)
  colnames(data)[1] = "time"
  write.table(data, quote=FALSE, sep=", ", sub("\\.txt$","-edit.txt", file))
}

lapply(infiles , change.files)

For me the real advantage of this approach is that you can easily run it in parallel using mclapply (from multicore package) instead of lapply. Or parLapply from snow. Also to me it looks nicer.

like image 149
Matti Pastell Avatar answered Sep 20 '22 06:09

Matti Pastell


for(i in 0:3) {
  infile <- paste(i,".txt",sep="")
  outfile <- paste(i,"-edit.txt",sep="")

  data <- read.table(infile,header=TRUE,sep=",",row.names=NULL)
  colnames(data)[1] = "time"
  write.table(data,quote=FALSE,sep=", ",outfile)
}
like image 45
Joshua Ulrich Avatar answered Sep 23 '22 06:09

Joshua Ulrich