Как рендерить листовки-карты в петлях в 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)
```
Другие вопросы по тегам