问:在rmarkdown html中为for循环创建传单地图

时间:2016-02-16 11:54:27

标签: r leaflet r-markdown

我正在尝试使用rmarkdown文件中的for循环创建传单地图。

这是一个最小的例子:

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

```{r quakes, echo=F}
data(quakes)
library(leaflet)

for (i in c(10:20))
{
leaflet(data = quakes[1:5 & quakes$stations == i,]) %>% addTiles() %>%
  addMarkers(~long, ~lat, popup = ~as.character(mag))
}
```

我没有使用此代码获得任何输出。单独运行leaflet命令(并用整数替换i)时,它可以工作。我也尝试了打印命令,但这也没有用。

知道我怎么能这样做吗?

2 个答案:

答案 0 :(得分:6)

你有点复杂了。

请注意,您必须通过从唯一电台选择经度和纬度来创建传单并在其上应用标记。

但是在这里你要在循环中创建传单。并且还在循环中添加了瓦片,这是主要问题。

现在你可以在循环中创建一个传单和addTiles,并在循环中添加addMarkers,但实际上根本不需要for循环并一次性添加所有标记。

首先,按唯一站选择数据集

distinct_by_stations<-distinct(quakes,stations) #dplyr is needed for 'distinct'

使用上述过滤器数据集作为数据

创建传单并添加标记
leaflet(data = distinct_by_stations) %>% addTiles() %>% addMarkers(~long,~lat,popup=~as.character(mag))

请参阅rpubs

中的工作.rmd

http://rpubs.com/dhawalkapil/quakesdata

工作R Chunk

```{r quakes, echo=T}
data(quakes)
library(leaflet)
library(dplyr)

distinct_by_stations<-distinct(quakes,stations)
leaflet(data = distinct_by_stations) %>% addTiles() %>% addMarkers(~long,~lat,popup=~as.character(mag))
```

使用多个地图

让我们在几年内添加一栏。然后我们将不得不使用{@ 1}},如@NicE所解释的那样。拆分&#39;年&#39;并使用htmltools::tagList

lapply

请参阅上面相同网址中的更新rpub。

答案 1 :(得分:4)

您可以使用tagList中的htmltools

library(htmltools)
maps <- lapply(c(unique(quakes$stations)),function(x){
    leaflet(data = quakes[1:5 & quakes$stations == x,]) %>% addTiles() %>%
  addMarkers(~long, ~lat, popup = ~as.character(mag))    
})

tagList(maps)

它将列表作为参数,因此我将for循环更改为lapply