1

次の簡単なテスト.Rmd Knitr ドキュメント

```{r}
opts_chunk$set(cache=TRUE)
```

```{r}
x <- 1
```

```{r}
x
ls()
```

以下を使用して Unix シェルから処理した場合:

R -e 'library(knitr) ; knit("test.Rmd")'
pandoc -s -f markdown -t latex test.md -o test.tex
pdflatex test.tex

次の出力を含む pdf ファイル (test.pdf) を生成します。

x <- 1

x

## [1] 1

ls()

## character(0)

つまり、最後のコード チャンクの出力は最初にxwhile の内容を表示しますが、ワークスペースでls()呼び出さxれたオブジェクトがあることは表示されません。cache最初のコード チャンクを削除して無効にすると、期待どおりにls()表示xされます。ls()ドキュメントから、 whenが使用されるこの動作の理由を理解できませんでしたopts_chunk$set(cache=TRUE)。なぜこれが起こるのか、ls()キャッシングの有無にかかわらずどうすれば同じように振る舞うことができるのか、誰かが私に説明できますか?

ありがとう!!

ロバート。ps:これが呼び出しsessionInfo()に追加されたときの私のものです:knit()

R version 2.15.1 (2012-06-22)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF8       LC_NUMERIC=C             
 [3] LC_TIME=en_US.UTF8        LC_COLLATE=en_US.UTF8    
 [5] LC_MONETARY=en_US.UTF8    LC_MESSAGES=en_US.UTF8   
 [7] LC_PAPER=C                LC_NAME=C                
 [9] LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_US.UTF8 LC_IDENTIFICATION=C      

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] knitr_1.1

loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.3 formatR_0.7    stringr_0.6.2  tools_2.15.1  
4

1 に答える 1

0

更新: この問題は、knitr 開発版で修正されました。以下の回答は無視して構いません。


これはバグと見なすことができます。何度か報道されて以来、私はこの問題について長い間考えてきました。次のバージョン (1.2) で対処します。

理由としてknitrは、別の空の環境を使用してコードを評価するためcache = TRUEであり、この環境の親フレームはデフォルトでグローバル環境であるため、xアクセス可能ですが、この空の環境には実際には存在しません。うまくいけば、以下のコードがそれをよりよく説明しています:

x = 1
env = new.env(parent = parent.frame())
ls(env)  # character(0), nothing there
exists('x', envir = env, inherits = FALSE) # FALSE
env$x  # NULL
get('x', envir = env)  # 1
于 2013-04-04T22:43:24.403 に答える