3

我一直在玩最近加载到CRAN上的mapview包。我一直在使用演示代码并尝试将其嵌入到knitr markdown文档中。不幸的是,我在执行此操作时收到一条错误消息,并且无法解释发生了什么问题。

这是错误消息,后跟一个可重现的示例。请注意,将代码作为直接 R 代码运行时我没有任何问题。只有当它通过knitr运行时,问题才会出现。mapview如果元素被注释掉,则不会发生错误。

我已经更新了我的所有软件包,但问题仍然存在。以下是一些系统细节:

  • Windows 7的
  • R 版本 3.2.2
  • R Studio 版本 0.99.486
  • 地图视图版本 1.0.0
  • knitr 版本 1.11
  • pandoc 版本 1.13.1

pandoc.exe:无法获取 C:\Users\my.name\Documents\R\win-library\3.2\mapview\htmlwidgets\lib\leaflet#default#VML C:\Users\my.name\Documents\R\ win-library\3.2\mapview\htmlwidgets\lib\leaflet:openBinaryFile:不存在(没有这样的文件或目录)错误:pandoc 文档转换失败,错误 67 另外:警告消息:运行命令 '"C:/Program Files /RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS Mapview.utf8.md --to html --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output Mapview.html --smart --email-obfuscation无 --self-contained --standalone --section-divs --template "C:\Users\my.name\Documents\R\win-library\3.2\rmarkdown\rmd\h\default.html" --variable “主题:引导程序”--include-in-header “C:\Users\my.名称\AppData\Local\Temp\Rtmpw9Mi9D\rmarkdown-str1ee41c515f3f.html" --mathjax --variable "mathjax-url:https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML " --no-highlight --variable "highlightjs=C:\Users\my.name\Documents\R\ win-library\3.2\rmarkdown\rmd\h\highlight"' 的状态为 67 执行停止

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


```{r}

library(ggplot2)
library(rgdal)
library(mapview)

data(diamonds)

### blow diamonds up a bit
big <- diamonds[rep(seq_len(nrow(diamonds)), 1), ]
big$cut <- as.character(big$cut)
big$color <- as.character(big$color)
big$clarity <- as.character(big$clarity)

### provide some random positions
big$x <- rnorm(nrow(big), 0, 10)
big$y <- rnorm(nrow(big), 0, 10)
coordinates(big) <- ~x+y
proj4string(big) <- CRS("+init=epsg:4326")

### view it
mapview(big)

```
4

1 回答 1

8

到目前为止,在 mapview 中不支持 knitr。也就是说,可以通过显式调用 mapview(x)@map 来嵌入“小”数据集。x 是一个 Spatial* 对象,多边形和线的特征少于 30000 个,点的特征少于 20000 个。这些数字是在 mapviewOptions() 中设置的默认限制,用于使用传单包渲染输出。对于具有比这些阈值更多特征的数据集,我们对点使用特殊函数 mapview:::fpView(),对多边形和线使用 mapview:::bView()。对于这些特殊功能,目前不存在 knitr 支持。

这意味着使用 knitr 嵌入更大数据集的唯一选择是将“maxlines”、“maxpoints”或“maxpolygons”的阈值设置为适当的数字(高于数字特征),以便使用传单包完成渲染功能。但是您需要记住,leaflet 在处理大型数据集时可能不再流畅(或完全崩溃)。

所以,对于上面的例子:

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


```{r}

library(ggplot2)
library(rgdal)
library(mapview)

mapviewOptions(maxpoints = 55000) # diamonds has some 53000 rows


data(diamonds)

### blow diamonds up a bit
big <- diamonds[rep(seq_len(nrow(diamonds)), 1), ]
big$cut <- as.character(big$cut)
big$color <- as.character(big$color)
big$clarity <- as.character(big$clarity)

### provide some random positions
big$x <- rnorm(nrow(big), 0, 10)
big$y <- rnorm(nrow(big), 0, 10)
coordinates(big) <- ~x+y
proj4string(big) <- CRS("+init=epsg:4326")

### view it
mapview(big)@map

```

应该生成一个显示带有点的地图的文档,但正如我所说,请注意这可能超出了传单包的功能。

此外,我想在这里提出另一点。knitr 是否是为此类大数据集创建 html 文件的合适方法,这一点值得怀疑。knitr 将所有内容(几何图形和属性)存储在一个 html 文件中,该文件可能会很快变得非常大并且变得相当无响应。

因此,对于此类大数据,也许一个闪亮的解决方案是一个更好的选择。

到目前为止,我们的重点是让大数据集在查看器/浏览器中正常工作。knitr 集成有望在某个阶段实现,但可能需要一些时间才能正确完成。

希望这可以澄清,最好的蒂姆

于 2015-12-18T11:37:55.527 回答