先看结论:可复现需要同时保存输入、样本与基因集口径、代码、参数、环境和结果验收标准。只有脚本或 sessionInfo 都不够。锁定文件与环境后,还应从干净会话按顺序运行一个最小案例,并记录哪些输出允许数值误差、哪些必须完全一致。
适用情况
准备交付、投稿、返修、迁移服务器或让同事重跑铁死亡分析,担心代码与结果无法对应。
建议按这个顺序检查
- 为原始数据、分组表、基因集和外部数据库记录来源、版本、日期及文件校验值,保存纳入排除清单。
- 把预处理、评分、建模和绘图拆成有顺序的脚本,记录代码提交号与配置文件。
- 保存 R/Python 依赖、操作系统、系统库、容器标识、CPU/内存和并行设置,随机过程记录种子。
- 保留中间关键输出、日志和失败信息,写明每个最终图表由哪一步生成。
- 在新会话或独立环境中按说明重跑小案例,核对输入哈希、样本顺序、关键数值和输出文件,再记录实际验证范围。
一个可复用的项目结构
结构可以调整,关键是能从最终图表追溯到输入和代码。受限制数据应保留合规获取说明与访问控制,不因为追求复现而放到公开下载目录。
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(),并记录成功范围
什么才算完成了复现检查
文件能打开只是第一步。应检查样本数量与顺序、基因命中数、比较方向、主要统计量和图表对应关系。随机或并行计算可能出现合理数值差异,应预先说明比较方式与容差,而不是保证所有环境逐字节相同。
本专题的小型示例测试不等于整篇论文复现。真实项目的验收记录应注明数据范围、命令、环境、时间与输出,并明确未覆盖的步骤。
可直接使用的记录模板
- 下载分析复现记录模板(TXT,无需留联系方式)
不能从当前结果直接得出什么
记录模板提高可追溯性,但不能保证任意机器永久得到完全相同结果。只对实际重跑并核对过的范围声明复现成功;数据、版本或方法变化后应重新评估。
依据与版本
- renv:项目环境、锁文件和恢复renv 当前官方教程;2026-10-10 核对
- Seurat v5:assay、layer 与数据访问Seurat v5 官方教程
- TRIPOD 官方资源:预测模型开发与验证清单2015 基础资料与勘误;现行更新另见 TRIPOD+AI
最后核验:2026-10-10|资料核验:AI 编写与公开来源核对;未经人工专家审阅
依据公开来源核对概念、输入、证据边界与版本口径;示意数据不代表真实研究结果。仅标明的小型代码示例经过运行检查,不代表完整生物信息流程或原论文已复现。 本页最小 R 示例已在 R 4.3.3 独立会话运行;不涉及完整 Seurat/GSVA 工作流验证。