有几种条件的情况

时间:2019-01-19 09:48:41

标签: r loops nested

我需要在多个条件下循环(多次创建三个不同的对象),并嵌套一个循环。 我这样写:

metaxcan <- c("foo1.csv", "foo2.csv")
predix_asso <- c("soo1.csv", "soo2.csv")



for (i in metaxcan){
 for (j in predix_asso){
  PGC<-read.csv(i, header=T, sep=",")
  asociacion<-read.table(j, header=T, sep="") 

PGC_predix <- merge(PGC,asociacion,by="gene")
   ngenes<-nrow(PGC_predix_1)    


print(ngenes)
  }
 }

但是它不会打印2个数字(foo1和soo1之间的合并;以及foo2和soo2合并),而是打印4个数字(所有交互)

我该怎么办? 谢谢

2 个答案:

答案 0 :(得分:0)

未经测试,但仅使用一个循环就足够了吗?

metaxcan <- c("foo1.csv", "foo2.csv")
predix_asso <- c("soo1.csv", "soo2.csv")



for (i in metaxcan){

  PGC<-read.csv(i, header=T, sep=",")
  asociacion<-read.table(i, header=T, sep="") 

PGC_predix <- merge(PGC,asociacion,by="gene")
   ngenes<-nrow(PGC_predix_1)    


print(ngenes)
}

答案 1 :(得分:0)

我相信您对于for循环的工作方式感到困惑。运行下面的代码,您将能够看到它如何完全使用i和j的输入。

for(i in metaxcan)for(j in predix_asso)print(paste(i,j))

对于您的问题,我建议使用一个for循环:

for(i in seq_along(metaxcan)){
    PGC <- read.csv(metaxcan[i], header = TRUE, sep = ",")
    asociacion<-read.table(predix_assp[i], header=T, sep = "") 
    PGC_predix <- merge(PGC, asociacion, by = "gene")
    print(ngenes <- nrow(PGC_predix))
}

我在这里使用seq_along,它将沿着metaxcan的长度生成一个整数矢量(类似于1:length(metaxcan),但可以处理长度为0且无错误的情况)