R-如何从多个目录中读取并在不同目录中包含的相同文件名上应用函数

时间:2013-05-08 16:27:58

标签: r

我有两个包含(共享)同名文件的目录,例如: 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)  }))

我怎么能让它起作用? 提前谢谢。

2 个答案:

答案 0 :(得分: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"

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

答案 1 :(得分:1)

您是否正在寻找将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]))

这有帮助吗?