环境与算力 · 30

怎样记录软件、参数和环境,保证铁死亡分析可以复现?

回答会区分适用条件、检查步骤和不能直接得出的结论。

先看结论:可复现需要同时保存输入、样本与基因集口径、代码、参数、环境和结果验收标准。只有脚本或 sessionInfo 都不够。锁定文件与环境后,还应从干净会话按顺序运行一个最小案例,并记录哪些输出允许数值误差、哪些必须完全一致。

适用情况

准备交付、投稿、返修、迁移服务器或让同事重跑铁死亡分析,担心代码与结果无法对应。

建议按这个顺序检查

  1. 为原始数据、分组表、基因集和外部数据库记录来源、版本、日期及文件校验值,保存纳入排除清单。
  2. 把预处理、评分、建模和绘图拆成有顺序的脚本,记录代码提交号与配置文件。
  3. 保存 R/Python 依赖、操作系统、系统库、容器标识、CPU/内存和并行设置,随机过程记录种子。
  4. 保留中间关键输出、日志和失败信息,写明每个最终图表由哪一步生成。
  5. 在新会话或独立环境中按说明重跑小案例,核对输入哈希、样本顺序、关键数值和输出文件,再记录实际验证范围。

一个可复用的项目结构

结构可以调整,关键是能从最终图表追溯到输入和代码。受限制数据应保留合规获取说明与访问控制,不因为追求复现而放到公开下载目录。

project/
  README.txt            # 运行顺序、输入获取方法、验证范围
  config/               # 参数与基因集版本卡
  metadata/             # 分组、样本关系、纳入排除记录
  scripts/              # 有顺序的分析代码
  environment/          # sessionInfo、锁文件、系统依赖
  logs/                 # 每步运行与错误日志
  results/              # 图表、关键数值和验收结果
  checksums.txt         # 输入文件校验值

最少要记录的参数

阶段 关键字段 常漏项
数据与基因集 版本、物种、ID、去重和样本筛选 原始文件与后处理文件混用
评分 方法、输入层、命中率、随机参数 只保留最后的分数
建模 结局、拆分、筛选、调参、预处理 外部验证被重新调参
运行环境 包版本、系统库、并行与数据库 只留 R 版本没有外部资源
复现验收 运行入口、数值容差、产物清单 只说“能运行”而不核对结果

依据:renv:项目环境、锁文件和恢复 · Seurat v5:assay、layer 与数据访问 · TRIPOD 官方资源:预测模型开发与验证清单

保存软件信息的最小示例

该示例只保存当前 R 会话信息;不自动安装包、不创建完整锁文件,也不包含你的研究数据。renv 的恢复仍受系统依赖和包源可获得性影响,容器标签也可能变化,关键交付应保存不可变标识或校验记录。

# 保存前先确认当前目录是本项目;文件名使用新的时间戳
stamp <- format(Sys.time(), '%Y%m%d-%H%M%S')
out <- paste0('session-info-', stamp, '.txt')
stopifnot(!file.exists(out))
writeLines(capture.output(sessionInfo()), out)
# 已配置 renv 的项目可在确认依赖后另做 renv::snapshot()
# 在隔离的新项目环境中检验 renv::restore(),并记录成功范围

依据:renv:项目环境、锁文件和恢复

什么才算完成了复现检查

文件能打开只是第一步。应检查样本数量与顺序、基因命中数、比较方向、主要统计量和图表对应关系。随机或并行计算可能出现合理数值差异,应预先说明比较方式与容差,而不是保证所有环境逐字节相同。

本专题的小型示例测试不等于整篇论文复现。真实项目的验收记录应注明数据范围、命令、环境、时间与输出,并明确未覆盖的步骤。

可直接使用的记录模板

不能从当前结果直接得出什么

记录模板提高可追溯性,但不能保证任意机器永久得到完全相同结果。只对实际重跑并核对过的范围声明复现成功;数据、版本或方法变化后应重新评估。

依据与版本

最后核验:2026-10-10|资料核验:AI 编写与公开来源核对;未经人工专家审阅

依据公开来源核对概念、输入、证据边界与版本口径;示意数据不代表真实研究结果。仅标明的小型代码示例经过运行检查,不代表完整生物信息流程或原论文已复现。 本页最小 R 示例已在 R 4.3.3 独立会话运行;不涉及完整 Seurat/GSVA 工作流验证。

继续解决相关问题