我正在考虑使用 R targets
,但我很难让它接受多个文件输出。
例如,我希望能够获取一个数据集,创建一个训练/测试拆分并将每个数据集写入一个单独的文件。
MWE 将是
_targets.R
library(targets)
source("R/functions.R")
set.seed(124)
list(
# created using write.csv(mtcars, "data/mtcars.csv")
tar_target(raw_data, "data/mtcars.csv", format = "file"),
tar_target(data, read.csv(raw_data),
# this throws an error here:
tar_target(train_test, split_dataset(data), format = "file"),
# this only shows how I would try to use the train/test datasets
tar_target(model, train_model(train_test)),
tar_target(eval, eval_model(model, train_test))
)
其中split_dataset()
定义在R/functions.R
split_dataset <- function(data) {
idx <- sample.int(nrow(data), 0.8 * nrow(data))
train <- data[idx, ]
test <- data[-idx, ]
write.csv(train, "data/train.csv")
write.csv(test, "data/test.csv")
return(c("data/train.csv", "data/test.csv"))
}
一种替代方法是使用列表list(train = train, test = test)
,但如果可能,我希望能够访问任一数据集并将数据集保存为单独的文件。
另一种替代方法是在目标列表中定义索引,拆分数据集并将每个数据集写入单独的目标中。如果可能的话,我想将这些步骤浓缩为一个(如上所示),以使目标文件更易于理解。