我正在尝试在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)时,它可以工作.我也试过了print命令,但这也没用.
知道我怎么能这样做吗?
解决方法
你有点复杂了.
您必须通过从唯一的工作站选择经度和纬度来创建传单并在其上应用标记.
但是在这里你要在一个循环中创建传单.并且还在循环中添加了瓷砖,这是主要问题.
现在你可以在循环中创建一个传单和addTiles,并在循环中添加addMarkers,但实际上根本不需要for循环并一次添加所有标记.
首先,按唯一站选择数据集
distinct_by_stations<-distinct(quakes,stations) #dplyr is needed for 'distinct'
leaflet(data = distinct_by_stations) %>% addTiles() %>% addMarkers(~long,popup=~as.character(mag))
在rpubs上查看工作.rmd
http://rpubs.com/dhawalkapil/quakesdata
工作R块
```{r quakes,echo=T} data(quakes) library(leaflet) library(dplyr) distinct_by_stations<-distinct(quakes,stations) leaflet(data = distinct_by_stations) %>% addTiles() %>% addMarkers(~long,popup=~as.character(mag)) ```
使用多个地图
让我们在年份上添加一列.然后我们将不得不使用@NicE解释的htmltools :: tagList.拆分’年’并使用lapply
```{r quakes,echo=T,results='asis'} data(quakes) library(leaflet) library(dplyr) library(htmltools) ##Add A Random Year Column quakes$year=sample(2006:2015,length(quakes),replace=TRUE) createMaps<-function(x){ distinct_by_stations<-distinct(x,stations) lflt<-leaflet(data = distinct_by_stations) %>% addTiles() %>% addMarkers(~long,popup=~as.character(mag)) } htmltools::tagList(lapply(split(quakes,quakes$year),function(x){createMaps(x)})) ```
请参阅上面相同网址中的更新rpubs.