1

私はフレックスダッシュボードを生成しようとしており、ループ内から各ページを作成し、生成された各ページに が含まれていますdygraph(ただし、HTML ウィジェットは同じように動作するはずです)。

私は広範囲に調べましたが、rmarkdownコメントは次を使用して生成できるようですcat("title")(ここでの解決策によると、for loop 内でマークダウンコメントを生成します)。

一方、HTML ウィジェットは、使用する場合にのみ適切に動作しますhtmltools::tagList()(ここでの解決策によると、for loop over dygraph は R では機能しません)。

共有する作業コードはありませんが、これは私が達成したいことの全体像を大まかに示しています。

for (i in 1:ncol(downloadedData)){
fund_NAVS <- downloadedData[,i] #this is an xts object
fund_NAVS <- fund_NAVS[!is.na(fund_NAVS)]
cat("pageTitle")
cat("===================================== \n")
cat("Row\n")
cat("------------------------------------- \n")
cat("### Page title")
dygraph(fund_NAVS)
}
4

2 に答える 2

2

r チャンクを明示的に構築し、それらをインラインで編成することで、コンテンツを自動生成することができましたr paste(knitr::knit(text = out))。この驚くべきコード行は、SO の投稿で見つかりました。

私の場合、一連のグラフを作成したいと考えていました。それぞれに別のタブがあり、内容が異なります。各グラフは似ていましたが、多数 (約 15) あり、すべての個別のチャンクをコピーして貼り付けたくありませんでした。

これは、より単純な例のダウンロードできる要点です。(コードも下にありますが、\各チャンクの前に追加して、単一のコード ブロックとしてレンダリングされるようにしたので、\実行前に削除することに注意してください。 ) グラフを作成するためのはるかに複雑な関数を作成しましたが、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')))`
于 2016-09-14T20:22:36.090 に答える