2012-07-02 12 views
17

Sto tentando di utilizzare la seguente sintassi per ottenere le informazioni sull'occupazione dalla pagina wikipedia di George Clooney. Alla fine mi piacerebbe che ci fosse un ciclo per ottenere dati sulle occupazioni di varie personalità.L'argomento è di lunghezza zero

Tuttavia, ottengo il seguente problema in esecuzione il codice qui sotto:

Error in if (symbol != "role") symbol = NULL : argument is of length zero 

io non sono sicuro perché questo continua a venire su.

library(XML) 
library(plyr) 
    url = 'http://en.wikipedia.org/wiki/George_Clooney' 

# don't forget to parse the HTML, doh! 
    doc = htmlParse(url) 

# get every link in a table cell: 
    links = getNodeSet(doc, '//table/tr/td') 

# make a data.frame for each node with non-blank text, link, and 'title' attribute: 
    df = ldply(links, function(x) { 
       text = xmlValue(x) 
      if (text=='') text=NULL 
     symbol = xmlGetAttr(x, 'class') 
     if (symbol!='role') symbol=NULL 
     if(!is.null(text) & !is.null(symbol)) 
       data.frame(symbol, text)   }) 
+3

Consigli per il debug: http://stackoverflow.com/a/5156351/636656. In particolare, prova 'opzioni (error = recover)' qui. –

+1

il problema è molto probabile che 'symbol' sia' NULL'. Vedi cosa succede con 'if (NULL! =" Ruolo ") print ('test')'. Qualcosa del genere dovrebbe funzionare, anche se non ho eseguito il tuo codice: 'if (! Is.null (symbol) && symbol! = 'Role') symbol <- NULL' – GSee

+0

Usa' col.names = my_column_names' in kable () con 'my_column_names' come vettore di caratteri dei nomi ricercati, per me ha funzionato! –

risposta

29

Come @gsee accennato, è necessario controllare che non symbolNULL è prima di controllare il suo valore. Ecco un aggiornamento minore del tuo codice che funziona (almeno per George).

df = ldply(
    links, 
    function(x) 
    { 
    text = xmlValue(x) 
    if (!nzchar(text)) text = NULL 
    symbol = xmlGetAttr(x, 'class') 
    if (!is.null(symbol) && symbol != 'role') symbol = NULL 
    if(!is.null(text) & !is.null(symbol)) 
     data.frame(symbol, text)   
    } 
) 
+0

Se la risposta ha risolto il problema, fare clic sul segno di spunta a sinistra per selezionarlo come soluzione. –

0

Utilizzare col.names = my_column_names a Kable() con my_column_names essendo carattere vettoriale dei vostri nomi ricercati, per me ha funzionato! - Benjamin Telkamp

Problemi correlati