2015-03-31 86 views
0

對不起,這可能太涉及一個問題在這裏問。我試圖重現NYTime方言地圖可視化的黑客會話,位於here。我一開始就沒問題,但是當我嘗試瀏覽多個頁面時遇到了問題。在R中循環多個網頁

救人不必再現從幻燈片的信息,這是我到目前爲止有:

創建URL地址

mainURL <- 'http://www4.uwm.edu/FLL/linguistics/dialect/staticmaps/' 
stateURL <- 'states.html' 
url <- paste0(mainURL, stateURL) 

下載和分析

tmp <- getURL(url) 
tmp <- htmlTreeParse(tmp, useInternalNodes = TRUE) 

提取頁面地址並保存到subURL

subURL <- unlist(xpathSApply(tmp, '//a[@href]', xmlAttrs)) 

刪除非國有的名字

subURL <- subURL[-(1:4)] 

問題始於我在原始幻燈片24頁。幻燈片說,下一步是遍歷狀態列表並閱讀每個問題的正文。當然,我們還需要在過程中保存每個狀態的名稱。環路初始化用下面的代碼:

survey <- vector(length(subURL), mode = "list") 
i = 1 
stateNames <- rep('', length(subURL)) 

在此之下的代碼,幻燈片說survey就是大約每狀態信息保存列表。我在這裏有點困惑,因爲survey確實是一個長度爲51的列表,但是每個元素都是NULL。我也對i在這裏做什麼感到困惑(這在以後變得很重要)。不過,我可以關注代碼的工作情況,並且我認爲這個列表稍後會被填充。

這真的是我感到困惑的下一張幻燈片。作爲一個例子,它示出了URL如何包含每個狀態的名稱,使用阿拉斯加作爲一個例子:

爲第一狀態創建URL,並從分配給suburl

suburl <- subURL[1] 

刪除STATE_從Statename的 suburl

stateName <- gsub('state_','',suburl) 

刪除的.html

stateName <- gsub('.html','',stateName) 

到目前爲止,這麼好。我可以爲每個國家單獨做到這一點。但是,我無法弄清楚如何將它變成適用於所有州的循環。該幻燈片只有以下代碼:

stateNames[i] <- stateName 

這是我卡住的地方。前一張幻燈片分配了1到i,所以唯一能做的就是獲得阿拉斯加(AK)的名稱,但其他每個元素都是「」(正如人們所期待的那樣,前面定義了stateNames)。

我曾嘗試以下操作:

stateNames <- gsub('state_','',subURL) 
stateNames <-gsub('.html','',stateNames) 

這並不完全工作,因爲這個向量的長度是51,但上面顯示的一個的長度僅爲1。(後來,我想每個州都有自己的名字,而不是所有州都有相同的州名)。此外,我不知道如何處理stateNames(i) <- stateName命令。無論如何,我一直在努力,直到最後(包括原創和修改),希望事情最終能夠正確對待自己(有時候我的表現與展示會上的內容一樣),但最終的結果是剛剛打破)。我認爲幻燈片後面會有一個額外的問題(一個對象是以前不存在的子集),但我猜測問題也是由於發生問題更容易出現的。無論如何,我知道這是一個相當複雜的問題,所以我很抱歉,如果它不適合這個網站。我只是卡住了。

+0

我想我想出了一些。問題不在這裏,而是在稍後發生。我認爲我有工作代碼,直到Hack會議的幻燈片30。我意識到這可能涉及到在這裏討論,所以我創建了一個[GitHub Gist](https://gist.github.com/jflanaga/18e7a8b76109220a899a)爲我迄今爲止。我認爲剩下的問題是原始演示文稿中缺少幻燈片,因此這需要一些工作。任何幫助,將不勝感激。 – JoeF 2015-04-01 06:55:11

回答

0

我相信我得到了這個工作。有關解決方案,請參閱gist或參閱here