Я использую пакет rcrossref
для сбора тезисов для нескольких DOI, хранящихся в столбце фрейма данных, и я хочу, чтобы выходные данные (тезисы) были перемещены в другой столбец того же фрейма данных.Я делаю это, выполняя цикл for, но:
- цикл, кажется, зависает на сообщении об ошибке, которое появляется, если нет доступных абстрактных данных.
- Секундаошибка также возникает, когда в столбце ввода нет значения DOI.
Как можно пропустить эти ошибки и перейти к следующей строке, если они встречаются?
Вот мой код R:
library(bib2df)
library(rcrossref)
url <- "https://gist.githubusercontent.com/zackbatist/46c14011fd5dd4e2763842cd98627927/raw/e8678589cbb9f73ada52e7944bf617e588e1a5fe/GS01ax.bib"
df <- bib2df(url)
df
str(df)
df$DOI
df$ABSTRACT <- NA
df$ABSTRACT
for (i in 1:nrow(df)) {
n <- cr_abstract(doi = df[i,28])
df[i,31] <- n
}
df$ABSTRACT
К вашему сведению, df$DOI
соответствует 28-му столбцу, а df$ABSTRACT
соответствует 31-му столбцу.
ПРАВКА, относящаяся к моему комментарию ниже:
for (i in 1:nrow(df)) {
try(n <- cr_abstract(doi = df[i,28]))
try(df[i,31] <- n)
}
РЕДАКТИРОВАТЬ, включая трассировки (никогда не делал этого раньше, поэтому извините, если я делаю это неправильно)
для ошибки 1:
Error: no abstract found for 10.11141/IA.44.15
3.
stop("no abstract found for ", doi, call. = FALSE)
2.
cr_abstract(doi = df[i, 28])
1.
.traceback(for (i in 1:nrow(df)) {
n <- cr_abstract(doi = df[i, 28])
df[i, 31] <- n
})
и для ошибки 2:
Error: Not Found (HTTP 404)
3.
stop(sprintf("%s (HTTP %s)", x$message, x$status_code), call. = FALSE)
2.
res$raise_for_status()
1.
cr_abstract(doi = df[i, 28])