在循环中结合传单和降价

时间:2017-05-04 21:06:21

标签: knitr r-markdown htmlwidgets r-leaflet

This question显示了如何在markdown文件中循环/应用传单对象。我想做类似的事情,虽然我想添加额外的降价内容。

---
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语句,我会得到降价,但没有地图。任何方式来组合两种类型的元素?

1 个答案:

答案 0 :(得分:2)

问题是,在lapply返回结果列表之前,正在评估您的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()更改为您想要的任何标题大小(tags$h2(),...)