【发布时间】:2018-05-01 16:07:53
【问题描述】:
我正在制作带有弹出窗口的传单地图。弹出窗口提供了正在选择的多边形的 ID 信息。我遇到的问题是用于 ID 的字段名称可以更改,因此我最初的方式不再适用。
这是一个可重现的例子:
## 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 字段会更改)。
【问题讨论】:
-
你的意思是有些国家的名字是一个叫做“ID”的字段,而其他国家的名字是一个叫做“国家”的字段或其他什么?也许这是一个愚蠢的问题,但有没有一种方法可以让您首先标准化您的数据,这样您就不必处理这个问题了?
-
对不起,如果我不清楚,这个字段可以被称为不同的东西,比如“ID”、“国家”、“支付”等。我想标准化可能会起作用,我会的如果我找不到更好的解决方案,请这样做。谢谢。