цикл с несколькими условиями - PullRequest
0 голосов
/ 19 января 2019

Мне нужно сделать цикл с несколькими условиями (создать три разных объекта несколько раз) и с вложенным циклом.Я пишу это:

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 голосов
/ 19 января 2019

Я полагаю, вы не понимаете, как работает цикл 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, который создаст целочисленный вектор по длине метаксана (аналогично 1:length(metaxcan), но он обрабатывает случай, когда длина равна 0 без ошибки)

0 голосов
/ 19 января 2019

Не проверено, но не будет ли достаточно просто использовать одну петлю?

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)
}
...