如何解决使用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 举报,一经查实,本站将立刻删除。