“ls()”的不同行为取决于knitr Rmd文档中的cache=T或cache=F
下面是简单的test.Rmd knitr文档“ls()”的不同行为取决于knitr Rmd文档中的cache=T或cache=F,r,knitr,R,Knitr,下面是简单的test.Rmd knitr文档 ```{r} opts_chunk$set(cache=TRUE) ``` ```{r} x <- 1 ``` ```{r} x ls() ``` 生成具有以下输出的pdf文件test.pdf: x <- 1 x ## [1] 1 ls() ## character(0) 更新:此问题已在中修复。下面的答案可以忽略 你可以认为这是一个错误。自从有几次报道以来,我一直在思考这个问题。我将在下一个版本1.2中解决这个问题 至于
```{r}
opts_chunk$set(cache=TRUE)
```
```{r}
x <- 1
```
```{r}
x
ls()
```
生成具有以下输出的pdf文件test.pdf:
x <- 1
x
## [1] 1
ls()
## character(0)
更新:此问题已在中修复。下面的答案可以忽略 <>你可以认为这是一个错误。自从有几次报道以来,我一直在思考这个问题。我将在下一个版本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
谢谢你的解释和代码。我担心我不了解knitr的工作原理。我期待更新的版本。@robertc新版本现在正在CRAN上。仅供参考:此问题已在中修复。
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
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