小编dgd*_*gdi的帖子

使用foreach R中的列表

我试图并行化一些html文档中保存的数据的提取并将其存储到data.frames(数百万个文档,因此并行化的有用性).

在第一步,在我注册队列的机器上,我选择html文件的一个子集并向他们提供read_html函数(从rvest包中,我也尝试了XML包中的类似函数但是我是获取内存泄漏问题)获取存储许多html页面内容的唯一列表.

然后我在这个列表中使用一个迭代器来获取它的较小块以供给foreach.

在foreach中,我构建了data.frame(s)(使用html_table函数和一些基本的数据操作),然后返回一个列表,其元素是已清理的data.frames.

我试图在win 8上使用doSNOW后端,在ubuntu 16.04上使用doRedis后端.

在第一种情况下,返回空列表的列表,而在第二种情况下,抛出内存映射的错误; 你可以在问题的最底部找到追溯.

据我所知,我发送到核心的(大块)列表不符合我的预期.我已经聚集在一起,列表对象可能只是一组指针,但我无法确认它; 也许这可能是问题?是否有"列表方式"替代"封装"多个html页面的数据?

下面你可以找到一些复制问题的代码.我是一个全新的堆栈溢出,新的并行编程和R编程的新手:任何改进的建议都是受欢迎的.谢谢大家.

library(rvest)
library(foreach)

#wikipedia pages of olympic medalist between 1992 and 2016 are
# downloaded for reproducibility
for(i in seq(1992, 2016, by=4)){

  html = paste("https://en.wikipedia.org/wiki/List_of_", i, "_Summer_Olympics_medal_winners", sep="")
  con = url(html)
  htmlCode = readLines(con)
  writeLines(htmlCode, con=paste(i, "medalists", sep="_"))
  close(con)

}

#declaring the redis backend (doSNOW code is also included below)

#note that I am using the package from 
#devtools::install_github("bwlewis/doRedis") due to a "nodelay error"
#(more info on that here: …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach r list

11
推荐指数
1
解决办法
2357
查看次数

标签 统计

foreach ×1

list ×1

parallel-processing ×1

r ×1