我有一个包含地址、城市、州和邮编的数据框。我想使用Yahoo API对每个地址进行地理编码。
我基于O'Reilly的“使用R进行数据混搭”教程中的代码进行开发。原始示例使用硬编码的城市向量。我正在尝试创建一个支持多个城市的动态示例。
以下是代码的简化版本:
当我尝试引用myStreet$City和myStreet$Address时,出现错误。
我基于O'Reilly的“使用R进行数据混搭”教程中的代码进行开发。原始示例使用硬编码的城市向量。我正在尝试创建一个支持多个城市的动态示例。
以下是代码的简化版本:
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并存储每个成员的经纬度。
1:nrow
语法。如果 myStreet 中没有行,则会生成序列1 0
。更安全的做法是使用seq_len(nrow(myStreets))
。 - Head