微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用R循环浏览文件并重命名

如何解决使用R循环浏览文件并重命名

我想从网址列表中下载多个文件。有些网址可能无效,如果出现错误,我想跳过它。 如果可能,还希望根据ID重命名下载的文件

感谢有人可以帮助我。我的数据示例如下:

ID <- c('L18491','K18781','I28004')
url <- c('https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_50.xlsx','https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_101.xlsx','https://file-examples-com.github.io/uploads/2017/02/file_example_XLSX_100.xlsx')


df <- data.frame(ID,url)

解决方法

我们可以使用possibly中的purrr

library(purrr)    
out_lst <- map(df$url,pfun)
names(out_lst) <- df$ID 

其中

pfun <- possibly(f1,otherwise = NA)

其中

f1 <- function(urllink) {
      openxlsx::read.xlsx(urllink)
 }

或者另一个选择是tryCatch

f2 <-  function(urllink) {

      tryCatch(openxlsx::read.xlsx(urllink),error = function(e) message("error occured"))
}
out_lst2 <- lapply(df$url,f2)

如果我们要使用download.file

lapply(seq_along(df$url),function(i)
        tryCatch(download.file(df$url[i],paste0(getwd(),"/",df$ID[i],".xlsx")),error = function(e) message("error occured")))
              

或使用iwalk

library(tibble)
pfun2 <- possibly(download.file,otherwise = NA)
iwalk(deframe(df),~ pfun2(.x,as.character(glue::glue('{getwd()}/{.y}.xlsx'))))
,

您可以使用download.file下载文件并根据ID变量对其进行命名。

Map(function(x,y) tryCatch(download.file(x,sprintf('%s.xlsx',y)),error = function(e) {},warning = function(w) {}),df$url,df$ID)

这会将文件下载到您的工作目录中,并将其命名为ID.xlsx。此外,它将跳过生成的任何错误或警告。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。