这在精神上与这个问题有关,但在机制上必须不同。
如果您尝试缓存knitr
包含分配的块,data.table
:=
那么它的行为就好像该块尚未运行,并且以后的块看不到:=
.
知道这是为什么吗?检测对象是如何knitr
更新的,是data.table
什么让它感到困惑?
看来你可以通过做来解决这个问题DT = DT[, LHS:=RHS]
。
示例:
```{r}
library(data.table)
```
Data.Table Markdown
========================================================
Suppose we make a `data.table` in **R Markdown**
```{r, cache=TRUE}
DT = data.table(a = rnorm(10))
```
Then add a column using `:=`
```{r, cache=TRUE}
DT[, c:=5]
```
Then we display that in a non-cached block
```{r, cache=FALSE}
DT
```
The first time you run this, the above will show a `c` column,
from the second time onwards it will not.
第二次运行输出