Объединение идентификатора google scholar и pubid в цикле for

Я использую пакет «ученый» в R. Я хочу создать социальную сеть соавторов для моей исследовательской группы. Я создал исследователей фреймов данных следующим образом:

members <- data.frame(name = c("Linton C Freeman", "Ronald Burt", "Stephen P. Borgatti"),
                      scholar_id = c("quiVMg8AAAAJ", "g-R8XdkAAAAJ", "hlk4a4gAAAAJ"),
                      stringsAsFactors = F)

Затем я создал цикл for, чтобы получать публикации для каждого исследователя:

pubs <- get_publications(member$scholar_id[1])
for(i in 2:nrow(member)){
           pubs_ <- get_publications(member$scholar_id[i])
           pubs <- rbind(pubs, pubs_)
}

Чтобы получить хороший список соавторов, мне нужно использовать такой синтаксис:

coauthors <- get_complete_authors(scholar_id, pubid)

Например:

co-authors <- get_complete_authors(members$scholar_id[1], pubs$pubid[1])

Я хочу перебирать членов, чтобы получить всех соавторов в фреймворке данных. Думаю, мне нужно вложить свои циклы сначала в пабы, а затем в участников. Мне также нужно добавить оператор паузы в свой цикл, чтобы избежать ошибок HTTP 503. Мой вопрос в том, как создать цикл, который сделает это? В конце концов, мне нужен фреймворк с pubid и авторами. Я знаю, как создать из этого список ребер. Пожалуйста помоги.

2
0
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как я подхожу к проблеме, используя один data.frame, чтобы все было организовано. Я бы сделал это так, потому что похоже, что Google Scholar использует один и тот же идентификатор для ссылки на разные публикации, что делает жизнь интересной.

library(scholar)
library(tidyverse)

member <- data_frame(name = c("Linton C Freeman", "Ronald Burt", "Stephen P. Borgatti"),
                      scholar_id = c("quiVMg8AAAAJ", "g-R8XdkAAAAJ", "hlk4a4gAAAAJ"))

bib_data <- member %>% 
  #this lets mutate work on each row independently
  rowwise %>% 
  #produce a dataframe for each row
  mutate(pubs = list(get_publications(scholar_id))) %>% 
  #expand the dataframes
  unnest() %>% 
  #I've included this to keep the requests down for a demonstration
  filter(row_number() < 6) %>% 
  #as above
  rowwise %>% 
  #this now uses the scholar_id and pubid from each row to get the coauthor
  #information as a new column
  mutate(coauths = get_complete_authors(scholar_id, pubid))

Таким образом, вы можете полностью избежать циклов for и, надеюсь, четко организовать все записи.

Тогда работа с информацией соавтора представляет собой немного другую проблему, потому что похоже, что форматы (особенно с точки зрения сокращений) несовместимы ...

Спасибо. Построчный подход - это изящный трюк. Моя единственная проблема сейчас - это преодоление ошибки HTTP 503.

aterhorst 30.10.2018 06:04

Microsoft Academic предлагает API и может быть более надежным, чем Google Scholar.

aterhorst 30.10.2018 06:05

Конечно, просто обратите внимание, что этот вопрос на самом деле не относится к Google Scholar - он действительно о циклах вложенности

alexwhan 30.10.2018 06:08

Другие вопросы по теме