执行命令并将结果从循环保存到df中

时间:2019-01-30 10:14:15

标签: r scopus

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

第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`))
}
}

1 个答案:

答案 0 :(得分:0)

evalparse似乎正是您需要的。 我没有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完成它。