执行命令并将结果从循环保存到 df
Execute a command and save the results into a df from a loop
我尝试使用 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`))
}
}
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
评价它。
我尝试使用 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`))
}
}
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
评价它。