【问题标题】:How to iterate over file names in a R script?如何遍历 R 脚本中的文件名?
【发布时间】:2011-06-18 18:07:51
【问题描述】:

一个非常简单的 R 脚本将升序行索引添加到文本文件“0.txt”,并为其添加标题“时间”。之后数据被写入文件“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、...的文件,我如何使用计数器(或其他东西)在我的脚本中遍历这些文件名?

【问题讨论】:

    标签: file r for-loop filenames


    【解决方案1】:
    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)
    }
    

    【讨论】:

    • 非常感谢,粘贴功能不知怎的逃过了我的视线
    • @Martin:不客气。您还可以找到方便的?file.path。
    【解决方案2】:

    这是一个使用 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。对我来说也更好看。

    【讨论】:

    • 这只是在另一项任务中派上用场,我不得不同意,它很优雅
    【解决方案3】:

    试试这个:

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

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

    【讨论】:

      【解决方案4】:

      更一般地,您可以使用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)
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 2017-02-25
        • 2020-09-06
        • 2011-03-21
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多