2017-10-12 62 views
0

我正在做一些事情我很有兴趣并且想知道是否有可能让单选按钮决定另一个输入。R Shiny:使单选按钮影响其他输入

会复制我的问题,一种玩具,例如由下式给出:

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) 
} 

因为它是现在,它是在决定什么样的分布,用来生成数据的文本框中输入。我想要的是,当点击其中一个单选按钮时,文本会在文本框中更新(例如,如果选中“Uniform”,那么textunput将更新为“uni” - 并因此使用此分布)。问题是我需要这个盒子,因为我希望能够选择单选按钮之间的某个选项,所以它不适用于我添加额外的单选按钮。在这种情况下,额外的选项是,可以在文本输入中写入“exp”(此分布不能从单选按钮中选择)。

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

这是不是有可能?

在此先感谢!

回答

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) 
} 
+0

一个太谢谢你了! (没有指数单选按钮,这正是我想要的!) 感谢! – Dorthe

+0

@Dorthe https://stackoverflow.com/help/someone-answers –

相关问题