在 for 函数中检索谷歌学者 ID

问题描述

我有一份学者名单,用于解析他们可用的 Google 学者 ID。不知何故,我获得了“下标越界”的错误,但我无法与此问题提供的其他响应相关联。 代码如下。谢谢!:

library(scholar)
    for (i in 1:200){
  
  scholars<-get_scholar_id(last_name = list$Last.Name[i],first_name = list$First.Name[i],affiliation = "ABC University")
}

结果:

No Scholar ID found.
No Scholar ID found.
Error in tables[[1]] : subscript out of bound

但是,如果我这样做:

  scholars_B<-get_scholar_id(last_name = list$Last.Name[3],first_name = list$First.Name[3],affiliation = "ABC University")

我毫无问题地获得了 Google 学者 ID。

可重现的例子:

# list from top h-index researchers (just for the purpose of this sample)

Last.Name <- c("Colditz","Lander","Akira","Langer","Karin")
First.Name <- c("Graham","Eric","Shizuo","Robert","Michael")
df <- data.frame(Last.Name,First.Name)
print (df)


library(scholar)

#First try: 
for(i in 1:3){
  
  scholars<-get_scholar_id(last_name = df$Last.Name[i],first_name = df$First.Name[i])
}

#Error: Error in tables[[1]] : subscript out of bounds


#Suggestion by @akrun

for(i in seq_along(df$Last.Name)){
  
  scholars<-get_scholar_id(last_name = df$Last.Name[i],first_name = df$First.Name[i])
}

#Error: Error in tables[[1]] : subscript out of bounds

#This way works,but not with the for function: 

scholars<-get_scholar_id(last_name = df$Last.Name[3],first_name = df$First.Name[3])
print(scholars)

解决方法

某些元素没有学者 ID,并且返回错误。一种选择是使用 tryCatchpossibly(来自 purrr

绕过这些情况
library(purrr)
library(scholar)
p_get_scholar_id <- possibly(get_scholar_id,otherwise = NA_character_)
scholars <- character(nrow(df))
for(i in seq_along(scholars)) {
  scholars[i] <- p_get_scholar_id(last_name = df$Last.Name[i],first_name = df$First.Name[i])
  }

-输出

scholars
#[1] NA             "LXVfPc8AAAAJ" "0TG2laoAAAAJ" NA             "xVvyb1gAAAAJ"