Re: [问题] parSapply问题

楼主: celestialgod (天)   2016-03-18 00:39:58
※ 引述《SFMAndroid (安卓发送)》之铭言:
: [问题类型]:
:
: 效能咨询(我想让R 跑更快)
:
: [软件熟悉度]:
: 请把以下不需要的部份删除
: 入门(写过其他程式,只是对语法不熟悉)
:
: [问题叙述]:
: 请简略描述你所要做的事情,或是这个程式的目的
: 爬PTT文章,原本是用sapply加上自定义函数,
: 但实在跑太久,想说用snow::parSapply会不会比较快,
: 但一直遇到问题@@
: 除了找不到所有httr里的函数外
: 即使用clusterEvalQ把所有未定义的函数都定义后,
: 就出现is.url(url) is not true的无限轮回...
: 但改回用sapply除了跑很久外完全正常,
: 请问有没有大大知道该怎么办??
: 感谢~
: [程式范例]:
:
: https://gist.github.com/anonymous/a45f6d04254adb27e64a
:
: [环境叙述]:
:
: R version 3.2.1 (2015-06-18)
: Platform: i386-w64-mingw32/i386 (32-bit)
: Running under: Windows 8 x64 (build 9200)
: locale:
: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
: [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
: [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
: [4] LC_NUMERIC=C
: [5] LC_TIME=Chinese (Traditional)_Taiwan.950
: attached base packages:
: [1] parallel stats graphics grDevices utils datasets methods base
:
: [关键字]:
:
: snow, parallel computing
:
不要去写入硬盘在读取,我不确定在平行时候开启硬盘读取会不会出事...
但是我觉得你可以不用去写入硬盘,再重新读入虚耗时间...
好读版:http://pastebin.com/TKN2jWHr
然后我也不推荐用XML,我比较建议使用xml2 参考#1MbXOkFc (R_Language)
library(xml2)
library(RCurl)
library(magrittr)
library(stringi)
i <- 2793
data <- NULL
repeat{
url.list <- try(paste(i, '.html', sep='') %>%
paste('https://www.ptt.cc/bbs/Boy-Girl/index', ., sep='') %>%
xml2::read_html() %>%
xml2::xml_find_all("//div[@class='title']/a[@href]") %>%
xml2::xml_attr("href"), silent = TRUE)
if (any(grepl("Error", url.list)))
break
data %<>% c(url.list)
i <- i + 1
}
data %<>% paste('https://www.ptt.cc', ., sep='')
getDoc <- function(line){
xml2::read_html(line, "UTF-8") %>%
xml2::xml_find_one("//div[@id='main-content']") %>%
xml_text %>% stri_conv("UTF-8", "Big5")
# stri_conv for windows
}
st <- proc.time()
articles <- sapply(data, getDoc)
proc.time() - st
# user system elapsed
# 3.35 3.70 7.21
作者: naturalsmen (日日夜夜)   2016-03-18 20:43:00
喔喔感谢板大 code变得超简洁 也快很多 本来是因为不熟xml2 想说偷懒用以前写的就好XD

Links booklink

Contact Us: admin [ a t ] ucptt.com