23

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

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

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

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

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

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

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

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

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

ソースのテスト.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.
4

3 に答える 3

14

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

于 2013-03-19T17:50:03.510 に答える
1

他の誰かに役立つ場合に備えて、read_chunk()評価せずにスクリプトを読むために使用すると、2 つの点で役立つことがわかりました。まず、多くのチャンクを含むスクリプトがあり、どのチャンクがどこで実行されるかを制御したい場合があります (たとえば、特定の場所のプロットまたはテーブル)。スクリプト内のすべてを実行したい場合に使用sourceします (たとえば、ドキュメントの開始時にパッケージの標準セットまたはカスタム関数をロードする場合)。ドキュメントの早い段階でを使用してread_chunkスクリプトをロードし、必要な場所で必要なチャンクを選択的に実行しました。

第 2 に、R スクリプトを直接または対話的に操作している場合、パッケージやデータなどをロードするコードの長いプリアンブルが必要になる場合があります。メイン文書にはすでにデータがロードされています。

于 2019-08-05T06:42:45.823 に答える
1

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
于 2015-01-26T14:03:16.373 に答える