web-dev-qa-db-ja.com

knitrマークダウンドキュメントにcache = FALSEを設定し、コードチャンク設定を上書きするにはどうすればよいですか?

cache=TRUEオプションを使用して、knitrでRMarkdownを使用してRコードチャンクをキャッシュできることを理解しています。例:次のようになります。

```{r longanalysis, cache=TRUE}
for (i in 1:5000) {
    lm((i+1)~i)
}
```

そして、その分析のキャッシュを無効にしたい場合は、コードチャンクのオプションをcache=FALSEに変更できることに気付きました。ただし、キャッシュが有効になっているRコードチャンクが多数ある場合は、慎重な検索と置換の操作が必要になります。

質問

  • Rマークダウンドキュメント全体にcache=FALSEを一時的に設定する方法はありますか?

コメント

私は見た この例 最初の行はどこにあるか。ですから、これはグローバル設定の方法だと思いますが、ローカル設定はグローバル設定よりも優先されると思います。

`r opts_chunk$set(fig.width=5, fig.height=5, fig.path='')`
22
Jeromy Anglim

デフォルトはFALSEに設定されており、ローカルチャンクオプションはグローバルオプションを上書きしているようですが、ドキュメントの先頭にこれを追加することで、グローバルオプションをデフォルトでキャッシュするように設定できます。

`r opts_chunk$set(cache=TRUE)`

次に、キャッシュしたくないセクションについては、それらのセクションを明示的にcache = FALSEに設定します。

次に、ドキュメント全体をキャッシュしないように設定する場合は、グローバルオプションをFALSEに変更して、再実行できます。

問題は、チャンクオプションのいずれかがcache = TRUEに設定されている場合、それらはグローバル設定を上書きし、グローバルオプションをFALSEに設定すると再実行されないことです。したがって、必要なことを実現する唯一の方法は、デフォルトをcache = TRUEに変更し、キャッシュしたくないチャンクを明示的にcache = FALSEに設定してから、グローバルオプションをFALSEに切り替えて何をするかを決めることだと思います。時間が発生したときに必要です。

34
Dason

キャッシュオプションの削除

knitrは、キャッシュされたオブジェクトを格納するためのディレクトリを作成します。デフォルトでは、cacheと呼ばれます。コードチャンクのcache設定に関係なく、すべての分析が確実に実行されるようにするには、キャッシュディレクトリの内容を削除するだけです

したがって、Linux上のRstudioでは

  1. メニュー_Tools - Shell_に移動して、マークダウンファイルを含む作業ディレクトリでコンソールを開きます。
  2. コマンドを入力します_rm cache/*_

基本的なワークフロー

これが現時点での私の基本的なワークフローです

  • 編み物が速い場合(たとえば、10秒未満)、キャッシュしないでください。
  • 編み物に時間がかかる場合(10秒以上など)は、Rマークダウンファイルに`r opts_chunk$set(cache=TRUE)`を追加します。
  • キャッシュが問題を引き起こしていて、編み物が比較的速い場合(たとえば、数分未満)、キャッシュ全体を削除します。
  • キャッシュが問題を引き起こし、編み物に長い時間がかかる場合(たとえば、数分または数時間)、Rコードチャンクに名前を付け、 knitrのdependsonオプション を使用します。名前を付けると、キャッシュディレクトリ内の名前付きRコードチャンクを選択的に削除することもできます。
19
Jeromy Anglim

ドキュメントを作成したら遅すぎますが、将来のドキュメントでは、パラメータがknitrによって評価されるという事実を使用することを検討することをお勧めします。これは、次のようなことができることを意味します。

```{r data.loading.chunk1, cache = cachedata}
blah blah
```
blah blah

```{r model.fitting.chunk1, cache = cachemodels}
blah blah
```

次に、ドキュメントの上部に次のようなものがあります。

```{r libraries.etc, echo=FALSE, results='hide', message=FALSE}
cachedata = TRUE
cachemodels = TRUE
```

これにより、一度に多数のチャンクのキャッシュをすばやくオフにすることができます。

15
Corone