2012-04-08 12 views
4

Ich lerne R mit "Data Mashups in R" und ich kann nicht das Beispiel auf p. 5 zu arbeiten. Der Code, den ich verwenden, ist dies:Daten Mashups in R: "Index außerhalb der Grenzen"

# 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) 

Aber wenn ich das tue ich nicht bekommen das folgende Ergebnis:

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 

Was mache ich falsch?

+0

Nichts, möglicherweise. Die URL scheint einen 404-Fehler zurückzugeben, also vielleicht falsch oder veraltet? – joran

Antwort

9

Diese API ist veraltet. Here is the current one. Versuchen Sie dies stattdessen:

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) 

Es funktionierte für mich. Vielleicht möchten Sie überprüfen, ob die richtige Adresse gefunden wurde. Gibt es keine Postleitzahl? Vielleicht möchten Sie auch in Google's Geocoding API suchen. Es benötigt keinen lästigen Schlüssel mehr.

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

Die University of Southern California (USC) bietet auch einen schönen Geocoding-Service. Es bietet viele Optionen, die Google nicht hat, wie zum Beispiel Census-Informationen (welcher Zensustrakt, Block, etc., die Adresse ist innerhalb) und es bietet viele Optionen für Rückgabeobjekte, wie CSV (eine Zeile, die kann angehängt werden, um ein vollständiges CSV-Dokument zu erstellen) und KML-Formate (zum Anzeigen in Google Earth oder Maps). Die URL mit der Dokumentation befindet sich unter https://webgis.usc.edu/Services/Geocode/WebService/GeocoderWebService.aspx –

+0

Vielen Dank! Das ist wirklich großartig. Ich werde ein bisschen mehr damit spielen, um zu sehen, ob ich zur nächsten Stufe übergehen kann! =) – histelheim

Verwandte Themen