0

我有一个链接到学术论文的数据框,并从名为 RePEc 的数据库中识别句柄。它看起来像这样:

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)

我编写了一个循环,该循环获取每个链接并下载它指向的文件(如果链接断开,则返回警告/错误消息)。它看起来像这样:

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}
  )

但是,我实际上并不想下载任何文件。我只想知道哪些条目返回一个errorwarning(在这种情况下,产生一个NA)。有谁知道我可以如何修改我的脚本,所以我实际上不下载任何东西,但我可以找出哪些正在产生错误/警告消息?

在此先感谢您的帮助!

4

1 回答 1

2

这是一个简单的函数,它显示了如何根据 url 是否存在将错误转换为TRUE或:FALSE

is.valid.url <- function(url)
{
  suppressWarnings(tryCatch(
    length(readLines(url, warn = FALSE)) > 0, 
    error = function(e) return(FALSE)
    ))
}
于 2020-04-30T12:42:21.637 回答