web-dev-qa-db-ja.com

knitrにrスクリプトを実行させる:read_chunkまたはsourceを使用しますか?

RStudioバージョン0.97.312でRバージョン2.15.3を実行しています。さまざまなソースからデータを読み取り、複数のdata.tablesを作成する1つのスクリプトがあります。次に、最初のスクリプトで作成されたdata.tablesを使用する別のrスクリプトがあります。 2番目のスクリプトをRマークダウンスクリプトに変換して、分析結果をレポートとして出力できるようにしたかったのです。

sourceとは対照的に、read_chunkの目的がわかりません。 read_chunkは機能していませんが、sourceは機能しています。どちらのインスタンスでも、RStudioのワークスペースパネルにオブジェクトが表示されません。

read_chunksourceの違いを説明してください。なぜどちらかを使用するのですか? .Rmdスクリプトが機能しないのはなぜですか

これは途方もなく単純化されたサンプルです

それは動作しません。次のメッセージが表示されます

エラー:オブジェクト 'z'が見つかりません

2つの簡単なファイル...

rmd.Rへのソースのテスト

x <- 1:10
y <- 3:4
z <- x*y  

source.Rmdのテスト

Can I run another script from Rmd
========================================================

Testing if I can run "test of source to rmd.R"

```{r first part}
require(knitr)
read_chunk("test of source to rmd.R")
a <- z-1000
a
```

The above worked only if I replaced "read_chunk" with "source". I 
can use the vectors outside of the code chunk as in inline usage. 
So here I will tell you that the first number is `r a[1]`. The most 
interesting thing is that I cannot see the variables in RStudio 
workspace but it must be there somewhere.
19
Farrel

read_chunk()はソースコードのみを読み取ります(今後の参照用)。 source()のようなコードを評価しません。 read_chunk()の目的は、 このページ および マニュアル で説明されています。

13
Yihui Xie

knitrAFAIK内からインタラクティブにチャンクを実行するオプションはありません。ただし、これは次のような方法で簡単に実行できます。

#' Run a previously loaded chunk interactively
#'
#' Takes labeled code loaded with load_chunk and runs it in the /global/ envir (unless otherwise specified)
#'
#' @param chunkName The name of the chunk as a character string
#' @param envir The environment in which the chunk is to be evaluated 
run_chunk <- function(chunkName,envir=.GlobalEnv) {
    chunkName <- unlist(lapply(as.list(substitute(.(chunkName)))[-1], as.character))    
    eval(parse(text=knitr:::knit_code$get(chunkName)),envir=envir) 
} 
NULL
1
russellpierce

他の人に役立つ場合は、read_chunk()を使用して、評価せずにスクリプトを読み取ると、2つの方法で役立つことがわかりました。まず、Rスクリプトを直接またはインタラクティブに操作している場合、パッケージやデータなどをロードするコードの長いプリアンブルが必要になる場合があります。ただし、このようなプリアンブルは不要であり、たとえば、以前のコードチャンクがメインドキュメントはすでにデータをロードしています。

次に、多くのチャンクを含むスクリプトがあり、どのチャンクをどこで実行するかを制御したい場合があります(たとえば、特定の場所のプロットやテーブル)。スクリプト内のすべてを実行する場合(たとえば、カスタム関数をロードするためのドキュメントの先頭)にsourceを使用します。ドキュメントの早い段階でread_chunkを使用してスクリプトをロードし、必要な場所で必要なチャンクを選択的に実行し始めました。

0
Omar Wasow