Выполните команду и сохраните результаты в df из цикла
Я пытаюсь использовать 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))
}
}
Моя проблема в том, что ссылка является символом и как я могу выполнить? Из предыдущего ответа разбор упомянут не является хорошим решением.
обновить код с помощью 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 ответ
Решение
eval
а также parse
кажется именно то, что вам нужно. У меня нет API-ключа Elsevier, поэтому я не могу проверить решение. Попробуйте сами:
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
используйте это.