2016-03-22 7 views
2

Rでいくつかのパッケージを一度に読み込むことができないので、複数回繰り返す必要があります。したがって、これらのパッケージが完全にロードされるまで、これらのパッケージをすべてロードする必要があります。それらがすべて正常にロードされるまで、繰り返しロードするようにプログラムする方法はありますか?エラーがなくなるまでrスクリプトの一部を実行するには

library(biomaRt) 
    library(dplyr) 
    library(stringi) 
    library(GenomicFeatures) 
    library(Rsamtools) 
    library(foreach) 
    library(doMC) 
    library(doMC) 
+1

なぜ1度に利用できないのですか?あなたはそれを解決しようとするかもしれません。 – tmthydvnprt

+0

@tmthydvnprt私はなぜそれがクラスタのものであるかもしれないか分からない。私は ' source〜/ .bashrc'にホームディレクトリのライブラリをソースしなければなりません。それから、いくつかのパッケージをロードするために 'library()'コマンドを何度も実行しなければなりません。私は私のローカルマシンでそれを行うときに問題はありません。 – MAPK

+0

おそらく 'while(!require(doMC){require(doMC)})'を実行することができます。かなり変だけど。 –

答えて

1

私はクールな方法を見つけた:

Rで試し()関数は、エラーがスローされた場合、スクリプトを実行するに進めます。 library()関数はパッケージをロードし、失敗した場合はエラーをスローします。

基本的には、すべてループは、すべてが正常にロードされるまで、5秒ごとにパッケージをリロードしようとするループです。を設定します。素晴らしい診断メッセージを追加しました。

myPackages <- c("ggplot2", "stats", "zoo") 
tryCount <- 0  

while(!all(myPackages %in% (.packages()))){ 

    try(library(ggplot2)) 
    try(library(stats)) 
    try(library(zoo)) 

    tryCount <- tryCount + 1 

    if(!all(myPackages %in% (.packages())) ){ 
    cat(paste0("Failure: ", tryCount, "\n")) 
    cat("Failed to load: ") 
    cat(myPackages[ !myPackages %in% (.packages()) ]) 
    cat("\n") 
    } else { 
    print(paste0("Success!")) 
    } 

    Sys.sleep(5) 

} 
+0

ありがとうございます。これはこの問題を克服するためのすばらしい方法です。それは私のために働いた。 – MAPK

+0

あなたはこのスクリプトで@jenesaisquoiを使用することができます。わかりやすくするためにライブラリを使用するように編集しました。 –

+0

tryは、スクリプトのフェイルオーバーを防ぎます。パッケージがロードに失敗した場合、OPはしばらくしてから再試行します。 try()がなければ、Rはエラーを投げてwhileループを終了します。 –

関連する問題