【发布时间】:2016-02-12 10:26:06
【问题描述】:
问题:
我想用 R 生成一个给定路径的目录名和子目录名表。
期望的输出:
输出应该是一个带有两列的 data.frame 或类似的,我可以用knitr::kable 处理它以产生一个漂亮的.html 和rmarkdown。
因此结果应该或多或少像这样:
|dir names |subdir names |
|:--------------------|:--------------------|
| | |
| DIR_1 | SUBDIR_1 |
| | SUBDIR_2 |
| | SUBDIR_3 |
| DIR_2 | SUBDIR_1 |
| | SUBDIR_2 |
小例子:
这是我到目前为止走了多远:
# Create directories
dir.create("DIR_1")
dir.create("DIR_2")
# Create subdirectories
dir.create("./DIR_1/SUBDIR_1")
dir.create("./DIR_1/SUBDIR_2")
dir.create("./DIR_1/SUBDIR_3")
dir.create("./DIR_2/SUBDIR_1")
dir.create("./DIR_2/SUBDIR_2")
library("knitr")
kable(list.dirs(path=".",
recursive = TRUE,
full.names = FALSE),
col.names = c("dirs & subdirs mixed"))
|dirs & subdirs mixed |
|:--------------------|
| |
|DIR_1 |
|DIR_1/SUBDIR_1 |
|DIR_1/SUBDIR_2 |
|DIR_1/SUBDIR_3 |
|DIR_2 |
|DIR_2/SUBDIR_1 |
|DIR_2/SUBDIR_2 |
其他问题:
如何添加包含存储在每个子目录中的所有文件名的第三列?
【问题讨论】:
-
您是只对两个级别(dir 和 subdir)感兴趣,还是对“subdirs”中带有“subsubdirs”的任意深度嵌套感兴趣?
-
嗯,一个可以处理深度嵌套(>2 层)的解决方案会很好。
-
使用
list.files和参数include.dirs=TRUE而不是list.dirs。然后,您可以使用stringr::str_split_fixed(FL,"/",n)之类的内容拆分目录,其中FL是文件列表,n是嵌套目录的最大数量。 -
获取文件名使用
basename(data frame),获取目录名使用dirname() -
@nicola 你会根据你的建议发布答案吗?
标签: r knitr r-markdown