如何获取 R Shiny 中所有输出元素的列表

Posted

技术标签:

【中文标题】如何获取 R Shiny 中所有输出元素的列表【英文标题】:How to get list of all output elements in R Shiny 【发布时间】:2018-07-04 01:13:37 【问题描述】:

如何获取响应式输出元素的列表?

没有问题的工作是:observe(print(reactiveValuesToList(input)) )

由于我不明白的原因不起作用的是:observe( print(reactiveValuesToList(output)) )

对于一个大型复杂的应用程序,我正在编写一个智能代码,它在 A 部分将所有反应值和所有输入保存为 rds 文件和 saveRDS 我的reactivevalues 就是这样构建的; values <- reactivevalues()

B 部分使用 readRDS 加载所有这些值。反应性values$x 被重新分配,输入$x 通过例如updateTextinput(session, inputID, value) 更新,由于某些奇怪的原因,这也适用于selectInput 元素,但这与我面临的问题无关。

我的应用还包含renderUI 元素和renderText 元素

要更新这些元素,我需要设置选项:

outputOptions(output, x, suspendWhenHidden = FALSE)

其中x 是元素的名称。然而,我有几十个这样的元素,并且想将此 suspendWhenHidden 选项的设置应用于列表。但是,尝试获取outputs 的列表不起作用:

observe( print(reactiveValuesToList(output)) )

如何获取所有渲染元素/所有输出元素的列表?

一个演示应用程序,展示它如何用于输入,但不适用于输出元素

library(shiny) 

rm(list = ls(), envir = globalenv())              ## to prevent cross over from old runs

ui <- dashboardPage(
  dashboardHeader(title = "Dummy App"),
  dashboardSidebar(
    sidebarMenu(id = "tabs",
                menuItem("HOME", tabName = "Home", icon = icon("home")),
                menuItem("Page", tabName = "page1", icon = icon("pie-chart"))
    ) ),
  dashboardBody(
   tabItems(
      tabItem(tabName = 'Home', 
                              br(), 
                              h1("WELCOME TO THE TEST APP", style = 'text-align: center;' )

      ),
      tabItem(tabName = 'page1',
       fluidRow(
         uiOutput("BatchName")
    )))))



server <- function(input, output, session) 

output$BatchName <- renderUI( textInput(inputId ="BatchName", label = NULL , placeholder = "start") )


observe(print(reactiveValuesToList(input)) )
observe( print(reactiveValuesToList(output)) )

outputOptions(output, "BatchName", suspendWhenHidden = FALSE)  ## without this line updating elements on page 2 and higher doesn't work as they are suspenWhenHidden = True by default
updateTextInput(session, inputId = "BatchName", value = "Updated") 

    
shinyApp(ui, server)

【问题讨论】:

【参考方案1】:

查看?outputOptions 的文档,如果您不传递名称,您将获得所有可能输出选项的列表。然后您可以迭代该列表以设置您想要的所有属性。

outs <- outputOptions(output)
lapply(names(outs), function(name) 
  outputOptions(output, name, suspendWhenHidden = FALSE) 
)

【讨论】:

以上是关于如何获取 R Shiny 中所有输出元素的列表的主要内容,如果未能解决你的问题,请参考以下文章

从 SelectInput (R Shiny) 中的分组选项列表中获取组标签

如何通过 div 标签要求在 R Shiny 中输入?

如何使用 actionButton 更改 R Shiny 中 selectInput 上的选定值?

如何在 R Shiny 应用程序中嵌入清洁代码?

如何使用操作按钮在 R Shiny 中显示和隐藏表格输出?

如何使用具有多个输出的 R Shiny moduleServer