2017-11-10 6 views
1

現在、Rパッケージを構築中です。mypackageと呼んでいます。私はdevtools::use_vignette("my-vignette")を使用してパッケージビネットを生成し、コンテンツにmy-vignetteを埋めました。もちろんパッケージビネットなので、このパッケージ自体に含まれている関数とデータの使用法を実証する必要があります。しかし、私はビネットを編むときにパッケージとその内容を読み込む際に問題があります。パッケージ自体のためにビネットにRパッケージをロードする

ビネット内のすべてのコードチャンクは、ローカルコンピュータでエラーなしで実行されます。これは、Rを再起動してワークスペースをクリアした後でも同じです。しかし、私はデベロッパーツール::ビルド()を使用してパッケージをビルドしようとすると、ビルドがで失敗します。

Error in library(mypackage): there is no package called `mypackage` Calls: <Anonymous> ... withCallingHandlers -> withVisible -> eval -> eval -> library Execution halted

devtools::build()からコンソールの完全な出力は次のようになります。

* checking for file ‘/path/to/mypackage/DESCRIPTION’ ... OK 
* preparing ‘mypackage’: 
* checking DESCRIPTION meta-information ... OK 
* installing the package to build vignettes 
* creating vignettes ... ERROR 
Quitting from lines 39-44 (my-vignette.Rmd) 
Error: processing vignette 'my-vignette.Rmd' failed with diagnostics: 
'my_function' is not an exported object from 'namespace:mypackage' 
Execution halted 

デベロッパーツール: :document()はエラーなく実行されますが、devtools :: build_vignettes()は特定の関数を使用できない別のエラーになります(パッケージ自身をロードできるようです)。

> devtools::build_vignettes() 
Building mypackage vignettes 
Moving basic-mypackage-vignette.html, basic-mypackage-vignette.R to inst/doc/ 
Copying basic-mypackage-vignette.Rmd to inst/doc/ 
> devtools::build() 
'/Library/Frameworks/R.framework/Resources/bin/R' --no-site-file --no-environ --no-save --no-restore --quiet CMD build \ 
'/path/to/mypackage' --no-resave-data --no-manual 

* checking for file ‘/path/to/mypackage/DESCRIPTION’ ... OK 
* preparing ‘auctestr’: 
* checking DESCRIPTION meta-information ... OK 
* installing the package to build vignettes 
* creating vignettes ... ERROR 
Quitting from lines 39-44 (my-vignette.Rmd) 
Error: processing vignette 'my-vignette.Rmd' failed with 
diagnostics: 
could not find function "my_function" 
Execution halted 
Error: Command failed (1) 
> devtools::document() 
Updating mypackage documentation 
Loading mypackage 

パッケージ自体が自分のRライブラリに存在しないためです。私は、開発中にdevtools::load_all()を使ってそのパッケージをロードしています。パッケージビネットでその機能とデータを使用するために、私はこれを回避してパッケージをロードするにはどうすればよいですか?具体的には、ニットがビネットを編むために使用している環境に、その機能でパッケージを利用できるようにするにはどうすればよいですか?

他のパッケージのビネットが直接library()を使用してパッケージをロードするのを見たことがあります。例えば、stringrビネットに記載されている。

私は読者が完全に再現可能な例なしでこれを評価できることを願っています。ここで複製や共有が困難な完全なRパッケージのディレクトリ構造が必要なため、例全体を再現するのは困難です。

+0

エクスポートされたビネットで使用している機能はありますか? (つまり、文書に '# '@ export'があります) – sinQueso

+0

ああ、それは本当に問題であるようです(@exportを使わない)。ありがとうございます - あなたのどちらかが答えとして投稿した場合、私はそれを正しいとマークします! – jpgard

答えて

1

私のビネットに直接パッケージをロードします(library(my_package))。

しかし、あなたの誤差を考慮すると、それは問題ではないかもしれません...

あなたはmy_functionが実際にエクスポートされていることを確認することができます。関数のドキュメントの最後に次のコードを追加する必要があります。

#' @export 
関連する問題