我有一个包含地址、城市、州、邮编实体的数据框。从那里开始,我尝试使用 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 之外,我不知道如何才能为每行仅调用一次 Yahoo API 并存储每个成员的 long/lat。