Как рендерить листовки-карты в петлях в RMD с помощью knitr
В настоящее время я борюсь, пытаясь заставить knitr отображать мои листовки с картами, взятыми из коллекции, чтобы они правильно отображались в визуализированном html-выводе RMD. Я уже знаю о некоторых потенциальных проблемах, возникающих при циклическом сборе коллекций и создании графического вывода с помощью RMD/knitr, но все же я не могу понять, как заставить мой пример работать для листовок.
Воспроизводимый рабочий пример (Test_1.Rmd):
---
title: "test1"
author: "phabee"
date: "22 Mai 2018"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Title 1
```{r, fig.show='asis', echo=FALSE, results='asis'}
for (i in 1:4) {
cat("### Plot Number ", i, "\n")
plot(1,1)
# use plot.new() here to force rendering of potential plot-duplicates
plot.new()
cat("\n\n")
}
```
Приведенный выше пример отображается так, как ожидалось (по крайней мере, после добавления plot.new(), которое я узнал здесь от Freedomtowin). Но когда я пытаюсь сделать то же самое с листовками, это совсем не работает. Ни одна карта не отображается:
Воспроизводимый неудачный пример (Test_2.Rmd)
---
title: "test2"
author: "phabee"
date: "22 Mai 2018"
output: html_document
---
```{r setup, include=FALSE}
library(leaflet)
knitr::opts_chunk$set(echo = TRUE)
```
## Title 1
```{r, fig.show='asis', echo=FALSE, results='asis'}
for (i in 1:4) {
cat("### Map Number ", i, "\n")
leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R")
cat("\n")
}
```
Я ожидаю, что второй Rmd будет отображать 4 раза одну и ту же карту, показывая разные названия ("Сюжет № 1-4"). Но вывод не отображает никакой карты вообще. Вывод выглядит следующим образом:
Изучив сгенерированный html-вывод, можно увидеть, что вообще ничего не отображается, и это не просто проблема видимости:
Тем не менее, когда я оцениваю секцию листовки в пределах 2-го Rmd напрямую, "подсвечивая" код и нажимая ctrl-Enter, карта отображается так, как ожидалось:
Я уже пыталась
- преобразовать буклет-оператор в оператор присваивания
- ввести команды cat() или print() для принудительного вывода карты
- поиграйтесь с дополнительными символами новой строки '\n' до и / или после раздела вывода карты
- возиться с директивами asis из fig.show или результатами
без какого-либо эффекта. У кого-нибудь есть подсказка?
1 ответ
Вам нужно поместить вещи в tagList и распечатать этот список из чанка. Это просто использует настройки по умолчанию для fig.show
а также results
; он также использует htmltools::h3()
функция, чтобы превратить заголовок в заголовок HTML напрямую, не используя Markdown ###
маркер. (Возможно, вы захотите h2
или же h4
вместо.)
---
title: "test3"
output: html_document
---
```{r setup, include=FALSE}
library(leaflet)
library(htmltools)
knitr::opts_chunk$set(echo = TRUE)
```
## Title 1
```{r echo=FALSE}
html <- list()
for (i in 1:4) {
html <- c(html,
list(h3(paste0("Map Number ", i)),
leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng=174.768, lat=-36.852, popup="The birthplace of R")
)
)
}
tagList(html)
```