我試圖從棒球參考網站上抓取玩家數據,使用函數爲每個玩家循環多年(變量「年份」)由「playerid」表示。使用R中的函數來抓取網站,返回「下標越界」錯誤
library(plyr)
library(XML)
fetch_stats <- function(playerid, year) {
url <- paste0("http://www.baseball-reference.com/players/gl.cgi?id=",playerid,"&t=b&year=",year)
data <- readHTMLTable(url, stringsAsFactors = FALSE)
data <- data[[3]]
data$Year <- year
data$PlayerId <- playerid
data
}
此功能工作得很好,當它被應用到一個單一的一年的數據,因爲在這裏看到:一旦
AdrianGonzales <- ldply("gonzaad01", fetch_stats, year= 2008, .progress="text")
然而,正如我實際上是通過多次使用該函數循環多年的職業球員,總是吐出以下錯誤:
AdrianGonzales <- ldply("gonzaad01", fetch_stats, year= 2009:2004, .progress="text")
Error in data[[3]] : subscript out of bounds
In addition: Warning message:
XML content does not seem to be XML: 'http://www.baseball- reference.com/players/gl.cgi?id=gonzaad01&t=b&year=2009
http://www.baseball-reference.com/players/gl.cgi?id=gonzaad01&t=b&year=2008
http://www.baseball-reference.com/players/gl.cgi?id=gonzaad01&t=b&year=2007
http://www.baseball-reference.com/players/gl.cgi?id=gonzaad01&t=b&year=2006
http://www.baseball-reference.com/players/gl.cgi?id=gonzaad01&t=b&year=2005
http://www.baseball-reference.com/players/gl.cgi?id=gonzaad01&t=b&year=2004'
從我已經能夠找到的「下標越界」當你超過LIM發生錯誤它是一個定義在R中的數據集。對於這個特定的函數,我可能只是愚蠢的,但我不明白這種情況將如何應用 - 或者爲什麼它可以在一年內工作,但不是一次一個。
我願意接受任何和所有的建議。提前致謝。
爲了完整性,您可以爲'XML'和'plyr'添加庫函數嗎? – steveb
圖書館電話添加。 – ImTerribleWithComputers