在R中使用apply()对含重复的两组数据逐行执行双样本t检验
解决逐行双样本t检验的问题
我来帮你搞定这个批量处理的需求!你的现有代码里有几个小细节需要调整,咱们直接看修正后的方案:
问题分析
你用apply()的思路完全正确,但有两处语法错误需要修正:
- 当
apply()按行处理时,传入匿名函数的x就是当前行的所有元素,不需要再去引用原数据框R_alltemp[,1:3],直接对x做索引拆分即可 - 你写的
x(R_alltemp[,1:3])是错误的调用方式,正确的元素提取应该用x[1:3]和x[4:6] - 另外代码里的
R_all3应该是笔误,应该指向你的目标数据框R_alltemp
修正后的代码
# 为数据框添加p值列,逐行执行双样本t检验 R_alltemp$p.value <- apply(R_alltemp, 1, function(x) { # 拆分当前行的两组重复数据 hcc827_samples <- x[1:3] # 对应R1.HCC827、R2.HCC827、R3.HCC827 h1975_samples <- x[4:6] # 对应R1.nci.h1975、R2.nci.h1975、R3.nci.h1975 # 执行双样本t检验并提取p值 t.test(hcc827_samples, h1975_samples)$p.value })
可选参数调整
如果你的数据需要特定的t检验设置,比如假设方差齐性(改用Student's t检验而非Welch检验),或者需要单侧检验,可以直接在t.test()里添加参数:
# 示例:假设方差齐性的双侧检验 t.test(hcc827_samples, h1975_samples, var.equal = TRUE, alternative = "two.sided")$p.value
如果数据里存在缺失值,可以添加na.action = na.omit来自动忽略NA值:
t.test(hcc827_samples, h1975_samples, na.action = na.omit)$p.value
内容的提问来源于stack exchange,提问作者Ryan D
相关产品推荐
相关产品推荐

