Объедините листовку и уценку в цикле

Этот вопрос показывает, как перебрать/ применять объекты листовки в файле уценки. Я хотел бы сделать то же самое, хотя я хотел бы добавить дополнительный контент уценки.

---
title: "Test"
output: html_document
---


```{r setup, echo=T,results='asis'}
library(leaflet)
library(dplyr)  ### !!! uses development version with tidyeval !!!
library(htmltools)

##Add A Random Year Column
data(quakes)
quakes <- tbl_df(quakes) %>%
  mutate(year = sample(2008:2010, n(), replace=TRUE))
```

```{r maps, echo=T,results='asis'}
createMaps <- function(year){
  cat(paste("###", year, "\n"))
  leaflet(quakes %>% filter(year == !!year)) %>% 
    addTiles() %>% 
    addMarkers(
      lng = ~long,  
      lat = ~lat, 
      popup = ~as.character(mag))
  cat("\n\n")
}

htmltools::tagList(lapply(as.list(2008:2010), function(x) createMaps(x) ))
```

Если я пропущу операторы cat в функции createMaps, этот код напечатает все три карты. Если я вставлю операторы cat, я получу уценку, но не карты. Есть ли способ объединить оба типа элементов?


person gregmacfarlane    schedule 04.05.2017    source источник


Ответы (1)


Проблема в том, что ваши операторы cat оцениваются до того, как lapply вернет свой список результатов.

Удалите операторы cat, измените функцию createMaps на

createMaps <- function(year){
  mymap <- leaflet(quakes %>% filter(year == !!year)) %>% 
    addTiles() %>% 
    addMarkers(
      lng = ~long,  
      lat = ~lat, 
      popup = ~as.character(mag))
  return(list(tags$h1(year), mymap))
}

и измените tags$h1() на любой размер заголовка, который вы хотите (tags$h2(),...)

person Martin Schmelzer    schedule 05.05.2017