我创建了以下功能:
download_ <- function(zip_link, destination){
zip_url <- zip_link
zip_file <- file.path(destination, basename(zip_link))
download.file(zip_url, destfile = zip_file, cacheOK = FALSE)
}
download_(zip_link = "https://datosabiertos.mineduc.cl/wp-content/uploads/2022/09/Asistencia-declarada-Abril-2022.rar",
destination = "C:/Users/####/Desktop")
它会下载 2022 年 4 月的文件,如下所示:
但是如果我手动下载:
这是怎么回事?我的代码做错了什么?
提前致谢
在 Windows 中使用
download.file()
下载二进制文件时,需要使用 mode = "wb"
设置合适的模式,这样调用就变成:
download.file(zip_url, destfile = zip_file, cacheOK = FALSE, mode ="wb")
有时可能会有点混乱,因为某些 URL 模式是自动设置的,下载的文件最终可能会正常,即以 ".zip" 结尾的 URL。始终使用二进制模式也没有什么坏处。或者使用更实用的默认值,例如
curl::curl_download()
。
来自
?download.file()
:
二进制传输的选择(模式 =“wb”或“ab”)在 Windows 上很重要,因为与 Unix 类似,它确实区分文本和二进制文件,并且文本传输会发生变化 行结尾为 (又名“CRLF”)。
在 Windows 上,如果未提供模式(missing())且 url 以 .gz、.bz2、.xz、.tgz、.zip、.jar、.rda、.rds 或 .RData 之一结尾,则 mode = " wb”设置为进行二进制传输以帮助粗心的用户。
下载二进制文件的代码必须使用 mode =“wb”(或“ab”),但文本传输引起的问题只会在 Windows 上出现。