ggmap を使用して地図上に位置をプロットしようとしています。ファセットを使用したいので、base_layer
引数をに指定する必要がありggmap
ます。また、これを関数にラップしようとしています。
マップの境界ボックスを定義する変数があります。
long.range <- c(-71.5, -67.5)
lat.range <- c(42.5, 44.5)
そして、プロットしたいデータを定義する data.frame :
test.data <- data.frame("Name" = c("site1","site2","site3"),
"LAT" = c(43.25,43.4,44),
"LONG" = c(-71.25,-69.5,-68.5))
外に出てマップを取得し、data.frame を base_layer として適用する関数があります。
CreateBaseMap <- function(lat.range = c(NA,NA),
long.range = c(NA,NA),
data.in = NULL){
# download the map tile
base.map.in <- get_map(location = c(min(long.range),
min(lat.range),
max(long.range),
max(lat.range)),
source = "osm")
# create the map object
if (is.null(data.in)){
base.map <- ggmap(base.map.in)
} else {
base.map <- ggmap(base.map.in,
base_layer = ggplot(aes_string(x = "LONG",
y = "LAT"),
data = data.in))
}
base.map <- base.map +
labs(x = "Longitude",
y = "Latitude") +
coord_map()
print(base.map)
return(base.map)
}
そして、次を使用して関数を呼び出します
base.map <- CreateBaseMap(lat.range = lat.range, long.range = long.range, data.in = test.data)
このエラーが発生します。
Error in ggplot(aes_string(x = "LONG", y = "LAT"), data = data.in) :
object 'data.in' not found
これまでのトラブルシューティング
次のように、関数の中身を直接呼び出すかどうかはわかります。
base.map <- ggmap(get_map(location = c(min(long.range),
min(lat.range),
max(long.range),
max(lat.range)),
source = "osm"),
base_layer = ggplot(aes_string(x = "LONG",
y = "LAT"),
data = test.data)) +
geom_point()
print(base.map)
その後、正常に動作します。
print(data.in)
への呼び出しに到達する前に data.in が存在することも確認しましたが、base_layer
そこにあることがわかります。
質問
への呼び出しが をbase_layer
認識しないようdata.in
です。
- どうすれば
base_layer
本当に受け入れたいと説得できdata.in
ますか? - これは の問題
ggplot
ですか、それとも何か間違っていますか?