2

当我尝试在 slidify 中添加(data.table/ggplot2)代码时,出现错误。这是我在 slidify 中的代码:

## data.table
```{r}
library(data.table)
DT = data.table(x = 1:5, y=6:10)
setkey(DT, x)
DT[J(1)] # Error: No J function
```
---
## ggplot2
```{r}
library(ggplot2)
a = b = shape = 1:5
ggplot(data=DT, aes(a, b, col=shape)) + geom_point() # Error: can not find object a
```

所有代码都可以在 slidify 之外运行,所以我猜想 slidify 的变量命名空间有问题。

我还找到了这个链接:data.table error when used through knitr, gWidgetsWWW这可能与我的问题类似,但仍然不知道如何解决。

4

1 回答 1

0

只是为了添加一个答案以跟进对该问题的评论。data.table 的开发版本修复了它,现在在 CRAN 上(data.table v1.9.4)。但这kable()在 knitr 中出现了问题,由 knitr v1.7(也在 CRAN 上)修复。

所以基本上,升级到最新的 CRAN 版本的 knitr 和 data.table,你应该没问题。如果没有,请告诉我们。


更多细节为好奇...

我在 v1.9.5 中对 data.table 进行了另一项更改,以使其对于评估用户代码(如 knitr、slidify 和 gWidgetsWWW)但不了解 data.table 本身的包更加健壮。这样他们以后就不需要知道了。这是项目:

knitr::kable() 无需从 knitr v1.6 升级到 v1.7 即可再次工作。评估用户代码并且不希望导入 data.table 的包需要添加到 data.table:::cedta.pkgEvalsUserCode 并且现在只有 eval 部分是 data.table-aware (此类包的其余代码是离开data.table-不知道)。data.table:::cedta.override 现在是空的,如果不需要它会被弃用。

这是 v1.9.4 中的项目,它在 knitr v1.6 和 knitr v1.7 修复中有点过于夸张并破坏了 knitr::kable (但不应该需要):

在 data.table 白名单中添加了闪亮、rmarkdown 和 knitr。将用户代码作为输入并在自己的环境中运行的包(因此自己不依赖或导入 data.table)要么需要在此处添加,要么可以在其命名空间中定义变量 .datatable.aware <- TRUE,这样 data.table 可以在这些包中正常工作。用户也可以使用 assignInNamespace() 自己添加到 data.table 的白名单中,但上游的这些添加消除了对这些包执行此操作的需要。

于 2014-10-20T18:26:43.977 回答