Как назвать загруженные файлы, используя строки из другого столбца в том же кадре данных? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть фрейм данных, который выглядит следующим образом:

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)

У меня есть 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}
  )
}

Однако вместо того, чтобы называть файл с помощью функции basename, я бы хотел присвоить соответствующий repec_id, за которым следует соответствующее расширение (например, «.pdf», '.txt' и др. c). Другими словами, я хотел бы, чтобы каждый загружаемый файл имел соответствующее repec_id в качестве имени:

list.files()
"RePEc:eee:jfinin:v:38:y:2019:i:c:p:19-44.pdf" "RePEc:eee:jfinin:v:38:y:2019:i:c:p:1-10.txt"  "RePEc:eee:jfinin:v:38:y:2019:i:c:p:58-68.aspx" "RePEc:eee:jetheo:v:182:y:2019:i:c:p:329-359.pdf" "RePEc:eee:worbus:v:54:y:2019:i:4:p:372-386.pdf" "RePEc:oup:jfinec:v:17:y:2019:i:3:p:462-494.txt"

Кто-нибудь знает, как я могу это сделать? Я немного застрял. Заранее спасибо за помощь!

1 Ответ

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

Мы могли бы написать функцию, передающую URL и имя файла.

download_my_file <- function(url, name) {
   tryCatch(
     {download.file(url, paste0('~/Desktop/Dataset/', name))}, 
      error = function(e) {NA},
      warning = function(w) {NA})
}

и используйте Map, чтобы передать его для каждых link и repec_id.

Map(download_my_file, df$link, df$repec_id)

данных

link должно быть символами, поэтому при создании фрейма данных используйте stringsAsFactors = FALSE.

df <- data.frame(repec_id, link, stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...