Как автоматизировать производство петель в R - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть база данных с ссылками на научные статьи c и идентификаторы из базы данных под названием RePE c. Это выглядит так:

link <- c("http://www.sciencedirect.com/science/article/pii/S1042957318300366", "http://www.sciencedirect.com/science/article/pii/S1042957318300664", "http://www.sciencedirect.com/science/article/pii/S1042957318300627", "http://www.sciencedirect.com/science/article/pii/S002205311830156X", "http://www.sciencedirect.com/science/article/pii/S1090951618303419", "http://hdl.handle.net/10.1093/jjfinec/nby006")
repec_id <- c("RePEc:eee:jfinin:v:38:y:2019:i:c:p:19-44", "RePEc:eee:jfinin:v:38:y:2019:i:c:p:1-10", "RePEc:eee:jfinin:v:38:y:2019:i:c:p:58-68", "RePEc:eee:jetheo:v:182:y:2019:i:c:p:329-359", "RePEc:eee:worbus:v:54:y:2019:i:4:p:372-386", "RePEc:oup:jfinec:v:17:y:2019:i:3:p:462-494")
df <- data.frame(repec_id, link, stringsAsFactors=FALSE)

Я написал al oop, который берет каждую из ссылок и загружает файл, к которому ведет (или возвращает предупреждение / сообщение об ошибке, если ссылка не работает). Это выглядит так:

urls <- df$link
output <- rep(NA, length(urls))
for (i in seq_along(urls)) {
  output[i] <- tryCatch(
    {download.file(urls[i], paste0('~/Desktop/Dataset/', basename(urls[i])))}, 
    error = function(e) {NA},
    warning = function(w) {NA}
  )

Однако я не хочу скачивать файлы. Я только хочу знать, какие записи возвращают error или warning (в этом случае, получая NA). Кто-нибудь знает, как я могу изменить свой скрипт, чтобы я на самом деле ничего не загружал, но я могу выяснить, какие из них выдают сообщения об ошибках / предупреждениях?

Заранее спасибо за вашу помощь!

1 Ответ

2 голосов
/ 30 апреля 2020

Вот простая функция, которая показывает, как вы можете превратить ошибку в TRUE или FALSE в зависимости от того, существует ли URL:

is.valid.url <- function(url)
{
  suppressWarnings(tryCatch(
    length(readLines(url, warn = FALSE)) > 0, 
    error = function(e) return(FALSE)
    ))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...