首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据闪亮的输入值显示或隐藏R flexdashboard组件?

如何根据闪亮的输入值显示或隐藏R flexdashboard组件?
EN

Stack Overflow用户
提问于 2021-08-12 01:03:37
回答 1查看 154关注 0票数 0

我想根据一个闪亮的输入值显示或隐藏一个R flexdashboard组件。为此,我尝试执行动态创建新的3级标记部分的代码。如果我运行下面的代码,我得到了预期的带有侧边栏和3个组件的文档-即,最终的代码块创建了"Section C“组件。

代码语言:javascript
复制
---
title: "Sample Flexdashboard"
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
runtime: shiny
---

```{r setup, include=FALSE}

库(Flexdashboard)

代码语言:javascript
复制
## Sidebar {.sidebar}
```{r}

radioButtons(

"select",

“显示或隐藏组件”,

选项= c("Show“= "show","Hide”= "hide"),

selected = "show“

)

代码语言:javascript
复制
## Column

### Section A

### Section B

```{r, results='asis'}

cat(paste0("\n",

代码语言:javascript
复制
       "### ",
代码语言:javascript
复制
       "Section C",
代码语言:javascript
复制
       "\n"))
代码语言:javascript
复制

但是,当我根据"select“输入值使用以下代码作为最后一个块来显示/隐藏C节时,它会将### Section C文本打印为B节中的代码,而不是使用该文本作为标记来创建一个新组件。

代码语言:javascript
复制
```{r, results='asis'}

renderPrint(

if (input$select ==“显示”){

代码语言:javascript
复制
cat(paste0("\n",
代码语言:javascript
复制
           "### ",
代码语言:javascript
复制
           "Section C",
代码语言:javascript
复制
           "\n"))
代码语言:javascript
复制
}

)

代码语言:javascript
复制

也许有比renderPrint更好用的函数?

EN

回答 1

Stack Overflow用户

发布于 2021-08-12 03:31:31

我的包目前与这个带有are :shiny的flexdashboard不兼容。因此,我无法测试这个解决方案,但它是基于以前的经验。

cat()返回一个文本字符串。这就是为什么它被解释为一个新的头。

当您将if语句放入一个节中时,块将返回最后一个为run...which的对象,即if语句,而不是cat语句。您可以通过在if语句完成后显式返回所需的对象来解决此问题。如果不想返回任何内容,可以将文本设置为NULL

代码语言:javascript
复制
```{r, results='asis'}

if (input$select ==“显示”){

sec3text <- cat(paste0("\n",

代码语言:javascript
复制
         "### ",
代码语言:javascript
复制
         "Section C",
代码语言:javascript
复制
         "\n"))

}否则{

sec3text <- NULL

}

sec3text

代码语言:javascript
复制

renderPrint()返回一个函数,该函数告诉shiny或flexdashboard在框中打印什么。因为它不是文本字符串“flex Section3”,所以###仪表板将其解释为要呈现的对象。您可以通过将renderPrint的结果赋给测试变量,然后查看结构来查看这一点。

代码语言:javascript
复制
> 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,而不是函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68750462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档