radioButtons和numericInput的组合用于值集

时间:2017-10-25 08:21:53

标签: r shiny

目前我正在使用radioButtons选择正在使用的值集。

radioButtons("set", "Select your set!",
                     list("Set 1" = "s1",
                          "Set 2" = "s2")

每组具有不同的值,例如“A”,“B”和“C”。

   Set Var Val
1  s1   A  35
2  s1   B  45
3  s1   C  99
4  s2   A  10
5  s2   B  20
6  s2   C  77

这对我来说很好。在我的输出中,我使用

subset(dat, Set==input$set))

这是我的问题: 我想添加第三个单选按钮,使您可以通过numericInput手动设置“A”,“B”和“C”的值。 此外,各个输入字段中的初始值应该从上次使用radioButtons选择的集合中更新。

1 个答案:

答案 0 :(得分:0)

以下是使用conditionalPanel的解决方案。基本上,我总是从numericInput读取所选值,但除非选择Set 3,否则输入将被隐藏。我使用稍微不同的逻辑来映射来自输入的值(我的data.frame映射是宽格式的,这似乎是更好的选择IMO)但除此之外,这应该适用于您的测试代码。

library(shiny)

ui <- fluidPage(
  inputPanel(radioButtons(
    "set", "select set", inline = TRUE, 
    list("Set 1" = "s1", "Set 2" = "s2", "Set 3" = "s3")
  )),
  conditionalPanel("input.set == 's3'", inputPanel(
    numericInput("A", "B", 50, 0, 100),
    numericInput("B", "B", 50, 0, 100),
    numericInput("C", "C", 50, 0, 100)
  )),
  verbatimTextOutput("text")
)

mapping <- data.frame(
  row.names = c("s1", "s2"), A = c(35, 10), B = c(45, 20), C = c(99, 77)
)

server <- function(input, output, session){      
  observeEvent(input$set, {
    req(input$set != "s3")
    for(id in c("A", "B", "C"))
      updateNumericInput(session, id, value = mapping[input$set, id])
  })
  output$text <- renderText({paste(input$A, input$B, input$C)})
}

shinyApp(ui, server)

您也可以使用renderUI,但conditionalPanel是此任务的最佳选择。