2016-09-28 7 views
1

Eset2とEssentialの2つのデータフレームを連結しようとしました。それらは遺伝子名を含む1つの共通の列を共有し、両方のフレームは一意の行を有する。R tryCatchスキップエラー

私はEset2で必要な値(RMA、ANNOT)を検索し、対応する遺伝子名でEssentialの行にバインドすることにしました。

しかし、私はEssentialにユニークな遺伝子があるので、時々私は見上げることができません。したがって、エラーが発生します.Eset2で対応する行を検索すると数字(0)が表示されます。

だから私はtryCatchを使うことにしました。 しかし、それは役に立ちません。 RMAとANNOTにNAを入れるのではなく、Eset2にこのような遺伝子が見つからなかったときには、スクリプトは以前に発見された遺伝子の値を入れます。

for (i in 1:nrow(essential)) { 
     temp <- tryCatch(
     # eset2$GENENAMEand essential[,4] contain gene names 
     eset2[eset2$GENENAME == essential[i,4],]$RMA, 
     error = function(e) { 
     print("This is the 'error' part1") 
     return(NA)} 
    ) 
     essential$rma[i] <- temp 

     temp <- tryCatch(
     eset2[eset2$GENENAME == essential[i,4],]$ANNOT, 
     error = function(e) { 
     print("This is the 'error' part2") 
     return(NA)} 
    ) 
     essential$long_name[i] <- temp 
    } 

は私の代わりにこれを使用することによって、問題を解決:私は間違っtryCatchを使用している場合

 for (i in 1:nrow(essential)) { 
      temp <- try(eset2[eset2$SYMBOL == essential[i,4],]$rma) 
      if (length(temp) != 0) { 
       essential$rma[i] <- temp 
      } 
      else { 
       essential$rma[i] <- NA 
      } 
      temp <- try(eset2[eset2$SYMBOL == essential[i,4],]$GENENAME) 
      if (length(temp) != 0) { 
       essential$long_name[i] <- temp 
      } 
      else { 
       essential$long_name[i] <- NA 
      } 
      } 

私は疑問に思います。 私はそうやってみました:

  temp <- eset2[eset2$GENENAME == essential[i,4],]$ANNOT 

をしかし、それは助けにはなりませんでした。 tryCatchが失敗した理由を確認できますか?

答えて

0

エラーブロックが評価されない理由は、numeric(0)と評価されるデータフレームのサブセットがエラーではないと考えられます。代わりに、あなただけの明示的numeric(0)をチェックし、あなたがそれに遭遇したときNAで置き換える必要があります。

for (i in 1:nrow(essential)) { 
    temp <- eset2[eset2$GENENAME == essential[i,4],]$RMA 
    essential$rma[i] <- ifelse(length(temp) == 0, NA, temp) 

    temp <- eset2[eset2$GENENAME == essential[i,4],]$ANNOT 
    essential$long_name[i] <- ifelse(length(temp) == 0, NA, temp) 
} 

ところで、あなたが使用forループをベクトル化する方法は、おそらくまでループ全体の削減、おそらくそこにありますRコードは数行しかありません。しかし、この答えはうまくいけば、エラーブロックが決して打撃を受けなかった理由と、あなたが代替手段として何をすることができるのかを明らかにします。

関連する問題