rCharts 和 DT 在 rmarkdown 中兼容吗?
Are rCharts and DT compatible in rmarkdown?
我正在尝试使用 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)
```
注释行是我尝试过的东西。
注一:如果p1$print('inline', include_assets = TRUE, cdn = FALSE)
被注释,则数据表显示正确。
注二:我知道 p1$save() 函数与 iframe 结合使用,但是,我想使用内联图表。
jQuery 库包含在页面顶部,当您 include_assets
在 print
中时,它会再次包含,这会导致问题。
要解决此问题,您可以尝试将 include_assets
设置为 false 并添加除 jQuery "by hand".
之外的所需库
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
路径是绝对路径,所以我在上面的代码中用 ...
替换了其中的一些路径。
我正在尝试使用 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)
```
注释行是我尝试过的东西。
注一:如果p1$print('inline', include_assets = TRUE, cdn = FALSE)
被注释,则数据表显示正确。
注二:我知道 p1$save() 函数与 iframe 结合使用,但是,我想使用内联图表。
jQuery 库包含在页面顶部,当您 include_assets
在 print
中时,它会再次包含,这会导致问题。
要解决此问题,您可以尝试将 include_assets
设置为 false 并添加除 jQuery "by hand".
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
路径是绝对路径,所以我在上面的代码中用 ...
替换了其中的一些路径。