2011-10-25 12 views
1

私は、マトリックス中の遺伝子の「ヒットリスト」を持っています。各行はヒットし、フォーマットは「染色体(文字)開始(数字)停止(数字)」です。これらのヒットのどれが、「染色体開始停止遺伝子」というフォーマットのマトリックスである、フライゲノムの遺伝子と重複しているのかを見たいと思う。0126私はプリント()を置き換える場合しかし、R:ネストされたforループからベクターを作成する

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) 

} 

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

RはchrGenome [1]に存在するいくつかの値を有するベクトルを返す)dmelGenomeました。これらの値がどのように選択されるかわからないのは、ifステートメントを満たす行にないためです。インデックス作成の問題だと思いますか?

また、これを実行するより効率的な方法があると確信しています。私はRが新しく、コードはあまり効率的ではありません。

これは、「ネストされたループの結果をRの別のベクトルに書き込む」と似ていますが、そのスレッドの情報で修正できませんでした。

ありがとうございました。

+0

これは、私たちが再現できない(サンプルデータなし)コードの大きな塊であるため、本当に扱いにくいでしょう。 (1)データを提供し、(2)問題の原因をより正確に突き止めてください。 –

+0

これは、非常によく似ています(ユーザー####がクロスポーリングしているのかどうか疑問に思っています)、r-helpとBioCのリストに間違いなくクロスポストされていました。このような活動は、BioConductorでよくサポートされています:https://stat.ethz.ch/pipermail/bioconductor/2011-October/041776.html –

答えて

3

私は内部ループを置き換えることができ信じている:

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

次にあなたが欲しいものを選択するために、その論理ベクトルを使用することができます。 Doing

which(gene.in) 

このような場合もあります。

+0

さらには 'gene.in < - chrHits [i、2]> = chrGenome [ 、2]&chrHits [i、3] <= chrGenome [、3] '。 –

+0

Duh。 Thanks Richie –

+0

Thanks - Patrickの提案のRichieの修正を試しましたが、値が1つしか返されなかったので、print()を使用すると表示されるので複数のヒットがあることがわかりました。私は今、時間のために窮地に瀕しているだけで、印刷されたリストをtxtファイルにコピーしています。私はクロスポストではありませんが、私に生物起源の糸を教えてくれてありがとう!確かめます。 Richie - "print(chrGenome [j、4])"を削除してオブジェクトに出力を送信しようとすると問題が発生します。私は誤ってインデックスを作成していると思います。 – user1012822

関連する問題