R Shiny:使radiobuttons影响其他输入

时间:2017-10-12 09:15:51

标签: r shiny

我正在制作一些我闪亮的东西,我想知道是否有可能让radiobuttons决定另一个输入。

复制我的问题的玩具示例由:

if (interactive()) {
  ui <- fluidPage(
    radioButtons("dist", "Distribution type:",
                 c("Normal" = "norm",
                   "Uniform" = "unif")),
     textInput(inputId = "textid", label = "Text input-header", value = "rnorm"),
    plotOutput("distPlot")
  )

  server <- function(input, output) {
    df <- reactive({
      switch(input$textid, 
             rnorm = {rnorm(500)},
             uni = {runif(500)}, 
             exp = {rexp(500)},
      )})

    output$distPlot <- renderPlot(hist(df())
    )
  }

  shinyApp(ui, server)
}

就像现在一样,文本框中的输入决定了用于生成数据的分布类型。我想要的是,当单击其中一个单选按钮,然后在文本框中更新文本(例如,如果&#34; Uniform&#34;被检查,那么textunput将更新为&#34; uni& #34; - 从而使用此分布)。问题是我需要这个盒子,因为我希望能够在单选按钮中选择一些不是选项的东西(所以它对我来说只是添加额外的单选按钮不起作用)。在这种情况下,额外的选项是,可以写&#34; exp&#34;在文本输入中(无法从单选按钮中选择此分布)。

在这个例子中看起来有点愚蠢,但在我的情况下,我有2个经常使用的时间戳,但应用程序必须允许用户选择每个可能的日期。

这有可能吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

这样的东西?请注意,我添加了req,您的文字输入需要"rnorm","uni","exp"

library(shiny)
if (interactive()) {
  ui <- fluidPage(
    radioButtons("dist", "Distribution type:",c("Normal" = "rnorm","Uniform" = "uni","Exponential" = "exp")),
    textInput(inputId = "textid", label = "Text input-header", value = "rnorm"),
    plotOutput("distPlot")
  )

  server <- function(input, output,session) {

    observeEvent(input$dist,{
      updateTextInput(session, "textid",label = "Text input-header",value = input$dist)

    })

    df <- eventReactive(input$textid,{
      req(input$textid %in%c("rnorm","uni","exp"))
      switch(input$textid, rnorm = {rnorm(500)},uni = {runif(500)}, exp = {rexp(500)},
      )})
    output$distPlot <- renderPlot(hist(df()))
  }
  shinyApp(ui, server)
}