如何用httr直接从谷歌云端硬盘加载RDS文件至R环境?
直接从谷歌云端硬盘加载RDS文件到R环境的解决方案
问题根源
你遇到的bad 'file' argument错误,本质是Google Drive网页端的export=download链接返回的是HTML跳转页面而非RDS二进制文件(即使认证后,这类网页链接仍可能触发安全验证或重定向,导致响应内容为HTML),所以readRDS无法解析非RDS格式的内容。
推荐解决方案:使用googledrive的drive_read_raw(无需本地下载)
googledrive包提供了drive_read_raw函数,可直接将文件内容读入内存为raw格式,无需保存到本地文件,完美契合你的需求:
library(googledrive) # 服务账号认证(如果用用户账号登录,直接用drive_auth()即可) drive_auth(path = "你的服务账号JSON文件路径.json") # 通过文件ID读取RDS内容到内存 rds_raw_content <- drive_read_raw(as_id("1ZvCT4Ook2yUkPQj4-w7qAfGr7k4ZWt1p")) df <- readRDS(rds_raw_content)
备选方案:使用Google Drive API的直接下载链接
如果坚持用httr手动实现,需改用Google Drive API的官方文件内容获取链接(而非网页端的uc链接),同时确保认证和请求头正确:
library(httr) library(googledrive) # 服务账号认证 drive_auth(path = "你的服务账号JSON文件路径.json") auth_token <- drive_token() file_id <- "1ZvCT4Ook2yUkPQj4-w7qAfGr7k4ZWt1p" # Drive API获取文件内容的官方链接 api_download_url <- paste0("https://www.googleapis.com/drive/v3/files/", file_id, "?alt=media") # 发送请求并获取二进制内容 response <- GET(api_download_url, config = auth_token, accept("application/octet-stream")) # 检查请求是否成功 stop_for_status(response) # 解析RDS内容 df <- readRDS(content(response, type = "raw"))
关键说明
- 网页端的
drive.google.com/uc链接面向浏览器交互,会包含重定向、安全验证逻辑,不适合程序直接调用; alt=media是Drive API获取文件原始内容的标准参数,能稳定返回二进制文件;accept("application/octet-stream")请求头明确告知服务器返回二进制数据,避免返回HTML。
内容的提问来源于stack exchange,提问作者H. berg
相关产品推荐
相关产品推荐

