我正在尝试以编程方式生成一些 Rmarkdown,其中一个部分包含一个 HTML 小部件。如果它们在我的函数中位于最后,那么它们的输出就很好。但是,如果我将它们包装在 a 中,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 …Run Code Online (Sandbox Code Playgroud) 我找到了几个例子(如何使用 R 提取 SQL 文件的内容, 使用循环在 rmarkdown 中生成文本部分,使用 R在 Rmarkdown中 自动生成预格式化文本),但在我的情况下没有一个适用于嵌套部分,包括数字. 预期输出:
看来,我需要某种方法来处理包含的代码块(例如cat("```{r, fig.width=8.4, fig.height=7}\n") ... cat("```\n")正确处理,但我找不到方法。
编辑:我在这里找到了这个,但仍然无法使它工作
kexpand <- function(chunkname, fig.width, fig.height) {
cat(knitr::knit(text = knitr::knit_expand(text =
sprintf("```{r %s, fig.width=%s, fig.height=%s}\n.chunk_code\n",
chunkname, fig.width, fig.height))))
}
Run Code Online (Sandbox Code Playgroud)
然后在块中:
.chunk_code <- leaflet() %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap, group = "OSM") %>%
addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite") %>%
addLayersControl(baseGroups = c("OSM", "Toner Lite")) %>%
addCircleMarkers(lat = 47, lng = 9, popup = ranges[i]) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的rmd内部创建动态数量的选项卡,其中包含一些内容。
这个没用。
像这样的东西:
---
title: "1"
output: html_document
---
```{r }
library(highcharter)
library(tidyverse)
iris %>%
dplyr::group_split(Species) %>%
purrr::map(.,~{
# create tabset for each group
..1 %>%
hchart("scatter", hcaes(x = Sepal.Length, y = Sepal.Width))
})
```
Run Code Online (Sandbox Code Playgroud)