我正在构建一个功能,可以自动为用户数据绘制地图,具有各种选项,其中之一是允许不同的地图背景,要么是来自
ggmap::get_map
的 Google 卫星,要么是由 gbm.auto::gbm.basemap
处理的全球海岸线(我的自己的包)。问题是,绘图起始函数需要不同,分别为 ggmap
或 ggplot
,但绘图块的其余部分是相同的。我尝试将其作为大括号中的选项:
if (mapsource == "gbm.basemap") {
ggplot() +
ggspatial::layer_spatial(shape, col = "black")
} else {
ggmap::ggmap(myMap)
} +
stars::geom_stars(data = predabundstars |> sf::st_transform(3857), inherit.aes = FALSE) +
[more code, fill, theme, etc]
这适用于第二个选项(其他;ggmap):
但是如果
mapsource == "gbm.basemap"
,它会运行大括号中的初始代码,但后面什么也不运行:
如果我在大括号之外运行 ggplot 代码,它工作正常,因此数据没有任何问题,因此它一定是“开始绘图的大括号”位:
我尝试切换它(
ggmap
然后basemap
),并独立地完成它们(if ggmap
,if basemap
)但仍然没有骰子。这是ggplot
的特点吗?有谁知道解决办法吗?我想“核”选项将复制整个绘图代码块,一个带有 ggmap
,一个带有 ggplot
,然后 ifelse
-ing 它们。我认为这会起作用,但它也有点糟糕,因为它太笨重了。
提前感谢您提供任何情报!
我建议在 if 语句中分配给一个对象,然后在 if 语句之后使用它:
if (mapsource == "gbm.basemap") {
p <- ggplot() +
ggspatial::layer_spatial(shape, col = "black")
} else {
p <- ggmap::ggmap(myMap)
}
p <- p + stars::geom_stars(data = predabundstars |> sf::st_transform(3857), inherit.aes = FALSE)