Ошибка в is.url (url): длина (url) == 1, когда код состояния = 404 - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать функцию, которая будет запрашивать упомянутый API (baseurl) на основе ввода: test_doi. Код работает нормально, если URL-адрес вернул 200, но как только URL-адрес вернул 404, я получил следующее сообщение об ошибке.

Ошибка в is.url (url): длина (url) == 1 не TRUE

Мой код:

library(jsonlite)
library(httr)

call_dim <- function(x) {
  baseurl <- "https://metrics-api.dimensions.ai/doi/"
  url <- paste0(baseurl, x)
  resp <- GET(url)
  if(status_code(resp) == 404){
    stop("NA", call. = FALSE)
  } else {
    pages_t <- fromJSON(paste0(baseurl,x))
    lapply(pages_t, function(z) { z[ lengths(z) == 0 ] <- NA; z; })
  } 
 }


test_doi <- c("10.3390/w10111643" ,"10.1371/journal.pone.0007108")
view <- call_dim(test_doi)

Спасибо!

1 Ответ

0 голосов
/ 15 мая 2019

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

library(jsonlite)
library(httr)

call_dim <- function(x) {
  baseurl <- "https://metrics-api.dimensions.ai/doi/"
  url <- paste0(baseurl, x)
  resp <- GET(url)
  if(status_code(resp) == 404){
    return(content(resp))
  } else {
    pages_t <- fromJSON(paste0(baseurl,x))
    lapply(pages_t, function(z) { z[ lengths(z) == 0 ] <- NA; z; })
  } 
}


test_doi <- c("10.3390/w10111643" ,"10.1371/journal.pone.0007108")
view <- sapply(test_doi, call_dim)

> str(view)
List of 2
 $ 10.3390/w10111643           : chr "404: Not Found"
 $ 10.1371/journal.pone.0007108:List of 9
  ..$ doi                    : chr "10.1371/journal.pone.0007108"
  ..$ times_cited            : int 17
  ..$ recent_citations       : int 1
  ..$ highly_cited_1         : logi FALSE
  ..$ highly_cited_5         : logi FALSE
  ..$ highly_cited_10        : logi FALSE
  ..$ relative_citation_ratio: num 0.63
  ..$ field_citation_ratio   : num 2.39
  ..$ license                : chr "This data has been sourced via the Dimensions Metrics API, use of which is subject to the terms at https://dime"| __truncated__
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...