r - 根据 Shiny R 的输入显示或隐藏 R Markdown 文本

标签 r shiny r-markdown

我开发了一个 Shiny 的应用程序,其中包含一些部分:A、B、C 和 D。在每个部分中,用户都可以制作一些情节。 Shiny App 有一个额外的部分,允许用户在整个 downloadHandler 函数中以 html 格式下载每个部分中完成的所有绘图。因此,用户点击“下载”按钮,就会生成一个包含用户已完成绘图的 html。

这是通过另一个文件完成的,一个 R markdown 文件,它接收 shiny 应用程序的输入。在 R markdown 中,每个图后面都有一些 block 外的文本。

所以 R markdown 的结构是这样的:

A 部分

(A节剧情,来自一个chunk)
(A段的文字,在 block 外)

B 部分

(B节剧情,来自一个chunk)
(B段的文字,在 block 外)

C 部分

(C段剧情,来自一个chunk)
(C段的文字,在 block 外)

D 部分

(D段剧情,来自一个chunk)
(D段的文字,在 block 外)

但是如果用户对 B 部分不感兴趣怎么办?如果在 Shiny 的应用程序中用户决定不选择任何输入来制作情节怎么办?在这种情况下,当点击 shiny 应用程序中的下载按钮时,会产生错误并且不会产生 HTML 输出。

所以问题来了:有没有办法让用户选择(例如使用 checkboxInput)哪些部分要出现在 HTML 输出中?因此,如果用户选中 A 和 C,生成的 HTML 将是:

A 部分

(A节剧情,来自一个chunk)
(A段的文字,在 block 外)

C 部分

(C段剧情,来自一个chunk)
(C段的文字,在 block 外)

当然,我猜 R markdown 文件中需要一些代码,某种 ifelse 语句来显示或隐藏部分。我知道如何为 block 代码做这件事,使用 R 语言很容易,但是文本呢?标题“第 X 节”和该节的文本怎么样?如何在 checkboxInput 的功能中动态包含或排除?

最佳答案

实现所需结果的一种方法是通过代码块添加文本,例如cat 和 block 选项 results='axis'。在这种情况下,您可以使用参数化报告,并根据参数动态包含所需的文本:


    ---
    title: "Untitled"
    output: html_document
    params:
      section: !r c("SectionA")
    ---
    
    ```{r setup, include=FALSE}
    knitr::opts_chunk$set(echo = FALSE)
    ```
    
    ```{r include="SectionA" %in% params$section, results='asis'}
    cat("## Section A",
                 "Lorem Ipsum",
                 sep = "\n")
    ```
    
    ```{r include="SectionB" %in% params$section, results='asis'}
    cat("## Section B",
                 "Lorem Ipsum",
                 sep = "\n")
    ```
    
    ```{r include="SectionC" %in% params$section, results='asis'}
    cat("## Section C",
                 "Lorem Ipsum",
                 sep = "\n")
    ```

然后在您 Shiny 的应用程序中渲染 Rmd 文件,如下所示:

rmarkdown::render("test.Rmd", params = list(section = c("SectionA", "SectionC"))

enter image description here

关于r - 根据 Shiny R 的输入显示或隐藏 R Markdown 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68128674/

相关文章:

r - 如何在 R 的 GA 包中的遗传算法函数中将变量设置为整数

r - 如何根据 Shiny 的输入选择对数据框进行子集化并使用传单进行绘图

r - 如何在 Shiny R 中动态更改传单 map 的大小?

r - 在具有 bookdown 的子文档中包含自定义代码块

r - RStudio presentations/slidify/pandoc 中的两列布局

r - R中magrittr和arima的兼容性问题

r - 使用 shinyBS 时,字符串中的单引号将 sliderInput 转换为 numericInput

r - 如何在 R Markdown 中将选项传递给 LaTeX 字体?

r - 一个 R Shiny 问题 - 在一张图上绘制多条线

Rmarkdown 重叠输出