0

我尝试使用 scopus 使用论文的 doi,旨在获取每篇论文的参考文献:

第 1 步加载示例数据:

library(rscopus)
df = data.frame(doi = c("10.1109/TPAMI.2018.2798607", "10.1109/CNS.2017.8228696"))

第 2 步遍历循环并将每次迭代的结果保存到数据帧中。

for (i in 1:nrow(df)) {
x = abstract_retrieval(df$doi[i], identifier= "doi")

for (a in 1:length(x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference)){
     ref <- paste("x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference[[",a,"]]$`ref-info`$`ref-title`")
     df_references <- rbind(df_references, data.frame(initial_paper = df$doi[i],
                                           ref_title = ref))
}
}

我的问题是 ref 是角色,我该如何执行?从前面提到的答案解析不是一个好的解决方案。

用 df 更新代码:

df_references <- data.frame(matrix(nrow = 0, ncol = 2))
names(df_references) = c("initial_paper", "ref_title")

for (i in 1:nrow(df)) {
x = abstract_retrieval(df$doi[i], identifier= "doi")

for (a in 1:length(x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference)){
     #eval(parse(ref = paste("x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference[[",a,"]]$`ref-info`$`ref-title`")))
     call_str <- paste("ref <- x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference[[",a,"]]$`ref-info`$`ref-title`")
     eval(parse(text = call_str))
     print(text)
     df_references <- rbind(df_references, data.frame(initial_paper = df$doi[i],
                                           ref_title = ref$`ref-titletext`))
}
}
4

1 回答 1

0

eval并且parse似乎正是您所需要的。我没有 Elsevier API 密钥,所以我无法测试解决方案。所以自己试试这个:

library(rscopus)
df = data.frame(doi = c("10.1109/TPAMI.2018.2798607", "10.1109/CNS.2017.8228696"))

df_references <- NULL
for (i in 1:nrow(df)) {
x = abstract_retrieval(df$doi[i], identifier= "doi")

for (a in 1:length(x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference)){
     call_str <- paste("ref <- x$content$`abstracts-retrieval-response`$`item`$bibrecord$tail$`bibliography`$reference[[",a,"]]$`ref-info`$`ref-title`")
     eval(parse(text = call_str))
     df_references <- rbind(df_references, data.frame(initial_paper = df$doi[i],
                                           ref_title = ref))
}
}

这个想法是构造一个你想要的调用的字符串。然后解析它(不要忘记将它作为text参数传递)。最后eval评价它。

于 2019-01-30T10:31:55.927 回答