2012-04-08 125 views
4

我正在学习用“R中数据混搭” R,我不能让页上的例子。 5工作。我使用的代码是这样的:数据混搭:“下标越界”

# Install and load RCurl 
install.packages("RCurl") 
library("RCurl") 

# Install and load the XML package 
install.packages("XML") 
library("XML") 

# Download file and parse it 
appid<- 'ucVVQzLV34GQR4ppLwbdW6G8cCSZDoCBqAc53NXsWB3gXkmP1I4epLwMxboV.PfADi_2ubr2A7Cg8FO4Z3xVxxujza2FJ 8M-' 
street<-"11408 Bellflower Road" 
RCurl<-paste( 
"http://local.yahooapis.com/MapsService/V1/geocode?appid=", 
appid, 
"&street=", 
URLencode(street), 
"&city=Cleveland&state=OH" 
,sep="") 
#xmlResult<-xmlTreeParse(requestUrl,isURL=TRUE) 
xmlResult<-xmlTreeParse(getURL(RCurl)) 

#Print the output 
str(xmlResult) 

但我做到这一点时,我没有得到以下结果:

List of 2 
$ doc:List of 3 
    ..$ file :List of 2 
    .. ..$ text : Named list() 
    .. .. ..- attr(*, "class")= chr [1:5] "XMLTextNode" "XMLNode" "RXMLAbstractNode"  "XMLAbstractNode" ... 
    .. ..$ Message:List of 1 
    .. .. ..$ text: Named list() 
    .. .. .. ..- attr(*, "class")= chr [1:5] "XMLTextNode" "XMLNode" "RXMLAbstractNode" "XMLAbstractNode" ... 
    .. .. ..- attr(*, "class")= chr [1:4] "XMLNode" "RXMLAbstractNode" "XMLAbstractNode" "oldClass" 
    .. ..- attr(*, "class")= chr [1:4] "XMLNode" "RXMLAbstractNode" "XMLAbstractNode" "oldClass" 
    ..$ version : Named list() 
    .. ..- attr(*, "class")= chr [1:5] "XMLCommentNode" "XMLNode" "RXMLAbstractNode" "XMLAbstractNode" ... 
    ..$ children: 
Error in x$children[[...]] : subscript out of bounds 

我在做什么错?

+0

没什么,可能是。该网址似乎返回一个404错误,所以也许它错了或过时? – joran 2012-04-08 02:47:36

回答

9

该API已被弃用。 Here is the current one。试试这个:

library("RCurl") 
library("XML") 
appid  <- 'ucVVQzLV34GQR4ppLwbdW6G8cCSZDoCBqAc53NXsWB3gXkmP1I4epLwMxboV.PfADi_2ubr2A7Cg8FO4Z3xVxxujza2FJ 8M-' 
address <- paste("11408+Bellflower+Road", "Cleveland", "OH", sep=",+") 
urlRequest <- paste("http://where.yahooapis.com/geocode?q=", 
        address, appid=appid, sep = "") 
doc <- xmlToList(xmlTreeParse(urlRequest)) # Convert to List 
str(doc) 

它为我工作。虽然,你可能想检查它是否有正确的地址。有没有邮政编码?您可能还需要寻找到Google's Geocoding API。它不再需要烦人的钥匙。

List of 7 
$ Error  : chr "0" 
$ ErrorMessage: chr "No error" 
$ Locale  : chr "us_US" 
$ Quality  : chr "87" 
$ Found  : chr "1" 
$ Result  :List of 29 
    ..$ quality  : chr "87" 
    ..$ latitude : chr "41.511326" 
    ..$ longitude : chr "-81.605583" 
    ..$ offsetlat : chr "41.511230" 
    ..$ offsetlon : chr "-81.605453" 
    ..$ radius  : chr "2900" 
    ..$ name  : NULL 
    ..$ line1  : chr "11408 Bellflower Rd" 
    ..$ line2  : chr "Cleveland, OH 44106" 
    ..$ line3  : NULL 
    ..$ line4  : chr "United States" 
    ..$ house  : chr "11408" 
    ..$ street  : chr "Bellflower Rd" 
    ..$ xstreet  : NULL 
    ..$ unittype : NULL 
    ..$ unit  : NULL 
    ..$ postal  : chr "44106" 
    ..$ neighborhood: NULL 
    ..$ city  : chr "Cleveland" 
    ..$ county  : chr "Cuyahoga County" 
    ..$ state  : chr "Ohio" 
    ..$ country  : chr "United States" 
    ..$ countrycode : chr "US" 
    ..$ statecode : chr "OH" 
    ..$ countycode : NULL 
    ..$ uzip  : chr "44106" 
    ..$ hash  : chr "BFBDCAB96C2CB175" 
    ..$ woeid  : chr "12776632" 
    ..$ woetype  : chr "11" 
$ .attrs  : Named chr "1.0" 
    ..- attr(*, "names")= chr "version" 
+3

南加州大学(USC)还提供了一个很好的地理编码服务。它提供了许多谷歌没有的选项,例如包括人口普查信息(人口普查区域,街区等,地址在其中),并且它提供了很多用于返回对象的选项,例如CSV(一行可以附加到创建一个完整的CSV文件)和KML(在谷歌地球或地图)的格式观看。带有文档的URL位于https://webgis.usc.edu/Services/Geocode/WebService/GeocoderWebService.aspx – 2012-04-08 03:26:46

+0

谢谢!这真的很棒。我会多玩一下,看看我是否可以进入下一个阶段! =) – histelheim 2012-04-08 15:35:42