2016-03-22 6 views
0

HPCクラスタで対話モードでジョブを実行すると、そのパッケージを読み込むことができます。読み込みに失敗した場合は、 library (failed package)を複数回実行するとロードできますが、qsub my_rscript_job.pbsを実行するとパッケージが読み込まれません。クラスタ内でジョブを実行中に強制ロードRパッケージ

私my_rscript_job.pbsスクリプトは次のとおりです。

#!/bin/bash 
#PBS -l walltime=100:00:00 
#PBS -l ncpus=1,mem=100g 

source ~/.bashrc 

Rscript /dmf/mypath/map.r -t 100 

私はmap.rスクリプトにロードするために必要なパッケージは、私は対話モードでジョブを送信した場合、私はロードすることができます

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

ですrscriptをターミナルに直接提出してください。しかし、qsubを実行すると、次のエラーが表示されます。

Loading required package: methods 
Warning messages: 
1: package ‘biomaRt’ was built under R version 3.2.2 
2: In eval(quote({ : bytecode version mismatch; using eval 
3: In .recacheSubclasses([email protected], def, doSubclasses, env) : 
    undefined subclass "externalRefMethod" of class "expressionORfunction"; definition not updated 
4: In .recacheSubclasses([email protected], def, doSubclasses, env) : 
    undefined subclass "externalRefMethod" of class "functionORNULL"; definition not updated 
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared object '/dmf/bin/R/x86_64-redhat-linux-gnu-library/3.2/dplyr/libs/dplyr.so': 
    /dmf/bin/R/x86_64-redhat-linux-gnu-library/3.2/dplyr/libs/dplyr.so: undefined symbol: Rf_installChar 
In addition: Warning message: 
package ‘dplyr’ was built under R version 3.2.2 
Error: package or namespace load failed for ‘dplyr’ 
Execution halted 

rをqsubとして実行している間にパッケージを強制的にロードする方法はありますか?

答えて

1

リスト内の各パッケージが正常に読み込まれるまで、各パッケージを再読み込みするようにタイマーを設定します。 qsubオプションを実行すると、パッケージを強制的にロードするタイマーが5秒あります。

myPackages <- c("biomaRt", "dplyr", "stringi","GenomicFeatures","Rsamtools","foreach","doMC") 
    tryCount <- 0  

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

     try(require(biomaRt)) 
     try(require(dplyr)) 
     try(require(stringi)) 
     try(require(GenomicFeatures)) 
     try(require(Rsamtools)) 
     try(require(foreach)) 
     try(require(doMC)) 

     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) 

    } 
2

送信ノードとワーカーノードのRのバージョンが異なるようです。コマンドR --versionを実行し、R --versionしか実行しないpbsスクリプトを送信します。おそらく彼らは違うでしょう。

残りの回答は、HPCクラスターセットアップによって異なります。たぶんそれらはモジュールを使用するでしょう。この場合、module load R/3.2のようなコマンドを実行する必要があります。いずれにしても、HPCクラスタ管理者にヘルプを依頼する必要があるようです。

0

私はあなたが@Derekと話しているものと同様の状況もあると思います。

私のマシン(Ubuntu 14.04)にRバージョン3.0.2があり、Rapacheとの接続にうまくいきました。 私はRソフトウェアをバージョン3.3.0にアップデートしました。マシンでは、自分の機能でパッケージを使用するとうまく動作します。 しかし、Rapacheではこのエラーが出ます。

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared object '/usr/lib/R/library/grid/libs/grid.so': 
    /usr/lib/R/library/grid/libs/grid.so: undefined symbol: Rf_installChar 

私はRapacheとRでR.versionを実行し、両方のバージョンが異なっていました。 Rapacheは3.0.2で動作し、私のRはマシン3.3.0で動作しています。

私は、あなたが話しているこの提出ノードとワーカーノードにどこでアクセスすることができるかについて知り合い、もっと知っています。

よろしくお願いいたします。

+0

私は(すべてのパッケージが正常にロードされるまで)各パッケージを再ロードするために5秒タイマーを設定することで、この問題を回避することができたとして、以下に私の答えを参照してください。 – MAPK

+0

助けてくれてありがとう:) –

関連する問題