我想根据一个闪亮的输入值显示或隐藏一个R flexdashboard组件。为此,我尝试执行动态创建新的3级标记部分的代码。如果我运行下面的代码,我得到了预期的带有侧边栏和3个组件的文档-即,最终的代码块创建了"Section C“组件。
---
title: "Sample Flexdashboard"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r setup, include=FALSE}库(Flexdashboard)
## Sidebar {.sidebar}
```{r}radioButtons(
"select",
“显示或隐藏组件”,
选项= c("Show“= "show","Hide”= "hide"),
selected = "show“
)
## Column
### Section A
### Section B
```{r, results='asis'}cat(paste0("\n",
"### ", "Section C", "\n"))

但是,当我根据"select“输入值使用以下代码作为最后一个块来显示/隐藏C节时,它会将### Section C文本打印为B节中的代码,而不是使用该文本作为标记来创建一个新组件。
```{r, results='asis'}renderPrint(
if (input$select ==“显示”){
cat(paste0("\n", "### ", "Section C", "\n"))})

也许有比renderPrint更好用的函数?
发布于 2021-08-12 03:31:31
我的包目前与这个带有are :shiny的flexdashboard不兼容。因此,我无法测试这个解决方案,但它是基于以前的经验。
cat()返回一个文本字符串。这就是为什么它被解释为一个新的头。
当您将if语句放入一个节中时,块将返回最后一个为run...which的对象,即if语句,而不是cat语句。您可以通过在if语句完成后显式返回所需的对象来解决此问题。如果不想返回任何内容,可以将文本设置为NULL。
```{r, results='asis'}if (input$select ==“显示”){
sec3text <- cat(paste0("\n",
"### ", "Section C", "\n"))}否则{
sec3text <- NULL
}
sec3text
renderPrint()返回一个函数,该函数告诉shiny或flexdashboard在框中打印什么。因为它不是文本字符串“flex Section3”,所以###仪表板将其解释为要呈现的对象。您可以通过将renderPrint的结果赋给测试变量,然后查看结构来查看这一点。
> test <- shiny::renderPrint("Some print")
> str(test)
function (...)
- attr(*, "class")= chr [1:2] "shiny.render.function" "function"
- attr(*, "outputFunc")=function (outputId, placeholder = FALSE)
- attr(*, "outputArgs")= list()
- attr(*, "hasExecuted")=Classes 'Mutable', 'R6' <Mutable>
Public:
clone: function (deep = FALSE)
get: function ()
set: function (value)
Private:
value: FALSE
- attr(*, "cacheHint")=List of 2
..$ label : chr "renderPrint"
..$ origUserExpr: chr "Some print"因此,如果您希望RMD解释您的文本,您需要将其键入为YAML,而不是函数。
https://stackoverflow.com/questions/68750462
复制相似问题