Я делаю карту листовок с всплывающими окнами. Всплывающие окна предоставляют информацию об идентификаторе выбранного полигона. Моя проблема заключается в том, что имя поля, используемого для идентификатора, может измениться, поэтому способ, которым я изначально занимался, больше не работает.
Вот воспроизводимый пример:
## preparing the RE:
library(maps); library(sf); library(leaflet); library(htmltools)
w = st_as_sf(map('world', plot = FALSE, fill = TRUE))
Я использую для подготовки строки html для отображения:
text <- paste0("<b>ID %s</b>")
Затем вызовите листовку и заполните всплывающие окна sprintf
и htmlEscape
.
leaflet(data=w) %>% addTiles() %>%
addPolygons(
popup = ~sprintf(
text,
htmlEscape(ID)
)
)
Однако поле не всегда называется ID
, но имя известно и в объекте r (здесь называется vari
):
colnames(w) <- c("geometry", "country")
vari <- "country"
text <- paste0("<b>", vari, " %s</b>")
leaflet(data=w) %>% addTiles() %>%
addPolygons(
popup = ~sprintf(
text,
htmlEscape(vari)
)
)
Я пытался использовать as.name
, чтобы он считался символом, но он не работает:
vari <- as.name("country")
text <- paste0("<b>", vari, " %s</b>")
leaflet(data=w) %>% addTiles() %>%
addPolygons(
popup = ~sprintf(
text,
htmlEscape(vari)
)
)
Error in sprintf(text, htmlEscape(vari)) :
invalid type of argument[1]: 'symbol'
Есть идеи, как это исправить? Кстати, мой HTML более сложный, чем в моем примере (использует больше переменных, однако все остальные имена переменных фиксированы, меняется только поле ID).