2012-07-02 174 views
17

我正嘗試使用以下語法從George Clooney的維基百科頁面獲取職業信息。最後,我希望有一個循環來獲取關於各種個人職業的數據。參數的長度爲零

不過,我得到運行下面的代碼如下問題:

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)&& symbol!='role')symbol < - NULL' – GSee

+0

在kable中使用'col.names = my_column_names' )'my_column_names'是你想要的名字的字符向量,對我來說它工作! –

回答

29

正如@gsee提到的,你需要檢查symbol不是NULL你檢查它的價值了。這是對你的代碼的一個小的更新(至少對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

如果答案解決了您的問題,請單擊左側的打勾將其選爲解決方案。 –

0

使用col.names =在kable()與my_column_names是你想要的名稱特徵向量my_column_names,對我來說它的工作! - Benjamin Telkamp