Это связано с духом с этим вопросом, но должно быть различным в механизме.
Если вы попытаетесь кэшировать фрагмент 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.
Выход во втором запуске