Я воссоздал структуру каталогов, а затем создал data.frame, где в столбце 1 перечислены все дочерние каталоги, а в столбце 2 перечислены файлы в каждом дочернем каталоге.
Во-первых, вот код, написанный для репликации структуры каталогов.
# Create parent folder
dir.create("Parent_folder")
# Create child directories and files in one go
sample_dirnames <- seq_len(3)
sapply(sample_dirnames, function(index){
# build dir path and create
dirname <- paste0("Genus_species_", sample_dirnames[index])
dir.create(paste0("Parent_folder/",dirname))
# generate three files in the current directory
sapply(seq_len(3), function(n) {
file.create(paste0("Parent_folder/", dirname, "/genome_filename_", n, ".R"))
})
})
Используя функцию list.files
в качестве отправной точки, используйте recursive = TRUE
. Затем перенаправьте вывод в data.frame и разделите пути на каталоги и имена файлов. В этом примере используются функции из пакета dplyr
и базовые функции (substring
, gregexpr
).
# pkg
library(tidyverse)
# build object
files <- list.files("Parent_folder/", recursive = TRUE) %>%
as.data.frame(.) %>%
rename(., "path" = .) %>%
mutate(
column1 = substring(
text = path,
first = 1,
last = as.numeric(
gregexpr(
pattern = "/",
text = path
)[1]
) - 1
),
column2 = substring(
text = path,
first = as.numeric(
gregexpr(
pattern = "/",
text = path
)[1]
) + 1
)
) %>%
select(-path)
При этом будет напечатан следующий объект
files
# column1 column2
# 1 Genus_species_1 genome_filename_1.R
# 2 Genus_species_1 genome_filename_2.R
# 3 Genus_species_1 genome_filename_3.R
# 4 Genus_species_2 genome_filename_1.R
# 5 Genus_species_2 genome_filename_2.R
# 6 Genus_species_2 genome_filename_3.R
# 7 Genus_species_3 genome_filename_1.R
# 8 Genus_species_3 genome_filename_2.R
# 9 Genus_species_3 genome_filename_3.R