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



我有一个函数,可以读取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 相同的结果。

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

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 ...

最新更新