2017-02-08 5 views
1

I einen Grundes glänzende app aufweisen, die A + B auswertet:Einschränkende einen glänzenden Eingang app basierend auf einem anderen Eingang

library(shiny) 

ui <- fluidPage(
    numericInput(inputId = "A", label = "A", value = 5, step = 1), 
    sliderInput(inputId = "B", label = "B", min = 0, max = 10, value = 5), 
    textOutput(outputId = "value") 
) 

server <- function(input, output) { 
    output$value <- renderText(paste0("A + B = ", input$A + input$B)) 
} 

shinyApp(ui = ui, server = server) 

A ist ein numericInput Wert und B ist ein sliderInput Wert .

Ich möchte, dass meine App beschränken, so dass der maximale Eingangswert für B ist immer 2 * A. Ich muss daher die fest codierte max = in sliderInput zu etwas, das dynamisch sein kann, ändern. Wie kann ich das erreichen?

Dank

+1

All diese Informationen sind bereits auf der Shinys-Tutorial-Seite, außerdem gibt es viele ähnliche Fragen, die bereits zu SO gestellt wurden Du machst deine Forschung, da es nichts Neues für die Gemeinschaft bringt –

Antwort

3

Sie suchen renderUI()

library(shiny) 

ui <- fluidPage(
    numericInput(inputId = "A", label = "A", value = 5, step = 1), 
    uiOutput("slider"), 
    textOutput(outputId = "value") 
) 

server <- function(input, output) { 
    output$value <- renderText(paste0("A + B = ", input$A + input$B)) 
    output$slider <- renderUI({ 
    sliderInput(inputId = "B", label = "B", min = 0, max = 2*input$A, value = 5) 
    }) 
} 

shinyApp(ui = ui, server = server) 
4

Sie können updateSliderInput rufen von den Maximalwert für B zu ändern, innerhalb eines observe die ausgelöst wird, wenn ein Änderungen:

library(shiny) 

ui <- fluidPage(
    numericInput(inputId = "A", label = "A", value = 5, step = 1), 
    sliderInput(inputId = "B", label = "B", min = 0, max = 10, value = 5), 
    textOutput(outputId = "value") 
) 

# Notice the session argument to be passed to updateSliderInput 
server <- function(input, output, session) { 
    output$value <- renderText(paste0("A + B = ", input$A + input$B)) 
    observe(updateSliderInput(session, "B", max = input$A*2)) 
} 

shinyApp(ui = ui, server = server) 
Verwandte Themen