R中的三嵌套循环

R中的三嵌套循环,r,bioinformatics,seurat,R,Bioinformatics,Seurat,目前,我正在编写一个在R中使用三嵌套循环的函数;然而,它似乎有一些奇怪的行为。我注意到以下问题: 1) gene似乎没有被附加到gene.out中。在循环的末尾,我从gene.out获得的列表是gene.use 2) cond仅制作副本(即22_22、35_35等) 据我所知,这两种情况都不应该发生在第三个循环中。这是某种奇怪的R循环行为还是编码错误 以下是相关代码: for (gene in genes.use){ for (i in groups){ cat(paste

目前,我正在编写一个在R中使用三嵌套循环的函数;然而,它似乎有一些奇怪的行为。我注意到以下问题:

1) gene似乎没有被附加到gene.out中。在循环的末尾,我从gene.out获得的列表是gene.use

2) cond仅制作副本(即22_22、35_35等)

据我所知,这两种情况都不应该发生在第三个循环中。这是某种奇怪的R循环行为还是编码错误

以下是相关代码:

for (gene in genes.use){

    for (i in groups){
      cat(paste("i: ",i, "\n"))

      i_cells = rownames(SerautObj@meta.data[SerautObj@meta.data[[group.by]] == i,])
      i_vector = SerautObj@assays[[assay]]@data[gene, i_cells]

      for(j in groups){
        cat(paste("j: ",j, "\n"))

        j_cells = rownames(SerautObj@meta.data[SerautObj@meta.data[[group.by]] == j,])
        j_vector = SerautObj@assays[[assay]]@data[gene, j_cells]


        cond = paste(i, j, sep = "_")
        cat(paste(gene, cond, sep = "\n"))

        #preform t-test
        t_out = t.test(i_vector, j_vector)

        #constuct outs

        condition.out <- c(condition.out, cond)



        stat.out <- c(stat.out, t_out[["statistic"]])
        p_val.out <- c(p_val.out, t_out[["p.value"]])
        gene.out <- c(gene.out, gene)
        }
    }
}

谢谢你的阅读

事实证明,问题在于:

Map(c, unique(SerautObj@meta.data$groups))
然后我试着:

as.list(unique(SerautObj[["time"]]))
此问题与此相同,但已通过以下方式解决:

unlist(as.list(unique(SerautObj[["time"]])))

似乎列表上存在奇怪的for循环行为,您需要转到一个原子类型的向量,否则可能会导致重复。我猜可能发生了一些奇怪的引用或列表上的循环。

您能给我们提供一个最小的数据框架,让您的示例重现吗?在将数据帧剥离为几个记录后,您可以将
dput(dataframe\u name)
的输出复制到您的代码块中,我们将能够重新创建它。迭代
i,j
通常可以简化为一组向量化的操作。我对r还不太熟悉,还不知道应该使用什么命令,我更喜欢打圈。你对在哪里查找有什么建议吗?@Connorr.0-如果你感兴趣,请查看R中的apply函数系列(apply、sapply、Lappy、mapply)。也可以将函数式编程作为一个通用主题。如果这有效,请接受作为解决方案-勾选。
unlist(as.list(unique(SerautObj[["time"]])))