如何按列执行单样本t检验并自定义总体均值μ?循环代码返回NULL的问题排查
问题分析与解决方案
你的循环代码里的核心问题是列表初始化的位置不对——你把h=list()放在了for循环的内部,这意味着每一次循环都会把h重置成一个空列表!
举个例子:
- 当i=1时,你创建了空列表h,然后给h[[1]]赋值;
- 当i=2时,你又重新创建了空列表h,之前h[[1]]的内容直接被清空,然后给h[[2]]赋值,这时候h[[1]]就变成了NULL;
- 到i=3时,同样的操作再次发生,最终只有h[[3]]保留了结果,前两个位置都是空的。
修复后的循环代码
把列表的初始化放在循环外面,就可以避免每次清空之前的结果:
# 先初始化一个空列表,放在循环外部 h <- list() for (i in 1:ncol(tab)) { h[[i]] <- t.test(tab[,i], mu=0.9) } # 现在查看结果 h h[[1]] # 正常返回第一列的t检验结果 h[[2]] # 正常返回第二列的t检验结果
更简洁的替代方案:用apply结合匿名函数
其实你完全不用写循环,只需要在apply里传入一个匿名函数,就能指定自定义的μ值:
k <- apply(tab, 2, function(x) t.test(x, mu=0.9)) k
这样一行代码就能得到所有列的t检验结果,和修复后的循环效果完全一致,但代码更简洁易读。
内容的提问来源于stack exchange,提问作者Luc
相关产品推荐
相关产品推荐

