rCharts和DT是否兼容rmarkdown?

时间:2015-05-13 10:55:58

标签: r r-markdown rcharts

我正在尝试使用rmarkdown创建一个文档,其中包括来自rCharts包的图和使用htmlwidgets中包含的DT库的数据表。 出于某种原因,我无法一起显示它们。

---
title: "Untitled"
output: html_document
---

```{r, echo=FALSE}
library(DT)
library(rCharts)

df<-data.frame(Name=c("a","Z","h","k","j"),Value=(sample(10^7,5)))

datatable(df, filter = 'top', options = list(
  pageLength = 10,iDisplaylength=10, autoWidth = TRUE
))
```

```{r, message=FALSE, echo=FALSE, results='asis'}
df<-data.frame(label=c("One","Two","Three"),valuea=c(1,2,3),
               othera=c(10,11,12),stringsAsFactors = FALSE)
p1 <- nPlot(valuea~ label, data = df, type = 'pieChart')

#Different options I tried

p1$print('inline', include_assets = TRUE, cdn = FALSE)
#p1$show('inline', include_assets = TRUE, cdn = FALSE)

#p1$print('inline', include_assets = TRUE)
#p1$show('inline', include_assets = TRUE)

#These provide an error
#p1$print('inline', include_assets = TRUE, cdn = TRUE)
#p1$show('inline', include_assets = TRUE, cdn = TRUE)

```

注释的行是我尝试过的东西。

注意I:如果注释p1$print('inline', include_assets = TRUE, cdn = FALSE),则数据表正确显示。

注意二:我知道p1 $ save()函数与iframe结合,但是,我想使用内联图表。

1 个答案:

答案 0 :(得分:7)

jQuery库包含在页面顶部,当您include_assets中的print时,它会再次包含在内,从而导致问题。

要解决此问题,您可以尝试将include_assets设置为false并手动添加除jQuery之外的所需库。

 p1 <- nPlot(valuea~ label, data = df, type = 'pieChart')
    cat("<link rel='stylesheet' href=.../R/3.1/library/rCharts/libraries/nvd3/css/nv.d3.css>
    <link rel='stylesheet' href=.../R/3.1/library/rCharts/libraries/nvd3/css/rNVD3.css>
    <script type='text/javascript' src=.../R/3.1/library/rCharts/libraries/nvd3/js/d3.v3.min.js></script>
    <script type='text/javascript' src=.../R/3.1/library/rCharts/libraries/nvd3/js/nv.d3.min-new.js></script>
    <script type='text/javascript' src=.../R/3.1/library/rCharts/libraries/nvd3/js/fisheye.js></script> ")
    p1$print('inline', include_assets = F, cdn = FALSE)

您可以通过在R中运行p1$print('inline', include_assets = T, cdn = FALSE)找到所需的库和链接,它们将是第一行输出。 src路径是绝对的,因此我在上面的代码中用...替换了部分路径。