R:从嵌套 for 循环创建向量

标签 r vector for-loop nested

我在矩阵中有一个基因的“命中列表”。每行都是一个命中,格式为“染色体(字符)开始(一个数字)停止(一个数字)”。我想看看这些命中中的哪些与果蝇基因组中的基因重叠,这是一个格式为“染色体起始终止基因”的矩阵

我有以下有效函数(打印 dmelGenome 第 4 列中的基因列表):

geneListBuild <- function(dmelGenome='', hitList='', binSize='', saveGeneList='')

{
genomeColumns <- c('chr', 'start', 'stop', 'gene')
genome <- read.table(dmelGenome, header=FALSE, col.names = genomeColumns)

chr <- genome[,1]
startAdjust <- genome[,2] - binSize
stopAdjust <- genome[,3] + binSize
gene <- genome[,4]

genome <- data.frame(chr, startAdjust, stopAdjust, gene)

hits <- read.table(hitList, header=TRUE)

chrHits <- hits[hits$chr == "chr3R",]
chrGenome <- genome[genome$chr == "chr3R",]

genes <- c()

for(i in 1:length(chrHits[,1])) 
{
    for(j in 1:length(chrGenome[,1]))   
    {
        if( chrHits[i,2] >= chrGenome[j,2]  &&  chrHits[i,3] <= chrGenome[j,3] )
        {
            print(chrGenome[j,4])
        }
    }
}

genes <- unique(genes[is.finite(genes)])

print(genes)

fileConn<-file(saveGeneList) 
write(genes, fileConn) 
close(fileConn) 

}

但是,当我用以下内容替换 print() 时:

genes[j] <- chrGenome[j,4]

R 返回一个向量,其中包含 chrGenome[,1] 中存在的一些值。我不知道它如何选择这些值,因为它们不在似乎满足 if 语句的行中。我认为这是一个索引问题?

而且我确信有一种更有效的方法可以做到这一点。我是 R 新手,所以我的代码效率不是很高。

这类似于“将嵌套循环的结果写入 R 中的另一个向量”,但我无法使用该线程中的信息来修复它。

谢谢。

最佳答案

我相信内部循环可以替换为:

gene.in <- ifelse( chrHits[i,2] >= chrGenome[,2] &  chrHits[i,3] <= chrGenome[,3], 
    TRUE, FALSE)

然后您可以使用该逻辑向量来选择您想要的内容。正在做

which(gene.in)

可能对你也有用。

关于R:从嵌套 for 循环创建向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7890751/

相关文章:

在 C 中跨多个文件编译全局变量以创建共享库

r - 当我尝试并行拟合多个模型时,为什么 tensorflow/keras 会窒息?

c++ - 为什么在 "For"和 "While"之间得到不同的结果?

c++ - C++ 中的分区和组合(组合)实现

r - data.table join with roll = “nearest” 返回 "search value"而不是原始值

r - 使用索引迭代向量的子集

r - 确定向量中是否存在元素的最有效方法

Java for 循环中的数组

python - 根据没有for循环的一维数组中的值更改二维numpy数组中的某些值

batch-file - 在 'for' 循环中使用变量