我看到传单包中的弹出窗口使用了两种不同的格式。对于附加到单个标记的单个弹出窗口,使用" ="来调用函数。分配变量值。 (见https://rstudio.github.io/leaflet/popups.html)。对于多个数据值的图,我看到" ="和" =〜"用于为变量赋值。 (见Change color of leaflet marker)。我可能没有做出正确的观察,但这是否与一个奇点有关,而不是多点,或者其他什么?我在哪里可以找到规则?
答案 0 :(得分:0)
也许,these lines in leaflet可能有助于解释正在发生的事情。实际上,~
表示使用提供的data
来评估该表达式。你的评论"这是一个奇点而不是多点"非常接近正确的观察。如果您再次查看这些行,则会为doResolveFormula
,data.frame
,list
和map
定义Spatial*
。
让我们建立popups example以希望在代码中解释这一点。这是一个例子。
library(leaflet)
content <- paste(sep = "<br/>",
"<b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b>",
"606 5th Ave. S",
"Seattle, WA 98138"
)
leaflet() %>% addTiles() %>%
addPopups(-122.327298, 47.597131, content,
options = popupOptions(closeButton = FALSE)
)
现在,让我们将lat
,lng
和内容全部放在data.frame
中,并在我们的路径中发生错误发现。
content_df <- data.frame(
lng = -122.327298,
lat = 47.59731,
content = content
)
leaflet() %>% addTiles() %>%
addPopups(content_df,
options = popupOptions(closeButton = FALSE)
)
因此,即使我们的内容只有一个数据点,leaflet
也不知道如何将data.frame
的列映射到它所期望的参数。以下是帮助leaflet
了解的方法。
content_df <- data.frame(
lng = -122.327298,
lat = 47.59731,
content = content
)
leaflet() %>% addTiles() %>%
addPopups(
lng = ~lng,
lat = ~lat,
popup = ~content,
# default data is getMapData(map)
# which does not contain our popup content
data = content_df,
options = popupOptions(closeButton = FALSE)
)
~
让我们手动使用resolveFormula
查看正在发生的事情。
leaflet:::resolveFormula(~content,content_df)
为我们提供了content
的{{1}}列。
content_df
在我们的地图应用程序之外,我将添加一个简单的设计示例,以便再一次解释。
[1] <b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b><br/>606 5th Ave. S<br/>Seattle, WA 98138
给我们leaflet:::resolveFormula(~1+2,data.frame())
。
1+2
空3
是必要的,因此R会选择data.frame()
。我们也可以使用doResolveFormula.data.frame
。
我真的希望这会有所帮助。这是对list()
的非常规使用,我起初也遇到了麻烦。但是,我认为重要的是要理解,因为越来越多的RStudio正在采用这种惯例。