如何解决组合嵌套`tar_map` 调用的结果
我正在创建一个管道,允许放入任意数量的数据集名称,它们都将通过类似的清理过程。为此,我使用了 targets
包,并使用了 tar_map
中的 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,each = 100)) |>
# write_csv("./data/td2.csv")
# tibble(nums = 601:900,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
对象。
感谢任何帮助 - 如果需要进一步说明,请告诉我。
解决方法
如果您事先知道该因素的水平,您可以使用类似于您现在所做的单独 tar_map()
调用来处理第三个数据集的拆分。如果你事先不知道因子水平,那么分裂需要用动态分支处理,我推荐像tarchetypes::tar_group_by()
这样的东西。
我认为 tar_skip()
与此处无关,我建议将其删除。
如果您从物理文件(或写入物理文件)开始,那么我强烈建议您使用 format = "file"
: https://books.ropensci.org/targets/files.html#external-input-files 跟踪它们。
library(targets)
library(tarchetypes)
tar_option_set(packages = "tidyverse")
list(
tar_map(
values = list(paths = c("data/td1.csv","data/td2.csv")),tar_target(file,paths,format = "file"),tar_target(data,read_csv(file,col_types = cols()))
),tar_target(file3,"data/td3.csv",tar_group_by(data3,read_csv(file3,col_types = cols()),groups),tar_target(
data3_row_counts,tibble(group = data3$groups[1],n = nrow(data3)),pattern = map(data3)
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。