2014-06-06 117 views
0

的消息,我有以下代碼:閱讀有R

install.packages("XML") 
library(XML) 
install.packages("plyr") 
library(plyr) 

feed <- "http://feeds.reuters.com/Reuters/worldNews?format=xml" 
data <- ldply(xmlToList(feed), data.frame) 

但是,它給了我下面的錯誤:

Error in data.frame(title = "Reuters: World News", link = 
"http://www.reuters.com", : arguments imply differing number of 
rows: 1, 3, 2 

爲什麼我不能加載這個XML(但我可以加載其他XML如www.w3schools.com/XQuery/books.xml)?

+2

你檢查'STR(xmlToList(飼料))'呢?這個數據不是很「常規」的,所以你不想把它變成一個'data.frame'。 XML加載正常,但data.frame不知道如何處理這樣的嵌套數據(它傾向於矩形數據) – MrFlick

回答

3

還有一個功能xmlToDataFrame

library(XML) 
feed <- "http://feeds.reuters.com/Reuters/worldNews?format=xml" 
(data <- xmlToDataFrame(xmlParse(feed)["/rss/channel/item"])) 
# dplyr::glimpse(data) 
# Variables: 
# $ title  (fctr) More than 60 migrants drown in boat sinking off Yemen:... 
# $ link  (fctr) http://feeds.reuters.com/~r/Reuters/worldNews/~3/p08tv... 
# $ description (fctr) GENEVA (Reuters) - At least 60 African migrants and tw... 
# $ category (fctr) worldNews, worldNews, worldNews, worldNews, worldNews,... 
# $ pubDate  (fctr) Fri, 06 Jun 2014 19:18:12 GMT, Fri, 06 Jun 2014 19:01:... 
# $ guid  (fctr) http://www.reuters.com/article/2014/06/06/us-yemen-mig... 
# $ origLink (fctr) http://reuters.us.feedsportal.com/c/35217/f/654198/s/3... 
+0

我實際上認爲這個答案比其他答案更容易讓我(初學者)閱讀/理解我接受了。謝謝。 – user1477388

2

我會猜測你只是想要結果中所有「item」節點的data.frames。如果是這種情況,那麼

feed <- "http://feeds.reuters.com/Reuters/worldNews?format=xml" 
reuters<-xmlToList(feed) 
lapply(reuters[[1]][names(reuters[[1]])=="item"], data.frame) 

應該做的伎倆。