【问题标题】:Dynamic UI in shiny: Can't print results from uiOutput created with renderUI闪亮的动态 UI:无法打印使用 renderUI 创建的 uiOutput 的结果
【发布时间】:2018-09-18 07:16:02
【问题描述】:

我在闪亮中使用 renderUI 根据用户的选择创建文本字段。然后用户填写字段,在下面的简化版本中,目标是显示结果。如何从 uiOutput 获取数据?

我认为这个问题的答案会有所帮助:How to get the value in uioutput in ui.R and send it back to server.R? 但它不适用于我的应用。

library(shiny)
ui <- fluidPage(
  tabsetPanel(
     tabPanel("data", fluid = TRUE,
         sidebarLayout(                                                                                     
           sidebarPanel(selectInput(inputId = "age2", label = "Select", choices = c("young", "old")), 
                        actionButton("goButton", "Go!"), 
                        uiOutput("variables")),
           mainPanel(verbatimTextOutput("print"))))
    )
  )
server <- function(input, output, session) {
  output$variables <- renderUI({
    switch(input$age2, 
           "young" = numericInput("this", "This", value = NULL),
           "old" = numericInput("that", "That", value = NULL)
    ) 
  })
  x <- eventReactive(input$goButton, {
  input$variables
  })
  output$print <- renderText({
    x()
  })
} 
shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    我在下面修改了您的代码,似乎符合您的情况。变化在于 numericInput() 对象分别被命名为“this”和“that”,并且您的 eventReactve() 对象正在侦听名为“variables”的对象。当值增加时,您的 numericInputs() 会发生变化,这就是响应式需要听的内容。我更改了名为“vars”和 eventReactive 的条件 numericInput() 对象,以类似地监听 input$vars

    library(shiny)
    ui <- fluidPage(
      tabsetPanel(
        tabPanel("data", fluid = TRUE,
                 sidebarLayout(                                                                                     
                   sidebarPanel(selectInput(inputId = "age2", label = "Select", choices = c("young", "old")), 
                                actionButton("goButton", "Go!"), 
                                uiOutput("variables")),
                   mainPanel(verbatimTextOutput("print"))))
      )
    )
    server <- function(input, output, session) {
      output$variables <- renderUI({
        switch(input$age2, 
               "young" = numericInput("vars", "This", value = NULL),
               "old" = numericInput("vars", "That", value = NULL)
        ) 
      })
      x <- eventReactive(input$goButton, {
        input$vars
    
      })
      output$print <- renderText({
        x()
      })
    } 
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 非常感谢 Soren 的工作。然而,在实际的应用程序中,每个选择都有多个数字输入:例如,"young" = list(numericInput("v1", "This", value = 0), numericInput("v2", "That", value = 0)), "old" = list(numericInput("v1", "The", value = 0), numericInput("v2", "Other", value = 0)) 我乐观地尝试了:"young" = vars &lt;- list(numericInput("v1", "This", value = 0), numericInput("v2", "That", value = 0)),,但显然这不起作用。我是否需要为每个数字输入创建一个单独的事件响应?
    • 我为每个有效的数字输入创建了一个响应事件。
    猜你喜欢
    • 2016-08-15
    • 2021-11-21
    • 2017-12-16
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多