【问题标题】:load multiple files using a for loop and store data in list of lists使用 for 循环加载多个文件并将数据存储在列表列表中
【发布时间】:2021-11-04 21:47:44
【问题描述】:

我的电脑中有一个文件夹,里面有多个文件夹,我想加载一些感兴趣的文件夹。

例如文件夹A里面有Folder1、Folder2和Folder3。

文件夹 1 有 3 个文件 文件夹 2 有 5 个文件 文件夹 3 有 6 个文件

我想创建一个 for 循环来加载文件夹 1 和文件夹 3 中的所有内容。我希望将每个文件夹中的文件存储在具有以下结构的列表中:

$Folder 1
$Folder 1[[1]]
    [,1]    [,2]    [,3]
[1,] "chr1" 120532 125086
[2,] "chr2"  13025  13055

$Folder 1[[2]]
    [,1]    [,2]    [,3]
[1,] "chr10" 102532 125086
[2,] "chr12"  10325  10355

$Folder 1[[3]]
    [,1]    [,2]    [,3]
[1,] "chr11" 125032 125086
[2,] "chr12"  10325  10355

$Folder 3
$Folder 3[[1]]
    [,1]    [,2]    [,3]
[1,] "chr6" 102532 120586
[2,] "chr7"  10325  10355

等等……

到目前为止,我的代码是这样的:

TFs=unique(TF_hyper_baseline$collection)
data_sets=list()
trans_factor=levels(as.factor(TFs))

for (t in 1:length(trans_factor))
{
  setwd(file.path("D:/Papers to work on/Methylation Meta-Analyses/New analyses - VO2max and aerobic only/UniBind_baseline_hyper/damo_hg38_TFBS_per_TF", trans_factor[[t]]))
  files <- list.files()[grep(".bed",list.files())]
    for (f in files){
    dat<- read_delim(f, col_names = FALSE) 
    data_sets=append(list(data_sets), dat)
  }
  }

一切都很顺利,直到列表被保存的部分(见图),因为它开始重复自己并且名称没有正确保存,所以我不知道表格来自哪个文件夹。

谁能帮我找出解决办法吗?

