我正在创建一个管道,允许放入任意数量的数据集名称,它们都将通过类似的清理过程。为此,我使用targets
包,并使用tar_map
from 中的函数tarchetypes
,对每个数据集进行一系列整理和整理函数。
我现在的问题是一个数据集需要按一个因子(a la )分成三个数据集,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
对象。
任何帮助表示赞赏 - 如果需要进一步澄清,请告诉我。