【问题标题】:How to loop through folders and apply function on files in these folders如何遍历文件夹并对这些文件夹中的文件应用功能
【发布时间】:2020-11-03 06:43:16
【问题描述】:

我有多个名称相似但不同的文件夹,每个文件夹包含名称相似但不同的 csv 文件。

例如,我有三个名为“output”的文件夹,每个文件夹包含“image.csv”和“cells.csv”。

如何遍历每个“输出”文件夹,然后读取文件夹中的每个 csv 文件并将函数应用于这些文件? 这是我尝试过的:

首先,我列出了名为“输出”的文件夹:

dirs<-list.dirs()
dirs<-dirs[grepl("output",dirs)]

然后我想设置一个函数来加入两个 csv 文件,如下所示(代码不完整,请帮助更正):

object_extraction<-function(x){ image<-read.csv(image.csv, header=T, sep=",") 
                                cells<-read.csv(cells.csv, header=T, sep=",")
                                object<-dplyr::inner_join(cells,image,by="ImageNumber")
                                return(object)}

最后我想通过“输出”文件夹循环上面的函数

object<-list() 
for(i in 1:length(dirs)){
object[[i]]<-object_extraction(dirs[i])

谢谢

【问题讨论】:

  • 您收到的错误信息是什么?
  • 文件错误(file,"rt"): 无法打开连接

标签: r function loops


【解决方案1】:

在函数中动态读取 csv 的路径

object_extraction<-function(x){ 
  image<-read.csv(paste0(x, '/image.csv'), header=T, sep=",") 
  #header = T and sep = ',' is default in read.csv so this should 
  #work without specifying them as well.
  cells<-read.csv(paste0(x, '/cells.csv'))
  object<-dplyr::inner_join(cells,image,by="ImageNumber")
  return(object)
}

然后将函数应用到每个文件夹。

dirs <- list.dirs(recursive=FALSE)
dirs <- grep('output', dirs, value = TRUE)
result <- lapply(dirs, object_extraction)

【讨论】:

    【解决方案2】:

    我可以在您的代码中发现两个错误:

    您需要使用dirs变量的目录名,例如:

    object_extraction<-function(x){ 
      image<-read.csv(file.path(x, "image.csv"), header=T, sep=",") 
      cells<-read.csv(file.path(x, "cells.csv"), header=T, sep=",")
      object<-dplyr::inner_join(cells,image,by="ImageNumber")
      return(object)
    }
    

    并且文件名应该是字符串,"image.csv""cells.csv"

    HTH

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2017-07-18
      • 2020-04-09
      相关资源
      最近更新 更多