Как разбить на l oop на сегменты - PullRequest
0 голосов
/ 10 апреля 2020

У меня очень простой вопрос (я думаю), но я нигде не могу найти ответ на stackoverflow. Я написал oop, который использует repec_id записи для научных документов c из большого набора данных (150 000 записей), а затем извлекает список ссылок из базы данных с именем RePE c для каждой статьи. Это выглядит так:

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)
    }) 

Ради скорости, я хочу запустить l oop 5 раз, анализируя 30 000 идентификаторов каждый раз (например, ID 1-30 000, затем ID 30,001 до 60 000, затем ID 60,001 до 90 000 и т. д.), а затем объединить их в один список (references_1). Кто-нибудь знает, как я могу это сделать?

К сожалению, usercode работает только на моем IP, поэтому этот пример не воспроизводим, но я думаю (надеюсь), что мой вопрос не зависит от воспроизводимости ... Заранее благодарю за помощь!

1 Ответ

1 голос
/ 10 апреля 2020

Чтобы разбить это, вместо выполнения seq_along, один из вариантов - указать диапазон от i до l oop для каждого из 5 раз, когда вы хотите запустить это.

start <- 1
for(i in start:min(start + 29999, length(df$repec_id)){
...

Это должен принимать все, что вы установили в качестве начального значения, и l oop через 30 000 итераций - если только 30 000 не приведут вас к длине df $ respec_id, именно поэтому минимальное значение здесь есть.

Тем не менее, я не уверен, как это ускорит процесс, если только вы не обеспокоены тем, что хотите прервать процесс, чтобы вы не позволяли этому работать бесконечно. (Если это так, я обычно просто включаю print (i) как часть моего l oop, чтобы отслеживать мой прогресс.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...