У меня есть «список совпадений» генов в матрице.Каждая строка является хитом, и форматом является «хромосома (символ) начало (число) остановка (число)».Хотелось бы посмотреть, какие из этих совпадений перекрываются с генами в геноме мухи, который представляет собой матрицу с форматом «старт-стоп хромосомы»
У меня работает следующая функция (выводит список генов изстолбец 4 dmelGenome):
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», но я не мог исправить это с помощьюинформация в этой теме.
Спасибо.