2016-04-21 5 views
0

私は、様々な生物工学注釈データパッケージを使用するRパッケージを作成しています。特定のデータパッケージはユースケースによって異なります。そのため、私はこのような何かを行う機能を持っている:オンザフライでデータパッケージを取得するために 'require'パッケージコードを使用するR

if (!require(biocpack_name, character.only=T)) { 
    source("https://bioconductor.org/biocLite.R") 
    BiocInstaller::biocLite(biocpack_name) 
    require(biocpack_name , character.only=T) 
} 

biocpack_nameは、分析される特定のデータに基づいて検索され〜30 +注釈データパッケージのいくつかのことができます。そのため、私はそれぞれを「Suggests」に追加する必要はありません(エラーはパッケージではなく、パッケージを指定する文字列であるため、動作するかどうかはわかりません)。 R CMD CHKから私にこのエラーが表示されます:

'library' or 'require' call not declared from: ‘biocpack_name’ 
'library' or 'require' call to ‘biocpack_name’ in package code. 

どうすればこの問題を回避できますか?

答えて

1

これはエラーではありませんが、警告です。 Tではなくcharacter.only = TRUEを使用すると消えてしまいます(TRUEの値がわかっていて再割り当てすることはできないが、Tは不明でFALSEを含む何でもかまいません)。しかし、さらに、requireNamespace()を使用するという警告のアドバイスに従ってください(ユーザー検索パスを汚染しないでください)。おそらくdb = get(biocpack_name, getNamespace(biocpack_name))は、あなたが望むように注釈パッケージを使用できるようにします(例:mapIds(db, ...))。

DESCRIPTIONファイルのEnhances:フィールドにパッケージを追加すると、パッケージが何らかの形で注釈パッケージと連携していることが伝えられますが、パッケージがインストールされることはありません(ビネットの構築など)明示的に要求されない限り。

+0

TをTRUEに変更した問題を解決しました。パッケージが1つの関数内にロードされているが別の関数で使用されているので、推奨されているアプローチはうまくいかないだろうか'db'は作成された関数のローカルではないでしょうか? – alexvpickering

+1

はい、あなたの機能がどのように設計されたかを考えなければなりません。上のコードは 'get_db()'と呼ばれ、必要なときに毎回dbシンボルを返します。 –

+0

私は示唆したようにしようとしましたが、エラーを起こしました。例えば、 'biocpack_name < - " hgu95av2.db "'と返されたオブジェクトが 'db'と呼ばれる場合です。次の例では、いくつかのサンプルキーを取得できます: 'keys < - AnnotationDbi :: keys(db)[1:5]'。しかし、AnnotationDbi :: mapIds(db、keys、 "SYMBOL"、keytype = "PROBEID") 'および' AnnotationDbi :: select(db、keys、 "SYMBOL") 'は' object 'hgu95av2ORGPKG' not found'で失敗します。 – alexvpickering

関連する問題