R中的三嵌套循环
目前,我正在编写一个在R中使用三嵌套循环的函数;然而,它似乎有一些奇怪的行为。我注意到以下问题: 1) gene似乎没有被附加到gene.out中。在循环的末尾,我从gene.out获得的列表是gene.use 2) cond仅制作副本(即22_22、35_35等) 据我所知,这两种情况都不应该发生在第三个循环中。这是某种奇怪的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
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"]])))