【问题标题】:R- How to read from multiple directories and apply function on same file names contained within different directoriesR-如何从多个目录中读取并对不同目录中包含的相同文件名应用函数
【发布时间】:2013-05-08 16:27:58
【问题描述】:

我有两个包含(共享)同名文件的目录,例如。 g.“file1”、“file2”和“file3”,可以在 dir1 和 dir2 中找到。 现在,我想在第一次迭代中从 dir1 中读取“file1”,从 dir2 中读取“file1”,并对两者进行一些处理。在第二次迭代中,“dir1/file2”和“dir2/file2”等等。

我使用以下代码从 ONE 目录中读取所有文件:

setwd("dir1")
file_list <- list.files()

process.Files <- function(file) {
myFile <- read.table(file, header=TRUE, sep="")
#process(myFile)
return(someDataFrame)
}

dataset <- do.call("cbind",lapply(file_list,
FUN=function(files){  process.Files(files)  }))

现在,我需要类似的东西:

file_list1 <- list.files("dir1/")
file_list2 <- list.files("dir2/")

compare.Files <- function(fileX,fileY) {
myFileX <- read.table(fileX, header=TRUE, sep="")
myFileY <- read.table(fileY, header=TRUE, sep="")
#compare(myFileX,myFileY)
return(someDataFrameWithComparisonResults)
}

#  I need to change this somehow to call compare.Files(files1,files2)
dataset <- do.call("cbind",lapply(file_list,
FUN=function(files){  process.Files(files)  }))

