Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在传单中使用动态弹出窗口_R_Leaflet_R Leaflet - Fatal编程技术网

R 在传单中使用动态弹出窗口

R 在传单中使用动态弹出窗口,r,leaflet,r-leaflet,R,Leaflet,R Leaflet,我正在用弹出窗口制作传单地图。弹出窗口提供所选多边形的ID信息。我遇到的问题是,ID使用的字段的名称可能会更改,因此我最初使用的方式不再有效 以下是一个可复制的示例: ## preparing the RE: library(maps); library(sf); library(leaflet); library(htmltools) w = st_as_sf(map('world', plot = FALSE, fill = TRUE)) 我用来做的是准备一个html字符串来显示: tex

我正在用弹出窗口制作传单地图。弹出窗口提供所选多边形的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>")
这非常有效:

但是,该字段并不总是称为
ID
,但名称是已知的,并且在r对象中(此处称为
vari
):


知道怎么解决吗?顺便说一句,我的HTML比我的示例更复杂(使用了更多的变量,但是,所有其他变量名都是固定的,只有ID字段改变)

我不确定这是否是您想要的,但听起来您希望能够简单地使用列中的数据填充任何弹出窗口,该列不一定具有名称
ID
,而只是一个与标题无关的标识符?那么在这种情况下,
国家
?我担心这是一个丑陋的骗局,但鉴于您的数据结构包含一个data.frame,其中coords实际上是一个列表结构,我只需测试类的dataframe列,以字符为准,将其用作索引并直接调用

leaflet(data=w) %>% addTiles() %>% 
  addPolygons(
    popup = ~sprintf('<b>ID %s</b>', w[[names(which(mapply(is.character, w)))]])
  )
传单(数据=w)%%>%addTiles()%%>%
添加多边形(
popup=~sprintf('ID%s',w[[name(which(mapply(is.character,w)))]]
)

你的意思是,像一些国家一样,它们的名称作为一个名为“ID”的字段,而另一些国家则作为一个名为“Country”的字段或其他任何字段?也许这是一个愚蠢的问题,但是有没有一种方法可以让你先标准化你的数据,这样你就不必处理这个问题?对不起,如果我不清楚的话,这个领域可以被称为不同的东西,比如“ID”、“国家”、“支付”等等。我想标准化可以奏效,如果我找不到更好的解决方案,我会这么做。谢谢,这很有效。这确实是一种丑陋的欺骗;),但它解决了我的问题,所以谢谢!好极了。如果你想扩展场景,我们可以清理它哈哈
colnames(w) <- c("geometry", "country")
vari <- "country"

text <- paste0("<b>", vari, " %s</b>")
leaflet(data=w) %>% addTiles() %>% 
  addPolygons(
    popup = ~sprintf(
      text,
      htmlEscape(vari)
    )
  )
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'
leaflet(data=w) %>% addTiles() %>% 
  addPolygons(
    popup = ~sprintf('<b>ID %s</b>', w[[names(which(mapply(is.character, w)))]])
  )