Векторизация для цикла в R
О чувак. Я так ужасно удаляю циклы 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 ответ
Это может дать вам начало - кажется, можно снять несколько сразу.
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
пакет, чтобы начать извлекать информацию, которую вы хотите.