Я пытаюсь прочитать все имена папок и файлов определенного каталога во вложенном списке, который будет до тех пор, пока количество папок на верхнем уровне, а затем список элемент имеет столько же элементов, сколько в подкаталоге (если это папка) и т. д. до уровня, где есть только файлы и больше папок.Прочитайте вложенные папки и имена файлов в виде вложенного списка
Мой случай использования с моей папке ITunes Music:
m <- "/Users/User/Music/iTunes/iTunes Media/Music" # set the path to the library folder
x <- list.files(m, recursive = FALSE) # get all artists names (folder names on top level)
# read all Albums and title of each song per album
lst <- setNames(lapply(paste(m, x, sep = "/"), list.files, recursive = T), x)
Структура каждого элемента в lst
сейчас:
#$`The Kooks` # artist name "The Kooks"
# [1] "Inside In Inside Out/01 Seaside.mp3" # album name "Inside In Inside Out", title "01 Seaside.mp3"
# [2] "Inside In Inside Out/02 See The World.mp3"
#...
#[16] "Konk/01 See The Sun.mp3" # second album of The Kooks
#[17] "Konk/02 Always Where I Need To Be.mp3"
То, что я пытаюсь сделать, это сделать записи каждого вложенного списка художников, поэтому в примере будет элемент списка $TheKooks
, который имеет 2 (суб) списка (по 1 для каждого альбома): $Inside In Inside Out
и $Konk
, и в каждом из списков альбомов есть вектор имен названий в нем (без названия альбома с).
Я не мог найти правильные ответы (пока) на SO и пытался (безуспешно), среди прочего:
list.files(m, recursive = TRUE)
и
lapply(lst, function(l) {
strsplit(l, "/")
})
Как сделать это правильно?
P.S .:
- Вы можете думать о желаемом выходе в виде списка-структуры, где каждое имя файла/папки происходит только так часто, как в реальных файлов/папок.
- В лучшем случае, я надеюсь найти решение, которое будет достаточно гибким, чтобы позволить для различных уровней папок и не будет требовать стольких явных lapply звонков в папке глубины
Спасибо, Бен! Это похоже на опрятное решение и на основе первоначального теста, похоже, делает то, что я хотел. Кстати, я имел в виду, что мне не хотелось бы писать x lapply calls вручную в соответствии с уровнем папок. Поскольку это рекурсивный, он выполняет этот критерий, как я имел в виду. (+1) –
@docendodiscimus Ах, ОК. Это проясняет ситуацию! – BenBarnes