Я нашел несколько примеров ( Как извлечь содержимое SQL-файлов с помощью R , Использование цикла для генерации фрагмента текста в rmarkdown , Автоматизация генерации предварительно отформатированноготекст в Rmarkdown с использованием R ), но ни один из них не работает в моем случае с вложенными разделами, включая рисунки.Ожидаемый результат:
Кажется, мне нужен какой-то способ обработки включенных фрагментов кода (например, cat("```{r, fig.width=8.4, fig.height=7}\n") ... cat("```\n")
правильно, но я не могу найтиспособ.
Редактировать : Я нашел это здесь , но все еще не могу заставить его работать
kexpand <- function(chunkname, fig.width, fig.height) {
cat(knitr::knit(text = knitr::knit_expand(text =
sprintf("```{r %s, fig.width=%s, fig.height=%s}\n.chunk_code\n",
chunkname, fig.width, fig.height))))
}
и затем в кусках:
.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, который показывает ожидаемый результат, но с кусочками копирования-вставки
Примеры:
---
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}\n"))
cat("##### Map\n")
# code //
cat("```{r, fig.width=8.4, fig.height=7}\n")
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("```\n")
# //
cat("##### Tabelle\n")
# code //
cat("```{r}\n")
DT::datatable(data.frame(x = 1, y = ranges[i], stringsAsFactors = FALSE),
rownames = FALSE)
cat("```\n")
# //
}
```
### 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}\n"))
cat("##### Karte\n")
# code //
cat("```{r, fig.width=8.4, fig.height=7}\n")
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("```\n")
# //
cat("##### Tabelle\n")
# code //
cat("```{r}\n")
DT::datatable(data.frame(x = 1, y = ranges[i], stringsAsFactors = FALSE),
rownames = FALSE)
cat("```\n")
# //
}
```
---
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')
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