我在尝试使用R包XML中的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 Studio 0.96.330运行64位R 2.15.1。似乎有几个关于readHTMLTable()函数的问题,但没有一个问题解决了这个问题。有谁知道发生了什么事?
答案 0 :(得分:1)
当readHTMLTable()
抱怨'names'属性时,很可能会将数据与为头标值解析的数据进行匹配。最简单的方法是简单地完全关闭标题解析:
table.list <- readHTMLTable(theurl, header=F)
请注意,我将返回值的名称从“readtable”更改为“table.list”。 (我也从1开始跳过getURL()
调用。它对我不起作用.2。readHTMLTable()知道如何处理URL)。更改的原因是,如果没有进一步的指示,readHTMLTable()
将搜索并解析它在给定页面上可以找到的每个HTML表,返回包含每个数据框的列表。
您之后发送的页面相当丰富,有8个单独的表格:
> length(table.list)
[1] 8
如果您只对页面上的单个表感兴趣,则可以使用which
属性指定它并直接将其内容作为data.frame接收。
如果它在您不感兴趣的桌子上窒息,这也可以解决您的原始问题。许多页面仍然使用表格进行导航,搜索框等,所以值得首先查看页面。 / p>
但是在你的例子中不太可能出现这种情况,因为除了其中一个之外,它实际上只是窒息了。如果星星对齐并且您只对页面上成功运行的第三个表感兴趣(传递统计信息),您可以像这样抓住它,保持标题解析:
> 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