2017-03-29 5 views
1

私は、2つのデータフレームを比較する短いコードを書いています。リスト&既知の場所です。リスト内の各項目について、既知の位置にあるかどうかを知りたい。if for double for loop内の文:具体例

for (i in 1:nrow(list)) { 
for (j in 1:nrow(knownlocation)) { 
if ((list[i, 2] == knownlocation[j, 2]) && (list[i, 3] >= knownlocation[j, 3]) && (list[i, 4] <= knownlocation[j, 4])) { 
list[i, 5] = "TRUE" } 
else { list[i, 5] = "FALSE"} 
}} 

このコードは、私には正常に見える、それが実行されます。

colnames(list) <- c("gene_symbol", "chromo", "start", "end") 
colnames(knownlocation) <- c("snp", "chr", "s", "e") 

は、私はそれがknownlocationのいずれかにありますかTRUEまたはFALSEと言って、「リスト」に新しい列を作るためにコードを書いた本を見つけるにはエラーなし。問題が既知の場所にある場合でも、リスト全体がFALSEと表示されます。誰かが明らかに間違っているものを見つけることができますか?

答えて

1

else句は、TRUEが見つかった以前のインスタンスではFALSEで上書きされます。基本的には、条件が満たされたときにのみTRUEを保存しますが、ループの実行前にすべての値をFALSEに初期化します。

else句を試して削除してください。

list$V5 = FALSE 

コード:ネストされたループの前に、以下の権利を行うFALSElistの列5を初期化するために

list$V5=TRUE 
for (i in 1:nrow(list)) { 
    for (j in 1:nrow(knownlocation)) { 
    if ((list[i, 2] == knownlocation[j, 2]) && (list[i, 3] >= knownlocation[j, 3]) && (list[i, 4] <= knownlocation[j, 4])) { 
     list[i, 5] = "TRUE" } 
} 
+0

が、これは完璧に動作、ありがとうございます。 – user6137877