私はr paste(knitr::knit(text = out))
でインラインそれらをknitingその後、明示的にRチャンクを構築することにより、コンテンツを自動生成することができました。この驚くべきコード行はSO postにあります。
私のケースでは、別々のタブで、内容の異なる一連のグラフを作成したかったのです。それぞれのグラフは似ていましたが、数が多く(約15)、別々のチャンクをすべてコピー/ペーストしたくありませんでした。より簡単な例の
Here is a gist you can downloadです。 (以下のコードもありますが、各チャンクの前に\
を追加して、1つのコードブロックとしてレンダリングするので、実行前に\
を削除してください))グラフを作成するのにもっと複雑な関数を構築しました。 Rチャンクは要素としてhtmlwidgetsを含む任意のリストオブジェクトに転送することができます。
---
title: "Loop to Auto Build Tabs Containing htmlwidgets"
output: flexdashboard::flex_dashboard
---
\```{r setup, echo =FALSE, eval = TRUE}
library(tidyverse)
library(flexdashboard)
library(highcharter)
labels <- mtcars %>% names # these will serve as labels for each tab
# create a bunch of random, nonsensical line graphs
hcs <- purrr::map(.x = mtcars, ~highcharter::hchart(mtcars, y = .x, type = 'line')) %>%
setNames(labels) # assign names to each element to use later as tab titles
\```
Page
====================
Column {.tabset .tabset-fade}
-----------------------------
<!-- loop to build each tabs (in flexdashboard syntax) -->
<!-- each element of the list object `out` is a single tab written in rmarkdown -->
<!-- you can see this running the next chunk and typing `cat(out[[1]])` -->
\```{r, echo = FALSE, eval = TRUE}
out <- lapply(seq_along(hcs), function(i) {
a1 <- knitr::knit_expand(text = sprintf("### %s\n", names(hcs)[i])) # tab header, auto extracts names of `hcs`
a2 <- knitr::knit_expand(text = "\n```{r}") # start r chunk
a3 <- knitr::knit_expand(text = sprintf("\nhcs[[%d]]", i)) # extract graphs by "writing" out `hcs[[1]]`, `hcs[[2]]` etc. to be rendered later
a4 <- knitr::knit_expand(text = "\n```\n") # end r chunk
paste(a1, a2, a3, a4, collapse = '\n') # collapse together all lines with newline separator
})
\```
<!-- As I mentioned in the SO post, I don't quite understand why it has to be -->
<!-- 'r paste(knitr::knit(...)' vs just 'r knitr::knit(...)' but hey, it works -->
`r paste(knitr::knit(text = paste(out, collapse = '\n')))`
これは現在可能ではないようです(https://github.com/rstudio/flexdashboard/issues/80を参照)。 – user338714
私は何か作業をすることができました。私は上記のgithubの議論に応えたが、私の答えはここに再投稿する。 –