You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用magrittr将download.file()输出直接管道到readxl()且不存临时文件?

这个问题我之前也折腾过,咱们一步步来解决:

首先得搞清楚你代码报错的两个核心原因:

  • download.file() 的作用是把远程文件下载到本地磁盘,它的返回值是下载状态码(0表示成功,非0是失败),不是文件内容或路径——所以你直接用管道传给read_excel()的话,后者拿到的是个数字,完全不是它需要的输入。
  • 另外download.file()的destfile参数是必填项,你没指定这个参数,这就是直接触发报错的原因。

接下来给你两个解决方案,根据你的需求选:

方案1:自动临时文件(无手动清理负担)

如果你能接受临时文件(系统会自动清理,不用你手动删除),可以用tempfile()自动生成临时文件路径,结合magrittr的代码块语法实现管道调用:

library(magrittr)
library(readxl)

# 生成带xlsx后缀的临时文件路径
temp_file <- tempfile(fileext = ".xlsx")

download.file(www, destfile = temp_file, method = "curl") %>% 
  { read_excel(temp_file, sheet = "List 1", range = "A3:L1902") } -> cw

这里用{}是因为我们不需要用download.file()返回的状态码,而是要引用提前生成的临时文件路径,代码块能让我们在管道里执行任意R代码。

方案2:全程内存处理(完全不存文件)

如果完全不想在磁盘保存任何文件,推荐用httr包的GET()函数直接获取远程文件的二进制内容,read_excel()支持直接读取这种raw格式的内容:

library(httr)
library(readxl)
library(magrittr)

GET(www) %>% 
  content(as = "raw") %>% # 将响应内容转为二进制raw格式
  read_excel(sheet = "List 1", range = "A3:L1902") -> cw

这个方法全程在内存里处理,不会在本地留下任何文件,完美匹配你“无需先保存到临时位置”的要求。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:06