1. ホーム
  2. r

[解決済み] R Markdown ファイルを `source('myfile.r')` のようにソースする方法は?

2023-01-12 05:31:40

質問

RのMarkdownファイルやknitrのLaTeXファイルで、よく source に他のRファイル(例えば、データ処理用)を追加することがあります。しかし、いくつかのケースでは、これらのソースファイルがそれ自身の再現可能なドキュメントであることが有益であると考えていました(例えば、データ処理用のコマンドを含むだけでなく、データ処理の決定を説明する再現可能なドキュメントを生成するR Markdownファイル)。

よって、以下のようなコマンドが欲しいところです。 source('myfile.rmd') のRコードチャンク内のすべてのRコードを抽出してソースにするようなコマンドを、私のメインR Markdownファイル内に持ちたいと思います。 myfile.rmd . もちろん、これはエラーを発生させます。

次のコマンドは動作します。

```{r message=FALSE, results='hide'}
knit('myfile.rmd', tangle=TRUE)
source('myfile.R')
```

ここで results='hide' は出力が必要であれば省略することができます。つまり、knitrはRコードを myfile.rmd に出力します。 myfile.R .

しかし、完璧とは言えないようです。

  • を使用すると、余分なファイルが作成されます。
  • 表示の制御が必要な場合、それ自身のコードチャンクに表示する必要があります。
  • のようなエレガントなものではありません。 source(...) .

したがって、私の質問は R MarkdownファイルのRコードをソースする、よりエレガントな方法はありますか?

どのように解決するのですか?

一発芸をお探しのようですね。これを .Rprofile ?

ksource <- function(x, ...) {
  library(knitr)
  source(purl(x, output = tempfile()), ...)
}

しかし、なぜあなたが source() を使用する理由がわかりません。つまり knit() を実行すると、このドキュメント内のすべてのコードが実行され、コードを抽出してチャンクで実行すると、すべてのコードが二度実行されることになります。 knit() を実行すると、すべてのコードが二度実行されることになります (自分自身の中で自分自身を実行することになります)。この2つのタスクは別々であるべきです。

本当にすべてのコードを実行したいのであれば、RStudioはこれをかなり容易にしています。 Ctrl + Shift + R . これは基本的に purl()source() の裏側にある。