Как мне двигаться по циклу for после возникновения ошибки? - PullRequest
0 голосов
/ 14 сентября 2018

Я использую пакет rcrossref для сбора тезисов для нескольких DOI, хранящихся в столбце фрейма данных, и я хочу, чтобы выходные данные (тезисы) были перемещены в другой столбец того же фрейма данных.Я делаю это, выполняя цикл for, но:

  1. цикл, кажется, зависает на сообщении об ошибке, которое появляется, если нет доступных абстрактных данных.
  2. Секундаошибка также возникает, когда в столбце ввода нет значения 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]) 

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вы прямо задались вопросом о цикле for, поэтому мы сосредоточились на этом, но вы просто пытаетесь создать новый столбец?Для манипуляций с фреймами данных в R циклы редко бывают наиболее эффективным вариантом.Делает ли это то, что вы хотите, создать новый столбец с именем ABSTRACT, но со значениями DOI?

df[, "ABSTRACT"] <- df[, "DOI"]
0 голосов
/ 14 сентября 2018

Вы смотрели в try ()?

for (i in 1:nrow(df)) {
    try(n <- cr_abstract(doi = df[i,28]))
      df[i,31] <- n
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...