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

为何使用purrr::walk2写入CSV文件时无法生成文件?

问题分析与解决

核心问题1:withr::local_tempfile()的自动清理机制

withr::local_tempfile()的设计逻辑是创建临时文件,并在当前作用域结束后自动删除。你用它作为fwrite的输出路径时,文件刚写完就会被withr自动清理,因此目标目录里找不到文件。

核心问题2:purrr::walk2的不必要使用

你的.y参数是单个固定的目录路径,不需要用walk2(该函数用于两个等长向量的配对循环),用purrr::walk循环.x的取值即可,目录作为固定参数传入更合理。

修正后的代码

library(data.table)
library(purrr)

# 定义临时目录
pp <- withr::local_tempdir()

# 定义写入函数
f <- function(.x, .dir) {
  dt <- data.table(country = .x, school_id = 1:2, school_type = c("a","b"))
  # 直接构造固定文件路径,避开local_tempfile的自动清理
  file_path <- file.path(.dir, paste0("school.", .x, ".csv"))
  fwrite(dt, file_path)
}

# 循环写入文件
purrr::walk(c("at","de"), f, .dir = pp)

# 现在可以看到生成的文件
list.files(pp)

补充说明

  • 如果需要临时文件但要保留,不要用withr::local_tempfile(),可改用基础R的tempfile()(不会自动删除),或直接手动构造路径。
  • walk用于循环单个向量,walk2用于两个等长向量的配对循环,根据场景选择更简洁的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:10