2017-01-17 8 views
1

Shinyでは、入力としてnumericInputがある場合、ユーザーが手動で値を入力すると、最大値または最小値を認識または尊重せず、任意の数値を許可します。ユーザーがドロップダウンの矢印を選択した場合、値は尊重されますが、手動で入力した場合は無視されます。手動入力で上限値と下限値の境界を尊重するにはどうすればよいですか?Shiny numericInput()は最小値と最大値を尊重しません

numericInput("test", label=("TestLabel"), min=0, max=10, value="", step = 1.0), 
+1

それは改善に割り当てられたバグhttps://github.com/rstudio/shiny/issues/927、として報告されました要求が閉じられたが、再オープンする必要があると思われる – HubertL

答えて

1

@HubertLは、報告されているバグです。

だから、あなたは可能性を持っている:それは

を修正するために周りの醜い仕事はあなたのために有用である場合には

  1. は、周りの小さな仕事を受け入れる下記参照または
  2. 待ち固定されるまで:

    library(shiny) 
    
    ui <- fluidPage(
        uiOutput("numInput"), 
        textOutput("text") 
    ) 
    
    server <- function(input, output) { 
        global <- reactiveValues(numVal = 25, numMin = 1, numMax = 100) 
    
        numVal <- reactive({ 
        if(!is.null(input$num)){ 
         if(input$num < global$numMin) return(global$numMin) 
         if(input$num > global$numMax) return(global$numMax)  
         return(input$num) 
        }else{ 
         return(global$numVal) 
        } 
        }) 
    
        output$numInput <- renderUI(numericInput("num", "", min = global$numMin, max = global$numMax, value = numVal())) 
    
        output$text <- renderText(input$num) 
    } 
    
    shinyApp(ui, server) 
    

    ダウンサイドは、 p/down "矢印"。

    編集:複数の入力のための答えを一般化する 要求:

    library(shiny) 
    amtInputs <- 6 
    
    ui <- fluidPage(
        uiOutput("numInput") 
    ) 
    
    server <- function(input, output) { 
        global <- reactiveValues(numVal = rep(25, amtInputs), numMin = rep(1, amtInputs), numMax = rep(100, amtInputs)) 
    
        numVal <- reactive({ 
        out <- rep(0, amtInputs) 
        for(idNr in 1:amtInputs){ 
         id <- paste0("num", idNr)  
         if(!is.null(input[[id]])){ 
         out[idNr] <- input[[id]] 
         if(input[[id]] < global$numMin[idNr]) out[idNr] <- global$numMin[idNr] 
         if(input[[id]] > global$numMax[idNr]) out[idNr] <- global$numMax[idNr] 
         }else{ 
         out[idNr] <- global$numVal[idNr] 
         } 
        } 
        return(out) 
        }) 
    
        output$numInput <- renderUI({ 
        inputs <- tagList() 
        for(idNr in 1:amtInputs){ 
         inputs <- tagList(inputs, numericInput(paste0("num", idNr), "", min = global$numMin[idNr], max = global$numMax[idNr], value = numVal()[idNr])) 
        } 
        return(inputs) 
        }) 
    } 
    
    shinyApp(ui, server) 
    
+0

複数のnumericInputを使用していた場合、この機能はどのように機能しますか?各numericInputのサーバリアクティブ関数を複製する必要がありますか?私は6つのnumericInputsを持っているとしましょう。 –

+1

こんにちは@DanteSmith、一般化について上記の編集をご覧ください。複製作業はもちろんですが、sthgを短く思ったと思いますので、上のforループをご覧ください。より多くのファンシーのためにapply()を試すことができます;) – BigDataScientist

+0

Thanks Tonio! 0から100までの数値のデフォルトとは対照的に、numericInputの初期値がNAであれば、これは処理できますか?私は、値が入力され、その値がminとmaxを除外している場合にのみ数値入力が値を変更することを頼みます。 –

関連する問題