2012-07-02 38 views
17

George Clooney'in wikipedia sayfasından bilgi almak için aşağıdaki sözdizimini kullanmaya çalışıyorum. Sonunda çeşitli kişiliklerin meslekleri hakkında bilgi almak için bir döngü olmasını isterim.Bağımsız değişken uzunluğu sıfır

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

bu geliyor devam ediyor neden emin değilim:

Ancak, aşağıdaki kodu çalıştırarak aşağıdaki sorunu olsun. @gsee belirtildiği gibi

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

Hata ayıklama tavsiyesi: http://stackoverflow.com/a/5156351/636656. Özellikle, '' seçenekler'i (error = recover) 'deneyin. –

+1

problemi büyük olasılıkla 'symbol'' NULL'dur. 'If (NULL! = "Role") print (' test ') 'ile ne olduğunu görün. Böyle bir şey işe yaramadı, kodunuzu çalıştırmadım bile olsa: 'if (! Is.null (symbol) && sembol! = 'Role') sembol <- NULL ' – GSee

+0

' col.names = my_column_names' kable olarak kullanın ("my_column_names" ile aranan isimlerin karakter vektörü, benim için işe yaradı! –

cevap

29

, size değerini kontrol etmeden önce symbol değil NULL olup olmadığını kontrol etmek gerekir. İşte kodunuzda çalışan küçük bir güncelleme (en azından George için). my_column_names senin istediğini isimlerin karakter vektör olmak Kable() içinde

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

Yanıt sorununuzu çözdüyse, çözüm olarak seçmek için soldaki onay işaretini tıklayın. –

0

Kullanım col.names = my_column_names benim için işe yaradı! - Benjamin Telkamp

İlgili konular