如何在R脚本中迭代文件名?

Mar*_*n H 10 filenames for-loop r file

一个非常简单的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");
Run Code Online (Sandbox Code Playgroud)

假设我在同一文件夹中有4个名为0.txt,1.txt,2.txt,...的文件,我如何使用计数器(或其他东西)在我的脚本中迭代这些文件名?

Jos*_*ich 14

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)
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*ell 14

这是一个没有使用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)
Run Code Online (Sandbox Code Playgroud)

对我来说,这种方法的真正优势在于您可以使用mclapply(来自多核包)而不是lapply 轻松地并行运行它.或者parLapply来自雪.对我来说它看起来更好.


小智 7

试试这个:

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

您可以使用正则表达式进行模式匹配,因此如果您有大量文本文件但只想要具有数字名称的文本文件,请使用"[0-9] .txt"或"[0-3] .txt".