使用适当的符号(=或〜)与传单包

时间:2016-04-20 20:07:56

标签: javascript r leaflet

我看到传单包中的弹出窗口使用了两种不同的格式。对于附加到单个标记的单个弹出窗口,使用" ="来调用函数。分配变量值。 (见https://rstudio.github.io/leaflet/popups.html)。对于多个数据值的图,我看到" ="和" =〜"用于为变量赋值。 (见Change color of leaflet marker)。我可能没有做出正确的观察,但这是否与一个奇点有关,而不是多点,或者其他什么?我在哪里可以找到规则?

1 个答案:

答案 0 :(得分:0)

也许,these lines in leaflet可能有助于解释正在发生的事情。实际上,~表示使用提供的data来评估该表达式。你的评论"这是一个奇点而不是多点"非常接近正确的观察。如果您再次查看这些行,则会为doResolveFormuladata.framelistmap定义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)
  )

现在,让我们将latlng和内容全部放在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正在采用这种惯例。