Векторизация для цикла в R - PullRequest
0 голосов
/ 23 мая 2018

О, чувак.Я так ужасно удаляю циклы for из своего кода, потому что нахожу их такими интуитивно понятными и впервые изучил C ++.Ниже я выбираю идентификаторы для поиска (в данном случае copd) и использую этот идентификатор для получения полного XML-файла, а затем сохраняю его местоположение в векторе.Я не знаю, как это ускорить, и для 700 идентификаторов потребовалось около 5 минут, в то время как большинство поисков имеют более 70 000 идентификаторов.Спасибо за любое руководство.

library(rentrez)
library(XML)

# number of articles for term copd
count <- entrez_search(db = "pubmed", term = "copd")$count

# set max to count
id <- entrez_search(db = "pubmed", term = "copd", retmax = count)$ids

# empty vector that will soon contain locations
location <- character()

# get all location data 
for (i in 1:count)
{
  # get ID of each search
  test <- entrez_fetch(db = "pubmed", id = id[i], rettype = "XML")

  # convert to XML
  test_list <- XML::xmlToList(test)

  # retrieve location
  location <- c(location, test_list$PubmedArticle$MedlineCitation$Article$AuthorList$Author$AffiliationInfo$Affiliation)
}

1 Ответ

0 голосов
/ 23 мая 2018

Это может дать вам начало - кажется, можно снять несколько одновременно.

library(rentrez)
library(xml2)

# number of articles for term copd
count <- entrez_search(db = "pubmed", term = "copd")$count

# set max to count
id_search <- entrez_search(db = "pubmed", term = "copd", retmax = count, use_history = T)

# get all
document <- entrez_fetch(db = "pubmed", rettype = "XML", web_history = id_search$web_history)

document_list <- as_list(read_xml(document))

Проблема в том, что это все еще занимает много времени, потому что существует большое количество документов.Также любопытно, что он возвращает ровно 10000 статей, когда я попробовал это - может быть ограничение на то, что вы можете вернуть сразу.

Затем вы можете использовать что-то вроде пакета purrr, чтобы начать извлечениеинформация, которую вы хотите.

...