多份独立数据文件预处理建模场景下如何正确使用{targets}?
使用{targets}处理多被试独立文件的解决方案
1. 定义文件路径与被试ID的映射表
首先生成包含文件路径和对应被试ID的静态表格,作为pipeline的初始目标,避免后续ID匹配混乱。
# _targets.R 初始配置 library(targets) library(tidyverse) list( # 追踪所有原始数据文件变更 tar_target( data_file_paths, list.files(path = "你的数据文件夹路径", pattern = "\\.csv$", full.names = TRUE), format = "file" ), # 生成文件路径与被试ID的映射表,根据你的文件名规则调整ID提取逻辑 tar_target( subject_meta, tibble( file_path = data_file_paths, subject_id = str_extract(file_path, "sub-\\d+") ) ),
2. 按被试ID动态分支处理单文件
使用tar_map()实现按被试的分支处理,显式将subject_id带入每个分支的输入和输出,不需要依赖targets自动生成的分支名匹配ID。
# 按被试维度生成动态分支 tar_map( values = subject_meta, names = subject_id, # 可选:用subject_id作为分支名后缀,方便后续排查 tar_target( processed_subject_data, # 替换为你自己的单文件处理逻辑 read_csv(file_path, show_col_types = FALSE) |> mutate(subject_id = subject_id) # 显式把被试ID写入处理后的数据 ) ),
3. 合并全量被试数据
直接合并所有分支的处理结果,每个子数据集已经自带subject_id字段,不会出现ID匹配错误。
# 合并所有被试数据用于后续建模 tar_target( merged_full_data, bind_rows(processed_subject_data), format = "rds" ) )
额外说明
- 可以运行
tar_manifest()查看所有分支的对应关系,确认被试ID与分支的匹配是否正确。 - 如果单文件处理逻辑复杂,可以单独封装为
process_single_file(file_path, subject_id)函数,在目标内直接调用即可,代码结构会更整洁。
内容的提问来源于stack exchange,提问作者JohannesNE
相关产品推荐
相关产品推荐

