如何在R中下载GitHub私有仓库中的压缩数据文件?
私有仓库的非公开资源访问需要携带身份认证信息,因此直接请求会返回404状态码,按照以下步骤操作即可解决问题:
第一步:获取GitHub个人访问令牌(PAT)
- 登录GitHub账号,点击右上角头像,选择「Settings」
- 左侧菜单栏下拉找到「Developer settings」并点击进入
- 依次选择「Personal access tokens」->「Tokens (classic)」
- 点击「Generate new token」,选择「Generate new token (classic)」,按提示完成账号验证
- 填写令牌备注,仅勾选
repo权限即可,按需设置令牌过期时间,最后点击「Generate token」 - 生成后立刻复制保存令牌,该令牌仅会显示一次,丢失后需要重新生成
第二步:修改R下载代码
方法1:使用httr包(更稳定,推荐)
如果尚未安装httr包,先运行install.packages("httr")安装,后续代码如下:
library(httr) # 替换为你自己生成的GitHub个人访问令牌 GITHUB_PAT <- "你刚才复制的令牌字符串" # 保持原文件下载地址不变 url <- "https://github.com/aquijanoruiz/disability_benefits_EC/raw/master/ENSANUT_datasets/BDD_ENSANUT_2018_STATA_.zip" # 创建临时存储文件 tf <- tempfile(fileext = ".zip") # 携带认证信息发起下载请求 response <- GET( url = url, add_headers(Authorization = paste0("token ", GITHUB_PAT)), write_disk(tf, overwrite = TRUE) ) # 校验下载结果 if (http_status(response)$category == "Success") { message("文件下载成功") # 后续可通过 unzip(tf) 解压文件读取数据 } else { stop("下载失败,错误信息:", http_status(response)$message) }
方法2:直接修改download.file参数
如果不想引入额外依赖包,也可以直接给原生download.file添加认证头:
# 替换为你自己生成的GitHub个人访问令牌 GITHUB_PAT <- "你刚才复制的令牌字符串" url <- "https://github.com/aquijanoruiz/disability_benefits_EC/raw/master/ENSANUT_datasets/BDD_ENSANUT_2018_STATA_.zip" td <- tempdir() tf <- tempfile(tmpdir=td, fileext = ".zip") # 携带认证头下载文件 download.file(url, tf, headers = c(Authorization = paste0("token ", GITHUB_PAT)))
注意事项
- 不要将包含PAT明文的代码上传到任何公开代码仓库,令牌泄露会导致你的账号仓库权限被恶意使用。你可以将PAT存入R环境变量,调用时通过
Sys.getenv("GITHUB_PAT")读取,避免代码中硬编码令牌
内容的提问来源于stack exchange,提问作者Alonso Quijano
相关产品推荐
相关产品推荐

