组合嵌套`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)
  )
)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...