我试图将已定义目录的所有文件夹和文件名读取到一个嵌套列表中,该列表与顶层文件夹的数量一样长,然后每个列表元素的元素数量与子目录中的元素数量一样多(如果它是一个文件夹)等等,直到只有文件而没有更多文件夹的级别。
我的用例是我的 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
is now:
#$`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
and $Konk
每个专辑列表中都有一个标题名称向量(没有专辑名称)。
我(还)找不到正确的答案,并尝试过(不成功),除此之外:
list.files(m, recursive = TRUE)
and
lapply(lst, function(l) {
strsplit(l, "/")
})
怎样做才正确呢?
P.S.:
- 您可以将所需的输出视为列表结构,其中每个文件/文件夹名称仅与实际文件/文件夹中出现的频率相同。
- 作为最好的情况,我希望找到一个足够灵活的解决方案,以允许不同的文件夹级别,并且不需要那么多explicitlapply 随文件夹深度调用