Ошибка при загрузке нескольких файлов PDF из списка URL-адресов в R

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

используется только первый элемент аргумента «destfile» URL-адрес «https://reliefweb.int/sites/reliefweb.int/files/resources/hno_car_2021_final_fr.pdf»

names<- lapply(pdf, basename) # get names
destination<- paste0 ("~/", names)
lapply(pdf,download.file, destfile=destination)
pdf
[[1]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/hno_car_2021_final_fr.pdf"

[[2]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/rnro_centralsahel_oct_2020_fr_web.pdf"

[[3]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/rnro_centralsahel_oct_2020_en_web.pdf"

[[4]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/hno_2020-final.pdf"

[[5]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/hno_light_2020-en_final_0.pdf"

[[6]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/20200701_HNO_CENTROAMERICA%20ADDENDUM%20ING.pdf"

[[7]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/20200706%20ONEPAGER%20HNO%20Centroame%CC%81rica%20ING.pdf"

[[8]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/cmr_hno_2020-revised_print.pdf"

[[9]]
[1] "https://reliefweb.int/sites/reliefweb.int/files/resources/20200616_HNO_CENTROAMERICA%20ADDENDUM.pdf"

person Jelo A    schedule 25.10.2020    source источник


Ответы (1)


Я бы справился со всем сразу. см. пример кода для первых 2 файлов.

names = c("https://reliefweb.int/sites/reliefweb.int/files/resources/hno_car_2021_final_fr.pdf",
          "https://reliefweb.int/sites/reliefweb.int/files/resources/rnro_centralsahel_oct_2020_fr_web.pdf"
)


# making the filenames
downloaded = lapply(names, function(url){
  # extract the last part of the url to make the filename
  destination = unlist(strsplit(url, '/'))
  destination = destination[length(destination)]
  destination = paste0 ("~/", destination)
  # download the file
  download.file(url = url, destfile=destination, mode="wb")
  return(destination) # This is optional, just the see where the files are saved
})

# downloaded

# [[1]]
# [1] "~/hno_car_2021_final_fr.pdf"

# [[2]]
# [1] "~/rnro_centralsahel_oct_2020_fr_web.pdf"
person Liman    schedule 25.10.2020
comment
Благодарю вас! Мне удалось скачать файлы, но есть идеи, почему документы не сохраняются в рабочем каталоге? и можно ли что-нибудь сделать, чтобы они там сохранялись? - person Jelo A; 25.10.2020
comment
Еще одна проблема, с которой я столкнулся, заключалась в том, что код останавливался каждый раз, когда ссылка терпела неудачу (в моих фактических данных у меня 230 ссылок, и некоторые из них могут больше не работать). Я удалил те, которые не работали с подмножеством исходного списка, но есть ли способ автоматизировать это как часть функции? - person Jelo A; 26.10.2020
comment
если вы хотите сохранить файлы в свой рабочий каталог, вам нужно указать это явно: destination = paste0 (getwd(), '/', destination). Обратите внимание, что ~paste0 ("~/", destination)) означает домашний, а не рабочий каталог. - person Liman; 26.10.2020
comment
Для файлов, которые не загружаются, см. stackoverflow.com/questions/50624864/. Вас также может заинтересовать функция download_retry из пакета recount (rdrr.io/bioc/recount/ man/download_retry.html), которые позволяют повторить неудачную загрузку, поскольку задача может завершиться неудачно по разным причинам (например, из-за проблем с подключением к Интернету). - person Liman; 26.10.2020