我在 R 中使用 download.file 手动下载之间存在差异

问题描述 投票:0回答:1

我创建了以下功能:

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 月的文件,如下所示:

但是如果我手动下载:

这是怎么回事?我的代码做错了什么?

提前致谢

r download
1个回答
0
投票

在 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 上出现。

© www.soinside.com 2019 - 2024. All rights reserved.