我一直在玩 mapview 包,该包最近已加载到 CRAN 上。我一直在玩演示代码并尝试将其嵌入到 knitr markdown 文档中。不幸的是,我在执行此操作时收到一条错误消息,并且无法解释发生了什么问题。
这是错误消息,然后是可重现的示例。请注意,将代码作为直接 R 代码运行时我没有任何问题。只有在运行 knitr 时才会出现问题。如果 mapview
元素被注释掉,则不会发生该错误。
我已经更新了所有软件包,但问题仍然存在。以下是一些系统细节:
---
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)
```
最佳答案
到目前为止,mapview 中不支持 knitr。也就是说,可以通过显式调用 mapview(x)@map 来嵌入“小”数据集。 x 是一个空间*对象,多边形和线的特征少于 30000 个,点的特征少于 20000 个。这些数字是在 mapviewOptions() 中设置的默认限制,用于使用传单包渲染输出。对于具有比这些阈值更多的特征的数据集,我们对点使用特殊函数 mapview::fpView(),对多边形和线使用 mapview::bView()。对于这些特殊功能,目前不存在 knitr 支持。
这意味着使用 knitr 嵌入更大数据集的唯一选择是将“maxlines”、“maxpoints”或“maxpolygons”的阈值设置为适当的数字(高于数字特征),以便使用传单包完成渲染职能。但是您需要记住,对于大型数据集,传单可能不再顺畅运行(或完全崩溃)。
所以,对于上面的例子:
---
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
```
应该生成一个显示带有点的 map 的文档,但正如我所说,请注意这可能超出了传单包的功能。
另外,我想在这里提出另一点。 knitr 是否是为如此大的数据集创建 html 文件的合适方法,这是值得怀疑的。 knitr 将所有内容(几何图形和属性)存储在一个 html 文件中,该文件可能会很快变得非常大并且变得相当无响应。
因此,对于这样的大数据,也许一个 Shiny 的解决方案是更好的选择。
到目前为止,我们的重点是获得对大数据集在查看器/浏览器中正常工作的支持。 knitr 集成有望在某个阶段实现,但可能需要一些时间才能正确完成。
希望这能澄清,
最好的
蒂姆
关于r - knitr R Markdown 文档中的mapview错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34331964/