关于r:如何自动化Rmd中的嵌套部分,包括文本,地图和表格

How to automate nested sections in Rmds which include text, maps and tables

我发现了几个示例(如何使用R提取SQL文件的内容,
使用循环在rmarkdown中生成文本部分,
使用R)在Rmarkdown中自动生成预格式化的文本,但没有
就我而言,适用于包含数字的嵌套部分。预期输出:

enter ") ... cat("```\
"),但我找不到办法。

编辑:我在这里找到了它,但仍然无法正常工作

1
2
3
4
5
6
7
kexpand <- function(chunkname, fig.width, fig.height) {
  cat(knitr::knit(text = knitr::knit_expand(text =
     sprintf("```{r %s, fig.width=%s, fig.height=%s}\
.chunk_code\
",
             chunkname, fig.width, fig.height))))
}

,然后在大块中:

1
2
3
4
5
6
7
  .chunk_code <- leaflet() %>%
    addTiles() %>%
    addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
    addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
    addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
    addCircleMarkers(lat = 47, lng = 9, popup = ranges[i])
  kexpand(i, 8.4, 7)

编辑2:有一个相关的问题。尽管它似乎很接近,但仍然无法正常工作。另请参阅此处使用的方法,因为我有嵌套列表-我不希望所有数字都相邻。

所有部分均包含相同类型的图形,但是内容当然会发生变化。在下面找到

  • 我到目前为止取得的最好成绩
  • 参考Rmd,显示已删除的输出,但带有复制粘贴块

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
---
title:"The best I got"
author:"SQC"
date:"11 Juli 2019"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, fig.width=8.4, fig.height=7)
library(leaflet)
ranges <- paste0("section_", c(1:3))
```

# Title level 1

This is an R Markdown document.

## Title level 2 (tab) {.tabset}

### Title level 3 (tab) {.tabset}

```{r, echo = FALSE, results='asis'}
for (i in 1:length(ranges)) {
  cat(paste0("#### Title level 4 `r",
             ranges[i],"` vs. `r", ranges[i - 1],"` {.tabset}\
"))
  cat("##### Map\
")

  # code //
  cat("```{r, fig.width=8.4, fig.height=7}\
")
  leaflet() %>%
    addTiles() %>%
    addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
    addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
    addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
    addCircleMarkers(lat = 47, lng = 9, popup = ranges[i])
  cat("```\
")
  # //

  cat("##### Tabelle\
")

  # code //
  cat("```{r}\
")
  DT::datatable(data.frame(x = 1, y = ranges[i], stringsAsFactors = FALSE),
                rownames = FALSE)
  cat("```\
")
  # //
}
```

### Title level 3 (tab) {.tabset}

```{r, echo = FALSE, results='asis'}
for (i in 1:length(ranges)) {
  cat(paste0("#### `r", ranges[i],"` vs. `r", ranges[i - 1],"` {.tabset}\
"))
  cat("##### Karte\
")

  # code //
  cat("```{r, fig.width=8.4, fig.height=7}\
")
  leaflet() %>%
    addTiles() %>%
    addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
    addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
    addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
    addCircleMarkers(lat = 47, lng = 9, popup = ranges[i])
  cat("```\
")
  # //

  cat("##### Tabelle\
")

  # code //
  cat("```{r}\
")
  DT::datatable(data.frame(x = 1, y = ranges[i], stringsAsFactors = FALSE),
                rownames = FALSE)
  cat("```\
")
  # //
}
```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
---
title:"Reference"
author:"SQC"
date:"11 Juli 2019"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(leaflet)
ranges <- paste0("section_", c(1:4))
```

# Title level 1

This is an R Markdown document.

## Title level 2 (tab) {.tabset}

### Title level 3 (tab) {.tabset}

#### Title level 4 `r ranges[2]` vs. `r ranges[1]` {.tabset}

##### Karte
```{r, fig.width=8.4, fig.height=7}
leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
  addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
  addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
  addCircleMarkers(lat = 47, lng = 9, popup = ranges[2])
```

##### Tabelle
```{r}
DT::datatable(data.frame(x = 1, y = ranges[2], stringsAsFactors = FALSE),
              rownames = FALSE)
```

#### Title level 4 `r ranges[3]` vs. `r ranges[2]` {.tabset}

