微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式生成的Rmarkdown中“打印” HTML小部件

如何解决以编程方式生成的Rmarkdown中“打印” HTML小部件

我正在尝试以编程方式生成一些Rmarkdown,并且其中一部分包含一个HTML小部件。如果它们在我的函数中的最后位置,这些输出就很好。但是,如果我将它们包装在print中,则可以像在作图时一样在它们之后放置其他内容,它们不会产生任何输出

我不确定这与knitr处理打印的方式有关。但是有人知道我如何使HTML小部件的行为像在程序生成的Rmarkdown中的情节一样吗?

示例.Rmd

---
title: "R Notebook"
output:
  html_document:
    df_print: paged
---

```{r}
ex_plot <- ggplot2::ggplot(iris,ggplot2::aes(Sepal.Length,Sepal.Width)) + 
    ggplot2::geom_point()

gen_rmarkdown_widget_last <- function() {
    cat("# Head 1\n\n")
    DT::datatable(iris)
}

gen_rmarkdown_plots <- function() {
    cat("# Head 1\n\n")
    print(ex_plot)
    cat("# Head 2\n\n")
}

gen_rmarkdown_widgets <- function() {
    cat("# Head 1\n\n")
    print(DT::datatable(iris))

    # tried loading from file
    # tmp <- tempfile()
    # htmlwidgets::saveWidget(DT::datatable(iris),tmp)
    # knitr::include_url(tmp)
    
    # tried a different widget
    # print(plotly::ggplotly(ex_plot))

    cat("# Head 2\n\n")
}

```

```{r,results='asis'}
# works fine
gen_rmarkdown_widget_last()
```

```{r,results='asis'}
# works fine
gen_rmarkdown_plots()
```

```{r,results='asis'}
# Can't have an HTML widget if it is followed by other things
gen_rmarkdown_widgets()
```

解决方法

已经here讨论了该问题。

通过以下方式手动添加依赖项:

data.frame() %>%
  DT::datatable() %>%
  knitr::knit_print() %>%
  attr('knit_meta') %>%
  knitr::knit_meta_add() %>%
  invisible()

在您提供的示例中:

---
title: "R Notebook"
output:
  html_document:
    df_print: paged
---

```{r}
library(dplyr)
#load dependencies
data.frame() %>%
  DT::datatable() %>%
  knitr::knit_print() %>%
  attr('knit_meta') %>%
  knitr::knit_meta_add() %>%
  invisible()

ex_plot <- ggplot2::ggplot(iris,ggplot2::aes(Sepal.Length,Sepal.Width)) + 
    ggplot2::geom_point()



gen_rmarkdown_widget_last <- function() {
    cat("# Head 1\n\n")
    DT::datatable(iris)
}

gen_rmarkdown_plots <- function() {
    cat("# Head 1\n\n")
    print(ex_plot)
    cat("# Head 2\n\n")
}

gen_rmarkdown_widgets <- function() {
    cat("# Head 1\n\n")
    cat(knitr::knit_print(DT::datatable(iris)))
    cat("\n  \n")
    cat("# Head 2\n\n")
}

```


```{r,results='asis'}
gen_rmarkdown_widgets()
```

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?