Ошибка просмотра карты в документе уценки knitr R
Я играл с пакетом mapview, который недавно был загружен на CRAN. Я играл с демо-кодом и пытался встроить его в документ уценки knitr. К сожалению, я получаю сообщение об ошибке, когда я делаю это, и у меня возникают проблемы с интерпретацией, что идет не так.
Вот сообщение об ошибке, сопровождаемое воспроизводимым примером. Обратите внимание, что у меня нет никаких проблем при запуске кода в виде обычного кода R. Проблема возникает только тогда, когда она запускается через knitr. Ошибка не возникает, если mapview
элементы закомментированы.
Я обновил все свои пакеты, и проблема остается. Вот некоторые системные детали:
- Windows 7
- Версия R 3.2.2
- R Studio версия 0.99.486
- mapview версия 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 --из уценки +autolink_bare_uris+ascii_identifiers+tex_math_single_backslash-implicit_figures --output Mapview.html --sfus нет - самостоятельный - --ndalone --section-divs - шаблон "C: \ Users \ my.name \ Documents \ R \ win-library \ 3.2 \ rmarkdown \ rmd \ h \ default.html" --variable "theme: bootstrap" --include-in-header "C: \ Users \ my.name \ 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" h ighlightjs = 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)
```
1 ответ
Пока что нет поддержки knitr в mapview как таковом. Тем не менее, можно встроить "маленькие" наборы данных с помощью явного вызова mapview(x)@map. Если x - это объект Spatial*, содержащий менее 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
```
Я должен подготовить документ, который показывает карту с точками, но, как я уже сказал, помните, что это может быть за пределами возможностей листовки.
Кроме того, я хотел бы поднять еще один момент здесь. Более чем сомнительно, является ли knitr подходящим способом создания html-файла для таких больших наборов данных. Knitr хранит все (геометрию и атрибуты) в одном HTML-файле, который, вероятно, очень быстро станет очень большим и станет довольно не отвечающим.
Поэтому, возможно, блестящее решение - лучший вариант для таких больших данных.
До сих пор мы фокусировались на том, чтобы поддержка больших наборов данных работала корректно в средстве просмотра / браузере. Надеемся, что интеграция knitr будет реализована на каком-то этапе, но может потребоваться некоторое время, чтобы сделать это правильно.
Надеюсь, это проясняет, Бест Тим