Как перебрать имена файлов в R-скрипте? - PullRequest
8 голосов
/ 31 января 2011

Очень простой R-скрипт добавляет индекс строки по возрастанию в текстовый файл «0.txt», а также добавляет к нему заголовок «time».После этого данные записываются в файл «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");

Предположим, у меня есть 4 файла с именами 0.txt, 1.txt, 2.txt, ... в той же папкеКак я могу использовать счетчик (или что-то еще) для перебора этих имен файлов в моем сценарии?

Ответы [ 4 ]

13 голосов
/ 31 января 2011
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)
}
12 голосов
/ 01 февраля 2011

Вот решение без цикла, использующее 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)

Для меня реальное преимущество этого подхода в том, что вы можете легко запустить его параллельно, используя mclapply (из многоядерного пакета) вместо lapply. Или parLapply от снега. Также для меня это выглядит лучше.

7 голосов
/ 01 февраля 2011

Попробуйте это:

files <- list.files(path="", pattern=".txt", all.files=T, full.names=T)
for (file in files) {
## do stuff
}

Вы можете использовать регулярные выражения для сопоставления с образцом, поэтому, если у вас много текстовых файлов, но вы хотите получить только те, которые имеют числовые имена, используйте "[0-9].txt "или" [0-3] .txt ".

3 голосов
/ 31 января 2011

В более общем смысле вы можете использовать dir(), чтобы получить файлы в данном каталоге, и select, чтобы ограничить его файлами .txt.

file.dir <- "/path/to/files"
for(infile in dir(file.dir, pattern="\\.txt$")) {
  outfile <- gsub("\\.txt$","-edit\\.txt", infile)

  data <- read.table(infile,header=TRUE,sep=",",row.names=NULL)
  colnames(data)[1] = "time"
  write.table(data,quote=FALSE,sep=", ",outfile)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...