同一份样本表贯通R与Python - SpiralKernel/bioinfo-wiki GitHub Wiki

同一份样本表贯通R与Python

更新:2026-10-15;状态:可用;验证范围:Python实际运行;base R完整脚本经WebR R4.6.0执行,输出语义交叉核验;本轮原生R4.4.3复跑基础案例;第三方R包仅验证另页DESeq2案例。

用两张故意顺序不同的小表练习按ID合并,保留缺失并核对两种语言的描述结果。

输入与运行

通过项目仓库中的 Code → Download ZIP,也可直接下载ZIP并解压。先按R与Python路径文件与项目组织把终端或RStudio当前目录设为根目录。examples/data/programming_measurements.csv有8个样本、1个NA;programming_metadata.csv行顺序不同,包含条件A/B与批次。数据为人工数字,不用于生物学推断。

macOS/Linux终端:

python3 examples/programming_basics.py
Rscript examples/programming_basics.R

Windows PowerShell:

python examples/programming_basics.py
Rscript examples/programming_basics.R

先确认安装页中的命令能找到解释器;Windows若只有py命令,可将第一行的python换为py。Rscript不在PATH时,不必先修改系统设置:在已打开正确项目的RStudio R控制台执行source("examples/programming_basics.R")。

Python基本表格脚本只需标准库;可选--plot需Matplotlib。R脚本只需base R,建议先通过R与Python安装环境与编辑器确认命令可用。

已运行与边界

Python 3.14.8已实际运行。R脚本在WebR的R 4.6.0 WebAssembly运行时执行,包含CSV读取、merge、缺失检查、均值、lm和base R PDF图;本轮另在原生R4.4.3执行该完整脚本,仍得到8行、1缺失、A均值2/B均值5.5和条件系数3.5。DESeq2/apeglm验证另见公开airway数据贯通DESeq2,不代表全部R包或各操作系统已测。

两种语言均得到8行、1个缺失,A组有效n=3、均值2,B组有效n=4、均值5.5。R参考A的模型截距2、B系数3.5;只是人工算术,不提供因果或组学统计结论。

检查输出

Python输出examples/output/programming/python/joined.csv、summary.json,加--plot可生成values.png。R输出examples/output/programming/r/joined.csv、summary.csv、session-info.txt和values.pdf。重复运行覆盖同名文件。

检查ID仍按原测量表对应,S04缺失保留,不因均值计算而整行消失。CSV字节格式可能不同,比较数据含义而不是要求完全相同文件。

练习

复制整个解压项目为新的练习文件夹,在副本根目录运行副本脚本。把副本测量表S02的ID改为S01,Python应报Empty or duplicate sample ID;从干净ZIP恢复该表,再把元数据S01改为S99,Python应报Sample ID sets do not match。R的stopifnot也应停止。最后恢复输入,只改变元数据行顺序,均值应保持。

Python的--output只改输出路径,不改输入;改原项目以外的一张CSV不会影响该脚本。本例明确只把空值和NA视为缺失;NaN、Infinity等非有限文本应报错,不能计入有效n。ID保留字符串,包括001的前导零。

后续读Python读取清理与合并样本表、R读取清理与合并样本表和R与Python绘图和统计入门。Python源码、R源码。