我在R中有以下三重for循环:
res <- data.frame()
for (i in c(1,3,5,7,9,11,13)) {
for (k in c(3,5,7,9,11,13)) {
for (j in 1:41) {
tmp <- chisq.test(matrix(c(counts[j,i],counts[j,(i+1)],counts[j,k],counts[j,(k+1)]),nrow=2,ncol=2,byrow=TRUE))
res<-c(res,c(tmp$p.value))
}}}
其中count是14x41数据框,带有基因型计数值(数字如600,400,240 ..您可以使用随机值生成自己的数据,以便在计算机中重现这一点。)
我想将chisq.test的结果p.value保存在一个向量中(res,来自“results”)。目前,输出如下:
哪个好,但是现在我还希望它还有三列表示j,i和k值,这样我就可以跟踪每个p值的来源。因此,所需的输出将是:
res
(p value 1) j1 i1 k1
(p value 2) j2 i2 k2
...
所以,我修改了将j,i,k添加到最后一行的循环,如下所示:
res <- data.frame()
for (i in c(1,3,5,7,9,11,13)) {
for (k in c(3,5,7,9,11,13)) {
for (j in 1:41) {
tmp <- chisq.test(matrix(c(counts[j,i],counts[j,(i+1)],counts[j,k],counts[j,(k+1)]),nrow=2,ncol=2,byrow=TRUE))
res<-c(res,c(tmp$p.value,j,i,k))
}}}
它会产生以下结果(我不喜欢):
有什么想法?谢谢!
答案 0 :(得分:1)
您可以向数据框添加新行,而不是将结果连接在一起。
也许是这样的:
res <- NULL
for (i in c(1,3,5,7,9,11,13)) {
for (k in c(3,5,7,9,11,13)) {
for (j in 1:41) {
tmp <- chisq.test(matrix(c(counts[j,i],counts[j,(i+1)],counts[j,k],counts[j,(k+1)]),nrow=2,ncol=2,byrow=TRUE))
res<-rbind(res, data.frame(p.value = tmp$p.value,
i = i,
j = j,
k = k,
stringsAsFactors = FALSE))
}}}
<小时/> 数据:
counts <- matrix(data = sample(1:1000, 574, replace = FALSE),
nrow = 41, ncol = 14)