【发布时间】:2021-07-15 22:18:48
【问题描述】:
我正在创建一个允许放入任意数量的数据集名称的管道,它们都将经过类似的清理过程。为此,我使用了targets 包,并使用tarchetypes 中的tar_map 函数,我对每个数据集进行了一系列整理和整理函数。
我现在的问题是,一个数据集需要按一个因子拆分为三个数据集(例如 split),而其余数据集应保持不变。理论上,管道将通过单独处理每个数据集(包括三个“女儿”数据集)继续前进。
这是我最好的尝试:
library(targets)
library(tarchetypes)
library(tidyverse)
# dir.create("./data")
# tibble(nums = 1:300, groups = rep(letters[1:3], each = 100)) |>
# write_csv("./data/td1.csv")
# tibble(nums = 301:600, groups = rep(letters[1:3], each = 100)) |>
# write_csv("./data/td2.csv")
# tibble(nums = 601:900, groups = rep(letters[1:3], each = 100)) |>
# write_csv("./data/td3.csv")
tar_option_set(
packages = c("tidyverse")
)
read_data <- function(paths) {
read_csv(paths)
}
get_group <- function(data, groups) {
filter(data, groups == groups)
}
do_nothing <- function(data) {
data
}
list(
map1 <- tar_map(
values = tibble(datasets = c("./data/td1.csv", "./data/td2.csv", "./data/td3.csv")),
tar_target(data, read_data(datasets)),
map2 <- tar_map(values = tibble(groups = c("a", "b", "c")),
tar_skip(tester, get_group(data, groups), !str_detect(tar_name(), "td3\\.csv$"))
),
tar_target(dn, do_nothing(list(data, tester)))
)
)
跳过的方法有点笨拙,我可能也想错了。
我显然试图通过将它们放在一个列表中来将代码组合到最后,但我不知道还能做什么。
数据集不能通过例如rbind 组合,因为实际上它们是SummarizedExperiment 对象。
感谢任何帮助 - 如果需要进一步说明,请告诉我。
【问题讨论】:
标签: r target targets-r-package