2016-07-14 6 views
1

2つのslideinputで最大100の光沢のあるアプリケーションを作成したいと思います。つまり、ユーザーが1つのスライダの値を変更すると、他のスライダが自動的に変更されて制約を満たします(100入力$スライダー1)。光沢のある2つのsliderInputを100に制限する

サーバー:

library(shiny) 

# Define server logic required 
shinyServer(function(input, output) { 

    output$slider2 <- reactiveUI(function() { 
    sliderInput("slider2", "Slider 2", min = 0, max = 100 - input$slider1, value = 0) 
    }) 

    output$restable <- renderTable({ 
    myvals<- c(input$slider1, input$slider2, 100-input$slider1-input$slider2) 
    data.frame(Names=c("Slider 1", "Slider 2", "Slider 3"), 
       Values=myvals) 
    }) 
}) 

UI:

library(shiny) 

# Define UI for application 
shinyUI(pageWithSidebar(

    # Application title 
    headerPanel("Sliders should sum to 100!"), 

    # Sidebar with sliders whos sum should be constrained to be 100 
    sidebarPanel(
    sliderInput("slider1", "Slider 1: ", min = 0, max = 100, value = 0, step=1), 
    uiOutput("slider2") 
), 

    # Create table output 
    mainPanel(
    tableOutput("restable") 
) 
)) 
次のコードで Examplecode

は、私がここに同様の質問を見つけました

これは既に大丈夫な解決策です。しかし、ここでは、スライダー1を変更してスライダー2の自動変更を得ることができます。一方、ユーザーがスライダー2を変更した場合、スライダー1は制約に適合しません。 どちらのスライダも両方のスライダを変更して他のスライダを制約に適合させることができますか?

答えて

3

私は2番目の1

rm(list = ls()) 
library(shiny) 

ui <-pageWithSidebar(

    # Application title 
    headerPanel("Sliders should sum to 100!"), 
    # Sidebar with sliders whos sum should be constrained to be 100 
    sidebarPanel(
    sliderInput("slider1", "Slider 1: ", min = 0, max = 100, value = 0, step=1), 
    uiOutput("slider")), 

    # Create table output 
    mainPanel(tableOutput("restable")) 
) 

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

    observe({ 
    updateSliderInput(session, "slider1", min =0,max=100, value = 100 - input$slider2) 
    }) 
    output$slider <- renderUI({ 
    sliderInput("slider2", "Slider 2: ", min=0,max=100, value=100 - input$slider1) 
    }) 

    output$restable <- renderTable({ 
    myvals<- c(input$slider1, input$slider2, 100-input$slider1-input$slider2) 
    data.frame(Names=c("Slider 1", "Slider 2", "Slider 3"),Values=myvals) 
    }) 
} 
runApp(list(ui = ui, server = server)) 

enter image description here

+0

ためrenderUIと一緒にダブルupdateSliderInputありがとう追加しています!最大値を100に保つことも可能です(1から100までの全範囲を表示するには)? –

+0

問題は、1つのスライダを縮小すると、後でそれを大きくすることはできません –

+0

maxを設定する代わりに、他のスライダの値を直接設定することができます。たとえば、updateSliderInput(session、 "slider2"、value = 100 - input $ slider1) '100に合計を開始する必要があることに注意してください。 (私はちょうどそれを行うための編集を提案しました) –

関連する問題