带有HTML标记的传单r中的标签

带有HTML标记的传单r中的标签,html,r,leaflet,r-leaflet,Html,R,Leaflet,R Leaflet,所有善良的灵魂,需要帮助。我正在创建传单地图,无法解决标签的奇怪问题。我用很少的变量创建了标签,如果第一个变量是数字,标签呈现正常,但是如果第一个变量是字符串,标签呈现失败-知道问题出在哪里吗? 让我们从一个虚拟spdf开始: library(htmltools) library(sp) library(leaflet) df <- new("SpatialPointsDataFrame", data = structure(list(PMID = c(184397, 184397),

所有善良的灵魂,需要帮助。我正在创建传单地图,无法解决标签的奇怪问题。我用很少的变量创建了标签,如果第一个变量是数字,标签呈现正常,但是如果第一个变量是字符串,标签呈现失败-知道问题出在哪里吗? 让我们从一个虚拟spdf开始:

library(htmltools)
library(sp)
library(leaflet)

df <- new("SpatialPointsDataFrame", data = structure(list(PMID = c(184397, 184397), SPACEID = c("184397_1", "184397_2")), .Names = c("PMID", "SPACEID"), row.names = 1:2, class = "data.frame"), coords.nrs = numeric(0), coords = structure(c(-0.14463936, -0.14468822, 51.50726534, 51.50730171), .Dim = c(2L, 2L), .Dimnames = list(c("1", "2"), c("x", "y"))), bbox = structure(c(-0.14468822, 51.50726534, -0.14463936, 51.50730171), .Dim = c(2L, 2L), .Dimnames = list(c("x", "y"), c("min", "max"))), proj4string = new("CRS", projargs = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))

如果我使用
label=~as.character(HT)
它将生成一个逐字的HTML标记,但不会生成标签。有什么问题吗?

在仔细研究了代码之后,我发现在purr包中用
map2()
替换
mappy()
就可以解决这个问题。我不完全清楚为什么会这样。Slav和我都确认此解决方案在我们的机器上运行

library(sp)
library(leaflet)
library(htmltools)
library(purrr)

df@data$HT1 <- map2(1, "L", ~htmltools::HTML(sprintf("<h2>%s</h2> %s",.x,.y))) 
df@data$HT2 <- map2("L", 1, ~htmltools::HTML(sprintf("<h2>%s</h2> %s",.x,.y))) 

leaflet()%>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addLabelOnlyMarkers(data = df, label = ~HT2, 
                    labelOptions = labelOptions(noHide = TRUE, direction = 'center',
                                                textOnly = FALSE, textsize = "15px"))
库(sp)
图书馆(单张)
图书馆(htmltools)
图书馆(purrr)
df@data$HT1%
addProviderTiles(“OpenStreetMap.Mapnik”)%>%
addLabelOnlyMarkers(数据=df,标签=HT2,
labelOptions=labelOptions(noHide=真,方向='中心',
textOnly=FALSE,textsize=“15px”))

剩下的唯一挑战是如何在其上使用html escape,但这是处理它的另一个查询。答案完美地解决了我的警告问题——当有人想复制它来解决他们的挑战时——map2只针对2个参数,它不适用于任何其他数量的参数。您需要使用语法稍有不同的pmap(参数作为列表,您将其称为..1,..2,..3),所以pmap(列表(“L”,1,“W”),~htmltools::HTML(sprintf(“%s%s%s”、..1、..2、..3))@Slav这对未来的读者来说是一个很好的注释。谢谢你。
df@data$HT<-mapply(function(x,y){htmltools::HTML(sprintf("<h2>%s</h2> %s",x,y))},"L",1, SIMPLIFY = F) 
leaflet() %>%
addTiles() %>%
addMarkers(data = df, label = ~ HT)
library(sp)
library(leaflet)
library(htmltools)
library(purrr)

df@data$HT1 <- map2(1, "L", ~htmltools::HTML(sprintf("<h2>%s</h2> %s",.x,.y))) 
df@data$HT2 <- map2("L", 1, ~htmltools::HTML(sprintf("<h2>%s</h2> %s",.x,.y))) 

leaflet()%>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
addLabelOnlyMarkers(data = df, label = ~HT2, 
                    labelOptions = labelOptions(noHide = TRUE, direction = 'center',
                                                textOnly = FALSE, textsize = "15px"))