将索引值和结果保存在向量、列表或数据帧中,以三重形式保存在R中的循环中
我在R中有以下三重for循环:将索引值和结果保存在向量、列表或数据帧中,以三重形式保存在R中的循环中,r,for-loop,R,For Loop,我在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 <- 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添加到最后一行,如下所示:
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))
}}}
它产生了我不喜欢的以下结果:
有什么想法吗?谢谢大家! 您可以向数据帧添加新行,而不是将结果连接在一起 也许是这样的:
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是一个14x41数据帧,其基因型计数值为600、400、240。。您可以使用随机值生成自己的值,以便在计算机中重现此值。太好了,你做到了!非常感谢:D
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)