Как загрузить несколько файлов с помощью r, итеративно обновляя строку из URL-адреса, используя список

Я хочу загрузить более 100 файлов с sf.rds" rel="nofollow noreferrer">https://biogeo.ucdavis. edu/data/gadm3.6/Rsf/gadm36_AGO

strin<-structure(list(iso3c = c("DZA", "AGO", "BWA", "BDI", "CMR", "CPV"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))
sf.rds. Единственная строка, которая меняется в URL-адресе, — это «AGO», которая должна быть заменена другой строкой, такой как «DZA», взятой из списка. Например, sf.rds" rel="nofollow noreferrer">https://biogeo.ucdavis.edu/data/gadm3 .6/Rsf/gadm36_DZA
strin<-structure(list(iso3c = c("DZA", "AGO", "BWA", "BDI", "CMR", "CPV"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))
sf.rds
загрузит другой файл. Я был бы признателен за любую помощь в создании функции, которая загружает итеративно с помощью r и записывает файлы в рабочий каталог.

Список строк для повторения:

strin<-structure(list(iso3c = c("DZA", "AGO", "BWA", "BDI", "CMR", "CPV"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))

Моя попытка:

list1 = strin %>% unlist(.)

for (i in list1){
  urls <- lapply(list1
                 , function(i) paste0("https://biogeo.ucdavis.edu/data/gadm2.8/rds/", i, "_adm2.rds" ) %>% as.character(.)
  )
}

for (u in urls){
  url <- lapply(urls, function(u) GET(u,write_disk(tempfile(fileext = ".RDS")))
  )
}

infolist1 =rownames_to_column(
                  data.frame(
                    as.matrix(
                      unlist(
                        lapply(url, `[`, c('url', 'status_code', 'content'))
                        )
                      )
                    )
                  , var = "rowname")

infolist1$rowname= gsub(".*\\.","",infolist1$rowname) 
colnames(infolist1) = c("rowname", "data1")

c2 = infolist1 %>%  subset(., rowname == "status_code", select = c(data1)) 
c3= infolist1 %>%   subset(., rowname == "content", select = c(data1)) 

infolist1 = cbind(c2,c3)  %>% unlist(.)
rm(list=c('c2', 'c3'))
colnames(infolist1) = c("urlx", "filestatus", "filepath")

Сообщение об ошибке:

Ошибка в colnames‹-(tmp, value = c("urlx", "filestatus", "filepath" : попытка установить 'colnames' для объекта с менее чем двумя измерениями'

Заранее благодарю за любую помощь.


person Krantz    schedule 09.09.2019    source источник


Ответы (1)


Вы показываете много дополнительного кода, выходящего за рамки вопроса из вашего заголовка.

Чтобы скачать файлы, я бы использовал download.file

strin<-structure(list(iso3c = c("DZA", "AGO", "BWA", "BDI", "CMR", "CPV"
)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))

for (ss in strin$iso3c)
    download.file(
        paste0("https://biogeo.ucdavis.edu/data/gadm2.8/rds/", ss, "_adm2.rds"),
        paste0(ss, "_adm2.rds"))

Это сохраняет все файлы (кроме "CPV_adm2.rds", которого, похоже, не существует) в текущей рабочей папке.

person Maurits Evers    schedule 09.09.2019
comment
Спасибо за это, @Maurits_Evers. Я все еще пытаюсь понять, почему он не работает для некоторых URL-адресов. Я буду держать вас в курсе. - person Krantz; 09.09.2019
comment
@Krantz Я все еще пытаюсь понять, почему он не работает для некоторых URL-адресов Вы уверены, что эти файлы существуют? Например, в приведенном выше примере файл "CPV_adm2.rds" не существует. - person Maurits Evers; 09.09.2019
comment
Еще уточняю. - person Krantz; 09.09.2019
comment
Спасибо. Оно работает. Я смог решить свою проблему, используя ваш ответ. Очень полезно. Большой. - person Krantz; 09.09.2019
comment
@Krantz Пожалуйста, рад, что это было полезно. Удачи в вашей работе. - person Maurits Evers; 09.09.2019