2012-07-02 17 views
17

George Clooneyのwikipediaページから職業情報を取得するために、次の構文を使用しようとしています。最終的に私は様々な人格の職業に関するデータを得るためのループが必要です。私はこれが来る続けている理由はわからない引数の長さはゼロです

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

はしかし、私は以下のコードを実行している次のような問題を取得します。

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

デバッグのアドバイス:http://stackoverflow.com/a/5156351/636656具体的には、ここで 'options(error = recover)'を試してください。 –

+1

問題は 'symbol'が' NULL'です。 'if(NULL!=" role ")print( 'test')'がどうなるか見てみましょう。 'if(!is.null(シンボル)&& symbol!= 'role')symbol < - NULL' – GSee

+0

kableで' col.names = my_column_names'を使用してください(これは、あなたのコードを実行しませんでしたが、 ) 'my_column_names'はあなたの望む名前の文字ベクトルです。 –

答えて

29

@gseeが述べたように、あなたはその値をチェックする前にsymbolNULLではないことを確認する必要があります。以下は、少なくともジョージのために動作するコードのマイナーな更新です。 my_column_namesがあなたの望んでいた名前の文字ベクトルであることとKABLE()内

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

答えがあなたの問題を解決した場合は、左のチェックをクリックしてソリューションとして選択します。 –

0

使用col.namesの=のmy_column_namesは、私にとってそれは働きました! - Benjamin Telkamp

関連する問題