以下简单的test.Rmd knitr文件
```{r}
opts_chunk$set(cache=TRUE)
```
```{r}
x <- 1
```
```{r}
x
ls()
```
从Unix shell处理时使用:
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)
也就是说,最后一个代码块的输出首先显示x
的内容,而ls()
调用未显示工作区中有一个名为x
的对象。如果我通过删除第一个代码块来禁用cache
,那么ls()
会按照我的预期显示x
。我无法从文档中找出ls()
使用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
答案 0 :(得分:0)
更新:此问题已在knitr development version中修复。下面的答案可以忽略不计。
您可以将此视为错误。我已经在这个问题上思考了很长时间,因为它已被报道过几次。我将在下一个版本(1.2)中解决它。
至于原因,这是因为knitr
在cache = TRUE
时使用单独的空环境来评估代码,并且默认情况下此环境的父框架是全局环境,因此{{1是可访问的,但在这个空的环境中并不存在。希望下面的代码能更好地解释它:
x