我有一个非常简单的问题(我认为),但是在stackoverflow的任何地方都找不到答案。我编写了一个循环,该循环使用repec_id
来自大型数据集(150,000个条目)的学术论文条目,然后从名为RePEc的数据库中为每篇论文提取参考文献列表。看起来像这样:
url_base <- "http://citec.repec.org/api/amf/"
##for loop
references_1 <-vector("list", length=length(df$repec_id))
for(i in seq_along(df$repec_id))
try({get_data <- read_html(paste0(url_base, df$repec_id[i], usercode))
get_references <- html_nodes(get_data,'references') %>% html_nodes("text") %>% html_attr("ref")
references_1[[i]] <- paste((get_references), collapse =" ")
print(i)
})
为了提高速度,我想运行5次循环,每次分析30,000个ID(例如ID 1-30,000,然后ID 30,001至60,000,然后ID 60,001至90,000,依此类推),然后将它们合并为一个列表(references_1
)。有人知道我该怎么做吗?
不幸的是,这usercode
仅适用于我的IP,因此该示例不可重现,但我认为(希望)我的问题不依赖可重现...预先感谢您的帮助!
为了解决这个问题,而不是执行seq_along,一个选项是为要运行的5次指定每次循环遍历的i范围。
start <- 1
for(i in start:min(start + 29999, length(df$repec_id)){
...
那应该将您设置起始值的任何值作为参数,然后从那里循环进行总共30,000次迭代-除非30,000次会使您超过df $ respec_id的长度,这就是最小值在那里的原因。
就是说,我不确定这将如何加快处理速度,除非您担心要中断该过程,所以您不只是让它无限期地运行。(如果是这种情况,我通常只将print(i)作为循环的一部分来跟踪我的进度。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句