2015-03-31 41 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