Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中创建包含目录和子目录名称的表?_R_Knitr_R Markdown - Fatal编程技术网

如何在R中创建包含目录和子目录名称的表?

如何在R中创建包含目录和子目录名称的表?,r,knitr,r-markdown,R,Knitr,R Markdown,问题: 我想用R生成一个给定路径的目录名和子目录名表 所需输出: 输出应该是data.frame或类似的两列,我可以用knitr::kable处理它,用rmarkdown生成一个漂亮的.html 因此,结果应大致如下所示: |dir names |subdir names | |:--------------------|:--------------------| | | |

问题

我想用R生成一个给定路径的目录名和子目录名表

所需输出

输出应该是data.frame或类似的两列,我可以用
knitr::kable
处理它,用
rmarkdown
生成一个漂亮的
.html

因此,结果应大致如下所示:

|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       |
附加问题

如何添加包含每个子目录中存储的所有文件名的第三列?

基于,以下代码生成给定目录中所有目录和文件的表:

```{r setup, echo = FALSE, results = 'hide', warning = FALSE}
library(stringr)
lapply(X = c("demo", "demo/DIR_1", "demo/DIR_2", "demo/DIR_1/SUBDIR_1", "demo/DIR_1/SUBDIR_2", "demo/DIR_1/SUBDIR_3", "demo/DIR_2/SUBDIR_1", "demo/DIR_2/SUBDIR_2"),
       FUN = dir.create)
file.create("demo/DIR_2/SUBDIR_2/file1.txt")
file.create("demo/DIR_2/SUBDIR_2/file12.txt")
```

```{r}
paths <- list.files(path = "demo/", include.dirs = TRUE, recursive = TRUE)
mytable <- str_split_fixed(paths, pattern = "/", n = str_count(paths, "/") + 1)

colnames(mytable) <- paste("Level", seq(ncol(mytable)))

knitr::kable(mytable)
```

您是只对两个级别(dir和subdir)感兴趣,还是对在“subdirs”中使用“subsubdirs”的任意深度嵌套感兴趣?好吧,一个可以处理深度嵌套(>2个级别)的解决方案会很好。使用
list.files
和参数
include.dirs=TRUE
而不是
list.dirs
。然后您可以使用类似于
stringr::str_split_fixed(FL,“/”,n)
的内容拆分目录,其中
FL
是文件列表,
n
是嵌套目录的最大数量。要获取文件名,只需使用
basename(数据框)
即可,要获取目录名,请使用
dirname()
@nicola你会根据你的建议发布答案吗?
|Level 1 |Level 2  |Level 3    |
|:-------|:--------|:----------|
|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_2   |SUBDIR_2 |file1.txt  |
|DIR_2   |SUBDIR_2 |file12.txt |