Как использовать tryCatch (), чтобы игнорировать ошибку в цикле while в R - PullRequest
0 голосов
/ 17 января 2019

У меня есть код, который читает каждую строку первого столбца моего информационного кадра, посещает веб-сайт и затем загружает фотографию каждого заместителя.Но это не работает должным образом, потому что есть некоторые депутаты, у которых еще нет фотографии.

Вот почему мой код ломается и перестает работать.Я пытался использовать «следующий» и если предложения, но это все равно не сработало.Поэтому мой друг рекомендовал мне использовать tryCatch ().Я не смог найти достаточно информации в Интернете, и код все еще не работает.

Файл находится здесь: https://gist.github.com/gabrielacaesar/940f3ef14eaf29d18c3780a66053bbee

deputados <- fread("dep-legislatura56-14jan2019.csv")

i <- 1

while(i <= 514) {
  this.could.go.wrong <- tryCatch(
  attemptsomething(),
  error=function(e) next
  )
  url <- deputados$uri[i]
  api_content <- rawToChar(GET(url)$content)
  pessoa_info <- jsonlite::fromJSON(api_content)
  pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
  download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
  Sys.sleep(0.5)
  i <- i + 1
}

Ответы [ 2 ]

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

Просто оберните tryCatch в строки, которые потенциально могут вызвать ошибки и вернуть NULL или NA в блок * error :

i <- 1

while(i <= 514) {
   tryCatch({
      url <- deputados$uri[i]
      api_content <- rawToChar(GET(url)$content)
      pessoa_info <- jsonlite::fromJSON(api_content)
      pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
      download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
      Sys.sleep(0.5)
    }, error = function(e) return(NULL)
   )
   i <- i + 1
}
0 голосов
/ 17 января 2019

Вот решение, использующее purrr:

library(purrr)

download_picture <- function(url){
  api_content <- rawToChar(httr::GET(url)$content)
  pessoa_info <- jsonlite::fromJSON(api_content)
  pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
  download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
}

walk(deputados$uri, possibly(download_picture, NULL))
...