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

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

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

  • Windows 7
  • R 版本 3.2.2
  • R Studio 版本 0.99.486
  • map View 版本 1.0.0
  • knitr 版本 1.11
  • pandoc 版本 1.13.1


  • ---
    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/

    10-12 21:57