【问题标题】:Hide shiny output隐藏闪亮的输出
【发布时间】:2015-08-17 02:23:58
【问题描述】:

如何隐藏渲染的shiny 输出?具体来说,我有一些由shiny 生成的图形/表格,并且我有一个按钮,单击该按钮时应隐藏图形/表格,再次单击时应显示它们。

这是我目前所拥有的(如下),它在一定程度上起作用,但是它应该隐藏renderPlot 输出的地方,我试图让文档中的一个很大的空白消失。

应该可以将此代码复制并粘贴到 Rstudio 并点击运行文档(它是带有闪亮运行时的 rmarkdown)。

---
runtime: shiny
---

```{r, echo=F}
actionButton("hide", "Hide")
dat <- data.frame(a=1:10, b=rexp(10, 1/10), c=letters[sample(1:24, 10)])
renderTable({
    if (input$hide %% 2 == 1)
        dat
})

```
lodi dodi

```{r, echo=F}
renderPlot({
    if (input$hide %% 2 == 1)
        plot(b ~ a, data=dat)
})

```
this text is separated by blank space, but it shouldn't be

【问题讨论】:

  • 它必须在rmarkdown,它不能只是一个闪亮的应用程序?如果它是一个闪亮的应用程序,我可以向您展示一个单词的解决方案,但我不知道如何在 rmarkdown 中做到这一点
  • @daattali 无论哪种方式都很好(希望如此),大多数东西都是可以互换的,我查看了你的包,但无法提出解决方案
  • 嗯,我的解决方案在 rmarkdowns 中不起作用,这就是我问的原因
  • @daattali 太可惜了,但我仍然有兴趣看到常规闪亮的解决方案,甚至只是适当函数的名称
  • 好的,我意识到你可以在 rmarkdown 中包含一个普通的闪亮应用程序,所以 np

标签: r shiny r-markdown


【解决方案1】:

您可以使用shinyjs 包通过hide() 函数隐藏元素(或使用toggle() 函数在隐藏和显示之间切换)。免责声明:我写了那个包。

我以前从未在 rmarkdown 中使用过它,所以我将展示如何在普通的闪亮应用程序中使用它,并使用 shinyApp() 函数在 rmarkdown 中包含一个完整的闪亮应用程序。您可以阅读here,了解如何在 rmarkdown 文档中包含闪亮的应用程序。

---
runtime: shiny
---

```{r, echo=F}
suppressPackageStartupMessages(
  library(shinyjs)
)

dat <- data.frame(a=1:10, b=rexp(10, 1/10), c=letters[sample(1:24, 10)])

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    actionButton("hide", "Hide"),
    p("Text above plot"),
    plotOutput("plot"),
    p("Text below plot")
  ),
  server = function(input, output, session) {
    output$plot <- renderPlot({
      plot(b ~ a, data=dat)
    })

    observeEvent(input$hide, {
      hide("plot")
      # toggle("plot") if you want to alternate between hiding and showing
    })
  },
  options = list(height = 700)
)
```

为了能够使用 hide,我必须:

  • 安装并加载shinyjs
  • 在 UI 中添加对 useShinyjs() 的调用
  • 在要隐藏/显示的元素上调用 hidetoggle

希望对你有帮助

【讨论】:

  • 这真的很酷,它完全符合我的要求。非常感谢!能够在不将其包装在所有额外代码中的情况下使用它会很好(即shinyApp(...)。这绝对不适用于toggle
  • shinyjs 中的任何函数都需要调用 useShinyjs 来初始化所需的 JavaScript。在开发它时,我从来没有真正考虑过 rmarkdown,我只考虑了闪亮的应用程序。我不太了解/知道闪亮和 rmarkdown 如何一起玩,所以我不知道如何更改函数以便能够在 rmarkdown 中使用,抱歉:/
  • @DeanAttali 感谢您的出色工作。要在 Rmd 文档中创建隐藏/显示按钮,您可以在代码块周围加上以下内容:
    {r} #stuff in block
  • Rmd 和其他一些解决方案都在这个 SO 问题中:stackoverflow.com/questions/42630248/…
  • @MattL。如果你的 rmd 文件使用了闪亮的引擎来包含闪亮的组件,那么你可以使用 shinyjs deanattali.com/shinyjs/advanced#usage-interactive
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多