`download.file ()` выдаёт предупреждающие сообщения и не загружается при использовании `lapply` или` map` - PullRequest
0 голосов
/ 05 марта 2019

Я продолжаю получать ту же ошибку при попытке загрузить несколько веб-сайтов.

Ошибка:

Warning messages: 1: In download.file(x, destfile = paste0("D:/temp/", filing_info$accession_number, : only first element of 'destfile' argument used

Я пытаюсь использовать функции map или apply, чтобы получить URL-адрес, загрузить содержимое и сохранить его

Данные:

URL:

url <- c("https://www.sec.gov/Archives/edgar/data/1750/000104746918004978/0001047469-18-004978-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746917004528/0001047469-17-004528-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746916014299/0001047469-16-014299-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746915006136/0001047469-15-006136-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746914006243/0001047469-14-006243-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746913007797/0001047469-13-007797-index.htm"
)

идентификаторы:

IDS <- c("0001047469-18-004978", "0001047469-17-004528", "0001047469-16-014299", 
"0001047469-15-006136", "0001047469-14-006243", "0001047469-13-007797"
)

Код:

library(purrr)
Map(function(x) {
  download.file(x, destfile = paste0("D:/temp/", IDS, ".htm"), quiet = FALSE)
}, url)

Другие попытки:

map( url, function(x) {
  download.file(x, destfile = paste0("D:/temp/", IDS, ".htm"), quiet = FALSE)
})

lapply( url, function(x) {
  download.file(x, destfile = paste0("D:/temp/", IDS, ".htm"), quiet = FALSE)
})

sapply( url, function(x) {
  download.file(x, destfile = paste0("D:/temp/", IDS, ".htm"), quiet = FALSE)
})

РЕДАКТИРОВАТЬ: Вот лучшее представление моих данных

data <- structure(list(links = structure(6:1, .Label = c("https://www.sec.gov/Archives/edgar/data/1750/000104746913007797/0001047469-13-007797-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746914006243/0001047469-14-006243-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746915006136/0001047469-15-006136-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746916014299/0001047469-16-014299-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746917004528/0001047469-17-004528-index.htm", 
"https://www.sec.gov/Archives/edgar/data/1750/000104746918004978/0001047469-18-004978-index.htm"
), class = "factor"), IDS = structure(6:1, .Label = c("0001047469-13-007797", 
"0001047469-14-006243", "0001047469-15-006136", "0001047469-16-014299", 
"0001047469-17-004528", "0001047469-18-004978"), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L))

Код выглядит следующим образом:

map(data$links, function(x) {
  download.file(x, destfile = paste0("D:/temp/", data$IDS, ".htm"), quiet = FALSE)
})

1 Ответ

2 голосов
/ 05 марта 2019

В этом случае вам нужно перебрать и идентификаторы, и ссылки. Чтобы повторить оба списка, используйте map2. На самом деле, поскольку вы на самом деле не возвращаете значение и просто вызываете его для получения побочных эффектов, вы можете использовать walk2 вместо map2.

walk2(data$links, data$IDS, function(link, id) {
  download.file(link, destfile = paste0("D:/temp/", id, ".htm"), quiet = FALSE)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...