r - 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 。更多建议?
解决方案
如果将参数保存为列表(不是字符串),则可以使用 do.call()。您的代码不可复制,但这里有一个展示这个想法的例子:
args = list(
x = 1:10,
y = 2:20
)
do.call(what = t.test, args = args)
这将调用t.test
带有命名参数的函数args
。
推荐阅读
- python - 计算列中零的数量
- c# - 如何在 ASP.Net 核心中跟踪相关记录 ID 以更新子记录
- java - 使用 JUnit 测试具有布尔条件的 void 方法
- postgresql - PostgreSQL node-pg 编码情况
- windows - DwinsHs for Inno Setup:编辑 HTTP_HEADER const 以在安装期间下载 URL
- flutter - 谷歌地图颤振中的半径单位是什么
- c# - 为什么一个属性不为空,即使它是?
- html - 如何将多个文件放在网站主机上并使其从某个文件开始
- validation - 引用数据验证?
- python - 在 Python 中访问列表中的值