2 个输入选择器值的平均值未针对第二个选择器输入更新,Shiny

Average of 2 input selector values not updating for the second picker input, Shiny

我有两个选择器输入选择器,每个都有 4 个标签(低、中、大、非常大)附加到一个值 (1,2,3,4)。 用户做出 his/her 选择后,我想显示总体平均值。 出于某种原因,我的代码计算平均输入没有问题,但它根本不考虑第二个选择器。我是不是漏掉了一个括号?

理想情况下,我想为平均值显示相应的标签名称,但这是次要的。 这是一个可重现的例子。非常感谢!

'''
if (interactive()) {
  
  library(shiny)
  library(shinyWidgets)
  
  ui <- fluidPage(

    pickerInput(
      inputId = "groups_2",
      label = "Select two from each group below:",
      choices = c("Low" = "1", "Medium" = "2","Large" = "3", "Very Large" = "4"),
      multiple = TRUE,
      options =  list("max-options-group" = 2)
    ),
    verbatimTextOutput(outputId = "res_grp_2"),
    pickerInput(
      inputId = "classic",
      label = "Select max two option below:",
      choices = c("Low" = "1", "Medium" = "2","Large" = "3", "Very Large" = "4"),
      multiple = TRUE,
      options =  list(
        "max-options" = 2,
        "max-options-text" = "No more!"
      )
    ),
    verbatimTextOutput(outputId = "res_classic"),
    textOutput(outputId = "avg")
  )
  
  server <- function(input, output) {
    
    output$res_grp_2 <- renderPrint(input$groups_2)
    output$res_classic <- renderPrint(input$classic)
    avg<-reactive(mean(as.numeric(input$groups_2, input$classic)))
    output$avg<-renderText(avg())
    
  }
  
  shinyApp(ui, server)
  
}

'''

由于您可以在每个 pickerInput 中选择不同数量的元素,因此最好计算您自己的平均值。一种方法如下所示。

library(shiny)
library(shinyWidgets)

ui <- fluidPage(

  pickerInput(
    inputId = "groups_2",
    label = "Select two from each group below:",
    choices = c("Low" = "1", "Medium" = "2","Large" = "3", "Very Large" = "4"),
    multiple = TRUE,
    options =  list("max-options" = 2)
  ),
  verbatimTextOutput(outputId = "res_grp_2"),
  pickerInput(
    inputId = "classic",
    label = "Select max two option below:",
    choices = c("Low" = "1", "Medium" = "2","Large" = "3", "Very Large" = "4"),
    multiple = TRUE,
    options =  list(
      "max-options" = 2,
      "max-options-text" = "No more!"
    )
  ),
  verbatimTextOutput(outputId = "res_classic"),
  textOutput(outputId = "avg")
)

server <- function(input, output) {

  output$res_grp_2 <- renderPrint(input$groups_2)
  output$res_classic <- renderPrint(input$classic)
  avg  <-  reactive({
    req(input$classic,input$groups_2)
    numr <- sum(sum(as.numeric(input$groups_2)), sum(as.numeric(input$classic)))
    denom <- sum(length(input$groups_2),length(input$classic))
    avg <- numr/denom
  })
  output$avg<-renderText(avg())
}

shinyApp(ui, server)