当我尝试在slitify中添加(data.table/ggplot2)代码时,我遇到了错误。这是我在slitify中的代码:
## 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
```
所有的代码都可以在slitify之外运行,所以我想slitify的变量名称空间有问题。
我还发现了这个链接:通过knitr、gWidgetsWWW使用时出现data.table错误,这可能与我的问题类似,但仍然不知道如何修复。
只是添加一个答案来跟进对问题的评论。data.table的开发版本修复了它,现在在CRAN上(data.table v1.9.4)。但这破坏了knitr v1.7(也在CRAN)修复的knitr中的kable()
。
所以,基本上,升级到最新的CRAN版本的knifer和data.table,你应该会没事的。如果没有,请告诉我们。
为好奇的人提供更多细节。。。
我在v1.9.5中对data.table进行了另一次更改,使其对于那些评估用户代码(如knitr、slitify和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中的一个项目,它有点过于夸张,破坏了编织器::在编织器v1.6和编织器v1.7修复程序中可行(但不应该需要):
在data.table白名单中添加了闪亮、rmarkdown和knifer。将用户代码作为输入并在自己的环境中运行的包(因此不依赖或导入data.table本身)要么需要添加到此处,要么可以定义变量。datatable.aware<-TRUE,这样data.table就可以在这些包中正确工作。用户也可以使用assignInNamespace()自己添加到data.table的白名单中,但这些上游添加消除了对这些包进行添加的必要性。