首页 文章

使用lapply和自定义函数将表直接加载到列表中

提问于
浏览
0

我有一个函数读取lapply中指定的文件夹中的特定文件,并将此表加载到R.该函数如下所示:

load_files <- function(folder) {
  file <- list.files(path = paste0(folder, "/"), pattern = "quast.tsv")
  assign(
    paste0("ref_", gsub("^GCF_(.*?)_ASM(.*?)$", "\\1", folder)),
    read.delim(
      paste0(folder, "/", file),
      stringsAsFactors = F,
      header = TRUE,
      sep = "\t"
    )
  )
}

该函数为每个数据框指定一个特定名称 . 之前我在for循环中使用它来为每个表读取创建一个数据帧 . 但是,我希望它将每个数据帧加载到同一个列表中,而不将它们加载到单个数据帧中 . 我使用的lapply看起来像这样:

lapply(folder_names, load_files)

其中folder_names基本上只是一个字符向量,文件夹名称用另一个函数标识 .

是否有任何简单的方法可以将每个指定数据框的lapply加载到同一个列表中?我试过以下,但似乎没有用:

append(df_list, lapply(folder_names, load_files))

然而,这仅仅与lapply相同 .

1 回答

  • 2

    这就是我要做的 . 我的工作目录中有2个文本文件 . 完成后,我在列表中有2个data.frames及其相应的名称 .

    file_list <- list.files( pattern = "*.txt")
    file_list 
    [1] "movies.txt" "mtcars.txt"
    
    df_list <- lapply(file_list,
                      FUN = function(files) {
                        read.csv(files, header = TRUE, sep = ",")
                      })
    
    str(df_list)
    List of 2
     $ :'data.frame':   2 obs. of  1 variable:
      ..$ X1..Jumanji..Adventure.Children.s.Fantasy: Factor w/ 2 levels "2::American President:The (1995)::Comedy|Drama|Romance",..: 1 2
     $ :'data.frame':   32 obs. of  1 variable:
      ..$ mpg.cyl.disp.hp.drat.wt.qsec.vs.am.gear.carb: Factor w/ 32 levels "AMC Javelin 15.2 8 304 150 3.15 3.435 17.3 0 0 3 2",..: 18 19 5 13 14 31 7 21 20 22 ...
    
    
    files <- gsub(".txt", "", file_list)
    files
    [1] "movies" "mtcars"
    
    names(df_list) <- files
    
    str(df_list)
    List of 2
     $ movies:'data.frame': 2 obs. of  1 variable:
      ..$ X1..Jumanji..Adventure.Children.s.Fantasy: Factor w/ 2 levels "2::American President:The (1995)::Comedy|Drama|Romance",..: 1 2
     $ mtcars:'data.frame': 32 obs. of  1 variable:
      ..$ mpg.cyl.disp.hp.drat.wt.qsec.vs.am.gear.carb: Factor w/ 32 levels "AMC Javelin 15.2 8 304 150 3.15 3.435 17.3 0 0 3 2",..: 18 19 5 13 14 31 7 21 20 22 ...
    

相关问题