首页 > 解决方案 > R - 是否可以填写保存为对象的函数参数?

问题描述

map_basic <- leaflet::leaflet() %>%
             leaflet::addMarkers(
                data = flow_stations,
                group = "Stream Flow Stations",
                options = leaflet::leafletOptions(pane="marker"),                    
                label = paste0(flow_stations$`Data Source`, ": ", flow_stations$Station, " (", flow_stations$`Station ID`,")"),
                labelOptions = labelOptions(textsize = "15px"),
                popup = ~paste0("<b>", 
                                flow_stations$`Data Source`," Station Name: ",
                                flow_stations$Station,"<br>",
                                "Station ID: ", flow_stations$`Station ID`,
                                sapply(flow_stations$Station, 
                                       popupTable.flow, USE.NAMES = FALSE)),
                popupOptions = leaflet::popupOptions(maxWidth = 650, maxHeight = 300))

在上面的代码中,我可以将参数保存在一个对象中并在leaflet::addMarkers()的函数中使用该对象吗?例如,

flowStations <- paste0(
                   'data = flow_stations,',
                   'group = "Stream Flow Stations",',
                   'options = leaflet::leafletOptions(pane="marker"),',                       
                   'label = paste0(flow_stations$`Data Source`, ": ", flow_stations$Station, " (", flow_stations$`Station ID`,")"),',
                   'labelOptions = labelOptions(textsize = "15px"),',
                   'popup = ~paste0("<b>", ',
                                   'flow_stations$`Data Source`," Station Name: ",',
                                   'flow_stations$Station,"<br>",',
                                   '"Station ID: ", flow_stations$`Station ID`,',
                                   'sapply(flow_stations$Station, ',
                                          'popupTable.flow, USE.NAMES = FALSE)),',
                   'popupOptions = leaflet::popupOptions(maxWidth = 650, maxHeight = 300)')

然后,将代码简化为如下所示的内容进行测试。

map_basic <- leaflet::leaflet() %>%
             leaflet::addMarkers(flowStations)

测试代码的错误信息是

派生点错误(数据,lng,lat,missing(lng),missing(lat),“addMarkers”):未找到点数据;请为 addMarkers 提供数据和/或 lng/lat 参数

任何人有使其工作的想法,请分享。谢谢!

** 更新 *********************************************** *****************

感谢您的所有建议。我在下面添加了一个非常简单的可重现脚本。

Station <- c("Station 1","Station 2")
Lat <- c("45.11373","45.07123")
Long <- c("-121.8151","-121.9406")
flow_stations <- data.frame(Station, Lat, Long) %>% 
   sf::st_as_sf(coords = c("Long","Lat"), crs = sf::st_crs("+init=EPSG:4326"))

map_basic <- leaflet::leaflet() %>%
   leaflet::addMarkers(data = flow_stations,
                       label = flow_stations$Station)

我试图将参数添加到列表中。

flowStations <- list("data = flow_stations",
                     "label = flow_stations$Station")

然后根据@r2evans 的建议在下面尝试。

map_basic <- leaflet::leaflet() %>%
   do.call(leaflet::addMarkers,flowStations)

我得到了错误:

do.call(., Leaflet::addMarkers, flowStations) 中的错误:第二个参数必须是一个列表

我可能没有正确使用 do.call 。更多建议?

标签: rleaflet

解决方案


如果将参数保存为列表(不是字符串),则可以使用 do.call()。您的代码不可复制,但这里有一个展示这个想法的例子:

args = list(
  x = 1:10,
  y = 2:20
)

do.call(what = t.test, args = args)

这将调用t.test带有命名参数的函数args


推荐阅读