0

尝试使用readHTMLTableR 包 XML 中的函数时遇到问题。跑步时

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 Studio 0.96.330 运行 64 位 R 2.15.1。似乎还有其他几个关于 readHTMLTable() 函数的问题,但没有一个解决这个特定问题。有谁知道发生了什么?

4

1 回答 1

1

readHTMLTable()抱怨 'names' 属性时,可以肯定的是,它在将数据与为标题值解析的内容匹配时遇到了问题。解决此问题的最简单方法是完全关闭标头解析:

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

请注意,我将返回值的名称从“readtable”更改为“table.list”。(我也跳过了这个getURL()电话,因为 1. 它对我不起作用, 2. readHTMLTable() 知道如何处理 URL)。更改的原因是,如果没有进一步的指示,readHTMLTable()它将搜索并解析它可以在给定页面上找到的每个 HTML 表,返回一个包含每个数据帧的列表。

您发送后的页面相当丰富,有8个单独的表格:

> length(table.list)
[1] 8

如果您只对页面上的单个表格感兴趣,您可以使用该which属性来指定它并直接将其内容作为 data.frame 接收。

如果它卡在您不感兴趣的表格上,这也可以解决您最初的问题。许多页面仍然使用表格进行导航、搜索框等,因此值得先看一下该页面。

但在您的示例中不太可能出现这种情况,因为它实际上扼杀了除其中一个之外的所有内容。万一星星对齐并且您只对页面上成功启动的第三个表感兴趣(传递统计信息),您可以像这样抓住它,保持标题解析:

> 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
于 2012-09-02T14:03:49.240 回答