【问题讨论】:

    标签: r list loops file-upload


    【解决方案1】:

    您不得将您的data_sets 转换为list

    data_sets=append(list(data_sets), dat)
    

    应该是的

    data_sets=append(data_sets, dat)
    

    【讨论】:

      【解决方案2】:

      我的示例结构是这样的:

      ~/test/folder_1/test9.csv
      ~/test/folder_1/test10.csv
      ~/test/folder_2/test91.csv
      ~/test/folder_2/test92.csv
      

      现在我们遍历此文件夹并仅提取 .csv-files:

      setwd("~/test/")
      
      folders <- list.dirs(full.names = FALSE, recursive = FALSE)
      
      my_list <- list()
      
      for (fold in folders) {
        files <- list.files(path = file.path(getwd(), fold), pattern = "\\.csv")
        for (file in files) {
          my_list[[fold]][[file]] <- read.csv2(file.path(getwd(), fold, file))
        }
      }
      

      这会返回(是的,测试数据都是一样的):

      $folder_1
      $folder_1$test10.csv
                           x                      y         cdf    abscorr
      1   CASE TEST 10 Inlet    CASE TEST 10 Outlet  0.94460489 0.94460489
      2   CASE TEST 10 Inlet     CASE TEST 10 Total  0.87480985 0.87480985
      3  CASE TEST 10 Outlet     CASE TEST 10 Total  0.69187830 0.69187830
      4  CASE TEST 10 Outlet       CASE TEST 10 BOX  0.52404316 0.52404316
      5   CASE TEST 10 Total       CASE TEST 10 BOX  0.94397362 0.94397362
      6   CASE TEST 10 Total CASE TEST 10 BOX Total  0.68779904 0.68779904
      7     CASE TEST 10 BOX  CASE TEST 10 BOX Flow  0.51054070 0.51054070
      8     CASE TEST 10 BOX        CASE TEST 10 1A  0.98907793 0.98907793
      9      CASE TEST 10 1A      CASE TEST 10 Gett -0.58787388 0.58787388
      10     CASE TEST 10 2A    CASE TEST 10 Outlet  0.03679823 0.03679823
      11     CASE TEST 10 3A        CASE TEST 10 4A  0.78073388 0.78073388
      12     CASE TEST 10 4A    CASE TEST 10 Outlet  0.11699066 0.11699066
      13  CASE TEST 10 Delta     CASE TEST 10 Inlet  0.77080311 0.77080311
      
      $folder_1$test9.csv
                          x                     y         cdf    abscorr
      1   CASE TEST 9 Inlet    CASE TEST 9 Outlet  0.94460489 0.94460489
      2   CASE TEST 9 Inlet     CASE TEST 9 Total  0.87480985 0.87480985
      3  CASE TEST 9 Outlet     CASE TEST 9 Total  0.69187830 0.69187830
      4  CASE TEST 9 Outlet       CASE TEST 9 BOX  0.52404316 0.52404316
      5   CASE TEST 9 Total       CASE TEST 9 BOX  0.94397362 0.94397362
      6   CASE TEST 9 Total CASE TEST 9 BOX Total  0.68779904 0.68779904
      7     CASE TEST 9 BOX  CASE TEST 9 BOX Flow  0.51054070 0.51054070
      8     CASE TEST 9 BOX        CASE TEST 9 1A  0.98907793 0.98907793
      9      CASE TEST 9 1A      CASE TEST 9 Gett -0.58787388 0.58787388
      10     CASE TEST 9 2A    CASE TEST 9 Outlet  0.03679823 0.03679823
      11     CASE TEST 9 3A        CASE TEST 9 4A  0.78073388 0.78073388
      12     CASE TEST 9 4A    CASE TEST 9 Outlet  0.11699066 0.11699066
      13  CASE TEST 9 Delta     CASE TEST 9 Inlet  0.77080311 0.77080311
      
      
      $folder_2
      $folder_2$test91.csv
                          x                     y         cdf    abscorr
      1   CASE TEST 9 Inlet    CASE TEST 9 Outlet  0.94460489 0.94460489
      2   CASE TEST 9 Inlet     CASE TEST 9 Total  0.87480985 0.87480985
      3  CASE TEST 9 Outlet     CASE TEST 9 Total  0.69187830 0.69187830
      4  CASE TEST 9 Outlet       CASE TEST 9 BOX  0.52404316 0.52404316
      5   CASE TEST 9 Total       CASE TEST 9 BOX  0.94397362 0.94397362
      6   CASE TEST 9 Total CASE TEST 9 BOX Total  0.68779904 0.68779904
      7     CASE TEST 9 BOX  CASE TEST 9 BOX Flow  0.51054070 0.51054070
      8     CASE TEST 9 BOX        CASE TEST 9 1A  0.98907793 0.98907793
      9      CASE TEST 9 1A      CASE TEST 9 Gett -0.58787388 0.58787388
      10     CASE TEST 9 2A    CASE TEST 9 Outlet  0.03679823 0.03679823
      11     CASE TEST 9 3A        CASE TEST 9 4A  0.78073388 0.78073388
      12     CASE TEST 9 4A    CASE TEST 9 Outlet  0.11699066 0.11699066
      13  CASE TEST 9 Delta     CASE TEST 9 Inlet  0.77080311 0.77080311
      
      $folder_2$test92.csv
                           x                      y         cdf    abscorr
      1   CASE TEST 10 Inlet    CASE TEST 10 Outlet  0.94460489 0.94460489
      2   CASE TEST 10 Inlet     CASE TEST 10 Total  0.87480985 0.87480985
      3  CASE TEST 10 Outlet     CASE TEST 10 Total  0.69187830 0.69187830
      4  CASE TEST 10 Outlet       CASE TEST 10 BOX  0.52404316 0.52404316
      5   CASE TEST 10 Total       CASE TEST 10 BOX  0.94397362 0.94397362
      6   CASE TEST 10 Total CASE TEST 10 BOX Total  0.68779904 0.68779904
      7     CASE TEST 10 BOX  CASE TEST 10 BOX Flow  0.51054070 0.51054070
      8     CASE TEST 10 BOX        CASE TEST 10 1A  0.98907793 0.98907793
      9      CASE TEST 10 1A      CASE TEST 10 Gett -0.58787388 0.58787388
      10     CASE TEST 10 2A    CASE TEST 10 Outlet  0.03679823 0.03679823
      11     CASE TEST 10 3A        CASE TEST 10 4A  0.78073388 0.78073388
      12     CASE TEST 10 4A    CASE TEST 10 Outlet  0.11699066 0.11699066
      13  CASE TEST 10 Delta     CASE TEST 10 Inlet  0.77080311 0.77080311
      

      这可以使用apply-functions 来完成,但我选择使用for-loop 以获得更好的可读性并且我认为它更容易理解。

      【讨论】:

        猜你喜欢
        • 2017-09-08
        • 2023-03-03
        • 2022-11-26
        • 1970-01-01
        • 2021-02-23
        • 2021-06-16
        • 2022-06-29
        • 2018-07-18
        • 2016-06-21
        相关资源
        最近更新 更多