##### Karte
```{r, fig.width=8.4, fig.height=7}
leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
  addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
  addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
  addCircleMarkers(lat = 47, lng = 9, popup = ranges[3])
```

##### Tabelle
```{r}
DT::datatable(data.frame(x = 1, y = ranges[3], stringsAsFactors = FALSE),
              rownames = FALSE)
```

#### Title level 4 `r ranges[4]` vs. `r ranges[3]` {.tabset}

##### Karte
```{r, fig.width=8.4, fig.height=7}
leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
  addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
  addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
  addCircleMarkers(lat = 47, lng = 9, popup = ranges[4])
```

##### Tabelle
```{r}
DT::datatable(data.frame(x = 1, y = ranges[4], stringsAsFactors = FALSE),
              rownames = FALSE)
```

### Title level 3 (tab) {.tabset}

#### Title level 4 `r ranges[2]` vs. `r ranges[1]` {.tabset}

##### Karte
```{r, fig.width=8.4, fig.height=7}
leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
  addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
  addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
  addCircleMarkers(lat = 47, lng = 9, popup = ranges[2])
```

##### Tabelle
```{r}
DT::datatable(data.frame(x = 1, y = ranges[2], stringsAsFactors = FALSE),
              rownames = FALSE)
```

#### Title level 4 `r ranges[3]` vs. `r ranges[2]` {.tabset}

##### Karte
```{r, fig.width=8.4, fig.height=7}
leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
  addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
  addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
  addCircleMarkers(lat = 47, lng = 9, popup = ranges[3])
```

##### Tabelle
```{r}
DT::datatable(data.frame(x = 1, y = ranges[3], stringsAsFactors = FALSE),
              rownames = FALSE)
```

#### Title level 4 `r ranges[4]` vs. `r ranges[3]` {.tabset}

##### Karte
```{r, fig.width=8.4, fig.height=7}
leaflet() %>%
  addTiles() %>%
  addProviderTiles(providers$OpenStreetMap, group ="OSM") %>%
  addProviderTiles(providers$Stamen.TonerLite, group ="Toner Lite") %>%
  addLayersControl(baseGroups = c("OSM","Toner Lite")) %>%
  addCircleMarkers(lat = 47, lng = 9, popup = ranges[4])
```

##### Tabelle
```{r}
DT::datatable(data.frame(x = 1, y = ranges[4], stringsAsFactors = FALSE),
              rownames = FALSE)
```

来自xfun :: session_info('knitr')

1
2
3
4
5
6
7
8
9
10
11
12
R version 3.5.1 (2018-07-02)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200), RStudio 1.1.453

Locale:
  LC_COLLATE=German_Switzerland.1252  LC_CTYPE=German_Switzerland.1252    LC_MONETARY=German_Switzerland.1252
  LC_NUMERIC=C                        LC_TIME=German_Switzerland.1252    

Package version:
  evaluate_0.14   glue_1.2.0      graphics_3.5.1  grDevices_3.5.1 highr_0.7       knitr_1.23      magrittr_1.5  
  markdown_0.8    methods_3.5.1   mime_0.5        stats_3.5.1     stringi_1.2.3   stringr_1.3.1   tools_3.5.1    
  utils_3.5.1     xfun_0.7        yaml_2.1.19


尝试类似

的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
---
title:"The best I got"
author:"SQC"
date:"11 Juli 2019"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, fig.width=8.4, fig.height=7)
library(leaflet)
ranges <- paste0("section_", c(1:3))
leaflet()
DT::datatable(data.frame())
```

# Title level 1

This is an R Markdown document.

## Title level 2 (tab) {.tabset}

### Title level 3 (tab) {.tabset}

```{r, echo = FALSE, results='asis'}
for (i in 1:length(ranges)) {
  cat(paste0("#### Title level 4 `r",
             ranges[i],"` vs. `r", ranges[i - 1],"` {.tabset}\
"))
  cat("##### Map\
")

  # code //
  cat("```{r, fig.width=8.4, fig.height=7}\
")
  leaflet() %>%
    addTiles() %>%
    knitr::knit_print() %>%
    cat()
  cat("```\
")
  # //

  cat("##### Tabelle\
")

  # code //
  cat("```{r}\
")
  DT::datatable(data.frame(x = 1, y = ranges[i], stringsAsFactors = FALSE),
                rownames = FALSE) %>%
    knitr::knit_print() %>%
    cat()
  cat("```\
")
  # //
}
```