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

如何在R targets工具中实现多文件输出(以数据集拆分后分别存储为例)

解决targets包中多文件输出的问题

我明白你想把数据集拆分并保存为独立文件,同时希望用一个target来完成这个步骤,让_targets.R更简洁。咱们来一步步解决这个问题:

问题根源

你当前的代码报错,主要有两个原因:

  1. 当tar_target使用format="file"时,虽然支持返回多个文件路径,但后续的train_model()和eval_model()函数需要的是数据框,直接传入文件路径会导致函数无法处理。
  2. 返回的未命名字符向量,后续无法明确区分训练集和测试集的路径,不利于后续target调用。

解决方案

我们可以修改split_dataset()函数,返回命名的文件路径列表,同时在_targets.R中正确配置target,让targets追踪这两个输出文件,再创建轻量target读取这些文件为数据框供后续使用。

步骤1:更新split_dataset()函数

修改R/functions.R中的函数,返回命名列表,明确标记训练集和测试集的文件路径:

split_dataset <- function(data) {
  idx <- sample.int(nrow(data), 0.8 * nrow(data))
  train <- data[idx, ]
  test <- data[-idx, ]
  
  # 定义文件路径
  train_path <- "data/train.csv"
  test_path <- "data/test.csv"
  
  # 保存文件(建议加上row.names=FALSE避免生成额外索引列)
  write.csv(train, train_path, row.names = FALSE)
  write.csv(test, test_path, row.names = FALSE)
  
  # 返回命名列表,方便后续精准访问
  return(list(train = train_path, test = test_path))
}

步骤2:修改_targets.R配置

更新你的targets配置文件,让targets追踪拆分后的文件,再添加读取数据的target:

library(targets)
source("R/functions.R")
set.seed(124)

list(
  tar_target(raw_data, "data/mtcars.csv", format = "file"),
  tar_target(data, read.csv(raw_data)),
  # 这个target会自动追踪train.csv和test.csv两个输出文件
  tar_target(train_test_files, split_dataset(data), format = "file"),
  # 读取训练集数据,供建模使用
  tar_target(train_data, read.csv(train_test_files$train)),
  # 读取测试集数据,供评估使用
  tar_target(test_data, read.csv(train_test_files$test)),
  # 使用训练集建模
  tar_target(model, train_model(train_data)),
  # 使用测试集评估模型
  tar_target(eval, eval_model(model, test_data))
)

为什么这样可行?

  • format="file"会让targets自动追踪train_test_files返回的两个文件,只要这两个文件被修改,targets就会重新运行这个拆分步骤。
  • 命名列表让我们可以精准访问训练集和测试集的文件路径,后续的train_data和test_datatarget会自动读取对应文件,传递给建模和评估函数。
  • 整个拆分和保存步骤还是浓缩在一个target里,保持了_targets.R的简洁性,符合你的需求。

额外小贴士

如果你想进一步简化,也可以让split_dataset()同时返回数据框和文件路径,但不建议这么做——targets的设计理念是每个target只负责单一职责,要么追踪文件,要么追踪数据,混合使用会增加调试复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:32:37