2012-08-31 134 views
0

嘗試在R包XML中使用readHTMLTable函數時遇到問題。當運行R readHTMLTable()函數錯誤

library(XML) 
baseurl <- "http://www.pro-football-reference.com/teams/" 
team <- "nwe" 
year <- 2011 
theurl <- paste(baseurl,team,"/",year,".htm",sep="") 

readurl <- getURL(theurl) 
readtable <- readHTMLTable(readurl) 

我得到的錯誤信息:

Error in names(ans) = header : 
'names' attribute [27] must be the same length as the vector [21] 

我過R工作室0.96.330運行64位R 2.15.1。似乎還有其他幾個關於readHTMLTable()函數的問題,但沒有提到這個具體問題。有誰知道發生了什麼事?

回答

1

readHTMLTable()抱怨'名稱'屬性時,很好的一個選擇是它在匹配數據和解析標題值時遇到了麻煩。解決這個問題的最簡單的方法是簡單地關閉頭完全解析:

table.list <- readHTMLTable(theurl, header=F) 

請注意,我是從「readtable」改變返回值的名稱爲「table.list」。 (我也跳過了getURL()調用,因爲它不適合我和2. readHTMLTable()知道如何處理URL)。更改的原因是,如果沒有進一步的指示,readHTMLTable()將搜索並解析它在給定頁面上可以找到的每個HTML表格,併爲每個表格返回一個包含data.frame的列表。

你後發送它的頁面是相當豐富的,有8個獨立的表:

> length(table.list) 
[1] 8 

如果你只在頁面上一個表有興趣,你可以使用which屬性來指定它,直接接收其內容作爲data.frame。

這也可以解決你原來的問題,如果它在你不感興趣的桌子上ch咽。許多頁面仍然使用表格導航,搜索框等,所以值得看一下頁面。

但是在你的例子中不太可能出現這種情況,因爲它實際上在除了其中一個之外都窒息。在不太可能的情況下,星星對齊,你只對頁面上成功的第三張表格感興趣(通過統計),你可以像這樣抓住它,保持頭文件解析:

> passing.df = readHTMLTable(theurl, which=3) 
> print(passing.df) 
    No.    Age Pos G GS QBrec Cmp Att Cmp% Yds TD TD% Int Int% Lng Y/A AY/A Y/C Y/G Rate Sk Yds NY/A ANY/A Sk% 4QC GWD 
1 12 Tom Brady* 34 QB 16 16 13-3-0 401 611 65.6 5235 39 6.4 12 2.0 99 8.6 9.0 13.1 327.2 105.6 32 173 7.9 8.2 5.0 2 3 
2 8 Brian Hoyer 26  3 0   1 1 100.0 22 0 0.0 0 0.0 22 22.0 22.0 22.0 7.3 118.7 0 0 22.0 22.0 0.0