web-dev-qa-db-ja.com

Rstudio Markdownでグローバル環境のオブジェクトを使用する方法

Stack Overflowで同様の質問を見ましたが、決定的な答えは事実上ありませんでした。

Markdown(Rstudio)スクリプトのグローバルR環境にあるオブジェクト(回帰近似、データフレーム、その他のオブジェクト)にアクセスして使用する最も簡単な方法は何ですか。

RStudioチームが物事を快適で効果的にする傾向があることを考えると、これに対する簡単な解決策がないことは驚くべきことです。

前もって感謝します。

34
Adam Robinsson

良くも悪くも、この省略は意図的なものです。文書の外部で作成されたオブジェクトに依存すると、文書の再現性が低下します。つまり、文書がグローバル環境でデータを必要とする場合、誰か(または2年以内に自分)に文書とデータファイルを与えて再作成させることはできませんそれ自体。

このため、そしてバックグラウンドでレンダリングを実行するために、RStudioは実際にドキュメントをレンダリングするために個別のRセッションを作成します。そのバックグラウンドRセッションは、RStudioで表示されるインタラクティブRセッションの環境を表示できません。

この問題を回避する最善の方法は、グローバル環境のコンテンツを作成するために使用したコードを取得し、ドキュメント内に移動することです(ドキュメントに表示したくない場合は_echo = FALSE_を使用できます) 。これにより、ドキュメントは自己完結型で再現可能になります。

それができない場合、グローバル環境でデータを直接使用するために取ることができるいくつかのアプローチがあります。

  1. Knit HTMLボタンを使用する代わりに、Rコンソールでrmarkdown::render("your_doc.Rmd")と入力します。これは、バックグラウンドセッションではなく、現在のセッションで編成されます。代わりに:

  2. レンダリングの前にグローバル環境を.Rdataファイルに保存し(Rの save 関数を使用)、ドキュメント内で load を使用します。

40
Jonathan

この問題は、編成中のコードでパッケージを明示的に参照することで解決したと思います。たとえば、 yarrr パッケージを使用して、data(pirates)を使用してデータフレーム「pirates」をロードしました。これはコンソールおよびRstudioコードチャンク内で正常に機能しましたが、knitrでは上記の質問のパターンに従って失敗しました。ただし、pirates <- yarrr::piratesを使用してオブジェクトを作成してデータをメモリにロードした場合、ドキュメントはHTMLにきれいに編まれます。

1
invertdna

私自身も同じ問題を抱えています。いくつかのものは毎回再現するのにかなり時間がかかります。

別の答えがあると思います。 save.image()関数を使用して環境を標準の_.Rdata_ファイルとは異なるファイルに保存するとどうなりますか。次に、load()を使用して戻します。

同じデータを使用していることを確認するには、toolsmd5sum()を使用します。

乾杯、コード

1
Cordura21

RStudioの[ツール]と[グローバルオプション]に移動し、[Rマークダウン]タブにアクセスして、[ディレクトリ内のチャンクを評価]で選択を行います。そこで[ドキュメント]オプションを選択すると、RマークダウンニットエンジンプレーンRコードと同様にグローバル環境にアクセスします。この情報がこの情報を検索する人に役立つことを願っています!

1
Patrik_P