【问题标题】:loop with several conditions有几个条件的循环
【发布时间】:2019-06-13 10:04:33
【问题描述】:

我需要使用多个条件(多次创建三个不同的对象)和嵌套循环进行循环。 我这样写:

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 个数字(所有交互)

我该怎么办? 谢谢

【问题讨论】:

    标签: r loops nested


    【解决方案1】:

    我相信您对 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时的情况而不会出错)

    【讨论】:

    • 完美,有效,非常感谢。我不明白,metaxcan 和 predix_asso 中第一个元素的名称有不同的名称,因为我认为它不适用于一个循环
    【解决方案2】:

    未测试,但仅使用一个循环不够吗?

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

    【讨论】:

    • 好的,它可以工作...我不明白,metaxcan 和 predix_asso 中的第一个元素的名称有不同的名称,因为我认为它不适用于一个循环
    猜你喜欢
    • 1970-01-01
    • 2016-06-18
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    相关资源
    最近更新 更多