http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/で大圏接続マップを再現しようとすると問題が発生します。関数のループを実行すると、次のエラーが発生します。
Error in if (antipodal(p1, p2)) { : missing value where TRUE/FALSE needed
ちなみに、ループの外側にあるときは問題なく機能しますが、ループの設定のどこが問題なのかわかりません。
このエラーは、この方法でデータを表示しようとしたときに発生する一般的なエラーのようで、antipodal に渡される NULL 値と関係があります。それらが私のデータに含まれている可能性があるかどうかを見つけるのに苦労しています。大円の距離が 0 になる可能性がある同じ/オーバーレイである「to」および「from」の目的地を削除しました。これは、SO here の同様のエラーの問題であると報告されました。
元のコードでは、SQL クエリを使用して gcIntermediate のテーブルを組み立てていますが、コードを実行して自分で確認したい人のために、これらをテーブルとして書き出しました。
library(maptools)
library(rgeos)
library(sp)
library(geosphere)
fsub = read.csv("fsub.csv")
dfCord = read.csv("dfCord.csv")
dfBind = cbind(as.numeric(dfCord$lon), as.numeric(dfCord$lat))
sp = SpatialPoints(dfBind)
plot(sp)
for (j in 1:length(fsub$MODE9)) {
air1 <- dfCord[dfCord$sa2_main11 == fsub[j,]$O_SA2_11,]
air2 <- dfCord[dfCord$sa2_main11 == fsub[j,]$D_SA2_11,]
inter <- gcIntermediate(c(as.integer(air1[1,]$lon), as.integer(air1[1,]$lat)), c(as.integer(air2[1,]$lon), as.integer(air2[1,]$lat)), n=100, addStartEnd=TRUE)
lines(inter, col="black")
}
データ ファイルは GIT にあります。
dfCord.csv fsub.csv
https://github.com/GaryPate/R-Greatcircles/commit/e1149ccdb7ab13b89f5f11e8ebad66f26ec3e39b
どうもありがとう!