在循环中结合传单和降价

Combine leaflet and markdown in loop

展示了如何在降价文件中循环 over/apply 传单对象。我想做类似的事情,虽然我想添加额外的降价内容。

---
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) ))
```

如果我在 createMaps 函数中省略 cat 语句,此代码将打印所有三张地图。如果我输入 cat 语句,我会得到降价,但没有地图。有什么方法可以组合这两种类型的元素?

问题是,在 lapply returns 其结果列表之前评估您的 cat 语句。

删除 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() 更改为您想要的 header 的任意大小(tags$h2(),...)