Address、City、State、Zip エンティティを含むデータフレームがあります。そこから、Yahoo API を使用して各住所をジオコーディングしようとしています。
これは、O'Reilly の Data Mashups using R Tutorial のコードに基づいています。元の例では、番地のベクトルを取得し、ハードコーディングされた都市を使用しています。複数の都市をサポートする動的な例を作成しようとしています。
コードの短縮版は次のとおりです。
geocodeAddresses<-function(myStreets)
}
appid<-'<put your appid here>'
baseURL<-"http://local.yahooapis.com/MapsService/V1/geocode?appid="
myGeoTable<-data.frame(address=character(),lat=numeric(),long=numeric(),EID=numeric())
for (myStreet in myStreets){
requestUrl<-paste(baseURL, appid, "&street=", URLencode(myStreet$address),"&city=",URLencode(myStreet$city),"&state=",URLencode(myStreet$state),sep="")
xmlResult<-xmlTreeParse(requestUrl,isURL=TRUE,addAttributeNamespaces=TRUE)
geoResult<-xmlResult$doc$children$ResultSet$children$Result
lat<-xmlValue(geoResult[['Latitude']])
long<-xmlValue(geoResult[['Longitude']])
myGeoTable<-rbind(myGeoTable,data.frame(address=myStreet,Y=lat,X=long,EID=NA))
}
}
myStreet$City と myStreet$Address を参照しようとすると、エラーが発生します
$ operator is invalid for atomic vectors
データ フレーム myStreets をループする以外に、行ごとに 1 回だけ Yahoo API を呼び出し、メンバーごとに経度/緯度の両方を保存する方法がわかりません。