Выполните команду и сохраните результаты в df из цикла - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать 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 Ответ

0 голосов
/ 30 января 2019

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 утвердите это.

...