当我尝试在slidify中添加(data.table/ggplot2)代码时,我得到了错误。下面是我在slidify中的代码:
## data.table
```{r}库(data.table)
DT = data.table(x = 1:5,y=6:10)
setkey(DT,x)
DTJ(1) #错误:没有J函数
---
## ggplot2
```{r}库(Ggplot2)
A=b=形状= 1:5
ggplot(data=DT,aes(a,b,col=shape)) + geom_point() #错误:找不到对象a
所有的代码都可以在slidify之外运行,所以我猜slidify的变量命名空间有问题。
我还找到了这个链接:data.table error when used through knitr, gWidgetsWWW,它可能与我的问题类似,但仍然不知道如何修复。
发布于 2014-10-21 02:26:44
只是为了添加一个答案来跟进对这个问题的评论。data.table的开发版本修复了这个问题,现在在CRAN (data.table v1.9.4)上。但这破坏了kable()在knitr v1.7 (在CRAN上也是)修复。
因此,基本上,升级到最新的CRAN版本的knitr和data.table,你应该会很好。如果没有,请告诉我们。
更多细节给好奇的人...
我在v1.9.5中对data.table做了另一个更改,使其对于评估用户代码的包(如code、slidify和gWidgetsWWW)更加健壮,但对data.table本身并不了解。这样他们以后就不需要知道了。下面是这一项:
无需从
v1.6升级到v1.7,kable()就可以再次工作。评估用户代码并且不希望导入data.table的包需要添加到data.table:::cedta.pkgEvalsUserCode中,现在只有eval部分是data.table感知的(包的其余代码是data.table感知的)。data.table:::cedta.override现在是空的,如果不需要它,它将被弃用。
这里是v1.9.4中的项目,它有点太过了,并且破坏了netrv1.6和netrv1.7修复中的kable::kable(但不需要这样做):
在data.table白名单中添加了shiny、rmarkdown和knitr。将用户代码作为输入并在自己的环境中运行的包(因此不依赖或导入data.table本身)需要在此处添加,或者它们可以在其名称空间中定义一个变量.datatable.aware <- TRUE,以便data.table可以在这些包中正常工作。用户也可以使用assignInNamespace()自己添加到data.table的白名单中,但是上游的这些添加消除了对这些包执行此操作的需要。
https://stackoverflow.com/questions/25812961
复制相似问题