我怎样才能让它工作? 提前致谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    我会很懒,一口气列出所有文件,并使用正则表达式为每次迭代找到合适的文件。类似于

    # list all files with paths
    (x <- list.files(full.names = TRUE, recursive = TRUE)) 
    
         [1] "./figure/delez_skupin.pdf"                                   "./figure/diag_efekt_odstrela.pdf"                           
         [3] "./figure/diag_maxent.pdf"                                    "./figure/diag_teza_v_casu.pdf"                              
         [5] "./figure/diag_teza_v_casu2.pdf"                              "./figure/efekt_odstrela.pdf"                                
         [7] "./figure/fig_teza.pdf"                                       "./figure/graf_odstrel_razmerje_kategorija.pdf"              
         [9] "./figure/graf_odstrel_razmerje_kategorija1.pdf"              "./figure/graf_odstrel_razmerje_kategorija2.pdf"             
        [11] "./figure/graf_starost_v_letih_skupaj.pdf"                    "./figure/korelacija_med_odstrelom_in_sist_1.pdf"            
        [13] "./figure/korelacija_med_odstrelom_in_sist_2.pdf"             "./figure/modeliranje_maxent_sistematicno.pdf"               
        [15] "./figure/plot_glm_maxent_model1.pdf"                         "./figure/plot_glm_maxent_model2.pdf"                        
        [17] "./figure/pregled_prostorskih_podatkov.pdf"                   "./figure/prikaz_okoljskih_spremenljivk1.pdf"                
        [19] "./figure/prikaz_okoljskih_spremenljivk2.pdf"                 "./figure/prikaz_okoljskih_spremenljivk3.pdf"                
        [21] "./figure/prikaz_okoljskih_spremenljivk4.pdf"                 "./figure/priloznostna_glede_na_mesec.pdf"                   
        [23] "./figure/primerjava_spremenljivk_glede_prisotnosti.pdf"      "./figure/priprava_primerjava.pdf"                           
        [25] "./figure/razsirjenost_gamsa_tnp.pdf"                         "./figure/razsirjenost_gamsa_v_tnp.pdf"                      
        [27] "./figure/sprememba_strukture_po_mesecih.pdf"                 "./figure/sprememba_strukture_po_mesecih_abs.pdf"            
        [29] "./figure/sprememba_strukture_po_mesecih_rel.pdf"             "./figure/st_osebkov_na_leto_priloznostna.pdf"               
        [31] "./figure/st_osebkov_na_leto_sistematicna.pdf"                "./figure/teza_enoletnikov.pdf"                              
        [33] "./figure/vpliv_js_glm1.pdf"                                  "./figure/vpliv_js_glm2.pdf"                                 
    ...                                   
        [51] "./ostale_slike/naslovnica_gams.jpg"                          "./ostale_slike/nepipaj/naslovnica_gams.jpg"                 
        [53] "./ostale_slike/nepipaj/slika17_odlov_tone.jpg"               "./ostale_slike/nepipaj/slika18_odlov_irena.jpg"             
        [55] "./ostale_slike/nepipaj/slika19_odlov_irena_markica.jpg"      "./ostale_slike/nepipaj/slika20_odlov_luna.jpg"              
        [57] "./ostale_slike/nepipaj/slika21_gibanje_irena.png"            "./ostale_slike/nepipaj/slika22_gibanje_mojca.png"           
        [59] "./ostale_slike/nepipaj/slika23_gibanje_tone.png"             "./ostale_slike/nepipaj/slika24_gibanje_luna.png"            
        [61] "./ostale_slike/nepipaj/slika25_gibanje_irena_jesen_zima.png" "./ostale_slike/nepipaj/slika26_gibanje_mojca_jesen_zima.png"
        [63] "./ostale_slike/nepipaj/slika27_gibanje_tone_jesen_zima.png"  "./ostale_slike/nepipaj/slika28_graf_aktivnosti.jpg"         
        [65] "./ostale_slike/razsirjenost_gamsa_slovenija.png"             "./ostale_slike/slika17_odlov_tone.jpg"                      
        [67] "./ostale_slike/slika18_odlov_irena.jpg"                      "./ostale_slike/slika19_odlov_irena_markica.jpg"             
        [69] "./ostale_slike/slika20_odlov_luna.jpg"                       "./ostale_slike/slika21_gibanje_irena.jpg"                   
        [71] "./ostale_slike/slika22_gibanje_mojca.jpg"                    "./ostale_slike/slika23_gibanje_tone.jpg"                    
        [73] "./ostale_slike/slika24_gibanje_luna.jpg"                     "./ostale_slike/slika25_gibanje_irena_jesen_zima.jpg"        
        [75] "./ostale_slike/slika26_gibanje_mojca_jesen_zima.jpg"         "./ostale_slike/slika27_gibanje_tone_jesen_zima.jpg"         
        [77] "./ostale_slike/slika28_graf_aktivnosti.jpg"                  "./ostale_slike/slo_gams.bmp" 
    
    # find all files that start with "slika2"
    x[grepl("slika2", x)]
     [1] "./ostale_slike/nepipaj/slika20_odlov_luna.jpg"               "./ostale_slike/nepipaj/slika21_gibanje_irena.png"           
     [3] "./ostale_slike/nepipaj/slika22_gibanje_mojca.png"            "./ostale_slike/nepipaj/slika23_gibanje_tone.png"            
     [5] "./ostale_slike/nepipaj/slika24_gibanje_luna.png"             "./ostale_slike/nepipaj/slika25_gibanje_irena_jesen_zima.png"
     [7] "./ostale_slike/nepipaj/slika26_gibanje_mojca_jesen_zima.png" "./ostale_slike/nepipaj/slika27_gibanje_tone_jesen_zima.png" 
     [9] "./ostale_slike/nepipaj/slika28_graf_aktivnosti.jpg"          "./ostale_slike/slika20_odlov_luna.jpg"                      
    [11] "./ostale_slike/slika21_gibanje_irena.jpg"                    "./ostale_slike/slika22_gibanje_mojca.jpg"                   
    [13] "./ostale_slike/slika23_gibanje_tone.jpg"                     "./ostale_slike/slika24_gibanje_luna.jpg"                    
    [15] "./ostale_slike/slika25_gibanje_irena_jesen_zima.jpg"         "./ostale_slike/slika26_gibanje_mojca_jesen_zima.jpg"        
    [17] "./ostale_slike/slika27_gibanje_tone_jesen_zima.jpg"          "./ostale_slike/slika28_graf_aktivnosti.jpg"
    

    拥有完整的文件名,您可以导入数据集并进一步操作它们。

    【讨论】:

    • 谢谢。我必须考虑清楚这一点。是的,我想在这里偷懒,但尝试不同的东西对我来说更重要:)
    【解决方案2】:

    您是否在寻找 mapply,它将具有多个参数的函数应用于多个向量或列表?

    mapply(compare.Files, file_list1, file_list2)
    

    如果要将函数应用于两个目录中的所有文件组合,可以使用expand.grid。我们举个例子:

    file_list1 = c("d1/a.txt", "d1/b.txt")
    file_list2 = c("d2/a.txt", "d2/b.txt")
    file.comb <- expand.grid(file_list1, file_list2)
    

    现在将compare.Files 应用于列表中的两列:

    result <- mapply(compare.Files, as.vector(file.comb[,1]), as.vector(file.comb[,2]))
    

    这有帮助吗?

    【讨论】:

    • 每一点都有帮助(我对 R 比较陌生)。就我而言,expand.grid() 在处理时间方面可能存在问题,因为我每个文件夹有 1000 个文件。我只需要第一次迭代中的“d1/a”和“d2/a”组合以及第二次迭代中的“d1/b”和“d2/b”组合。
    • 我仍然不知道如何使用mapply 更改此代码dataset &lt;- do.call("cbind",lapply(file_list, FUN=function(files){ process.Files(files) }))。我在某个时间点失去了冷静:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多