我正在尝试像这样进行双样本t检验
wt1
,wt2
,wt3
,mut1
,mut2
,mut3
是3x3矩阵。运行t检验后,我想获得t.stat
和p.value
矩阵,其中
t.stat[i,j] <- the t value from t.test(c(wt1[i,j],wt2[i,j],wt3[i,j]),c(mut1[i,j],mut2[i,j],mut3[i,j]))
p.value[i,j] <- the p-value from t.test(c(wt1[i,j],wt2[i,j],wt3[i,j]),c(mut1[i,j],mut2[i,j],mut3[i,j]))
i
和j
表示行和列索引。
是否有一种有效的方法可以在没有循环的情况下实现这一目标?
非常感谢您的帮助,它的确有效!
现在我发现对角线方向的数据都是1,这会产生Error in t.test.default(c(wt1[x], wt2[x], wt3[x]), c(mut1[x], mut2[x], :
data are essentially constant
。
为了传递这些错误,我想在N/A
和t.stat
中输出p.value
。如果矩阵必须包含相同类型的值,则0
和1
可分别用于t.stat
和p.value
。似乎tryCatch
可以完成这项工作,但我不确定如何使用sapply
处理它?</ p>
答案 0 :(得分:2)
您可以这样做:
test<- sapply(1:9, function(x) t.test(c(wt1[x], wt2[x], wt3[x]),
c(mut1[x], mut2[x], mut3[x])))
t.stat<- matrix(test["statistic", ], nrow = 3)
p.value<- matrix(test["p.value", ], nrow = 3)
对于问题的第二部分,我认为在tryCatch
中使用sapply
会有所帮助。不幸的是,我想不出预先分配test
然后在使用tryCatch
时创建2个矩阵的方法。为了做到这一点,我正在调整Aaron's answer.
t.stat<- matrix(sapply(1:9, function(x)
tryCatch({t.test(c(wt1[x], wt2[x], wt3[x]),
c(mut1[x], mut2[x], mut3[x]))$statistic},
error = function(err) {return(NA)})), nrow = 3)
p.value<- matrix(sapply(1:9, function(x)
tryCatch({t.test(c(wt1[x], wt2[x], wt3[x]),
c(mut1[x], mut2[x], mut3[x]))$p.value},
error = function(err) {return(NA)})), nrow = 3)