2016-09-07 15 views
-1

私は、デフォルト値で一度だけ読み込むようにしたいのですが、ユーザーが正しいパスワードを入力したときに反応するようにしてください。二つの反応性の入力がありますR Shiny:入力値を条件付きで反応させる方法(別の入力)?

PASSWORD <- "test" 

library(shiny) 

shinyServer(function(input, output) { 

    output$histo <- renderPlot({ 
     x <- faithful[, 2] 
     bins <- seq(min(x), max(x), length.out = input$nbins + 1) 
     hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
}) 

ui.R

library(shiny) 

shinyUI(fluidPage( 
    sidebarLayout(
     sidebarPanel(    
      passwordInput("pw", "Password:"), 

      sliderInput("nbins", 
         "Number of bins:", 
         min = 1, 
         max = 50, 
         value = 30) 
    ),  
    mainPanel(
    plotOutput("histo") 
    ) 
))) 

server.R(細かく編集した)Rstudioテンプレートから簡単なLETの作品をものを維持するために、 pwおよびnbins。私の質問は次のとおりです。nbins(動作)をの入力に応じてPASSWORDに応じて切り替えるようにコードを拡張する方法を教えてください。

このソリューションについてどう
+0

あなたが探しているものを 'conditionalPanel()'ですか? –

+0

@VanceLopezありがとうございます、しかし、私はサーバー側でこれを行う方法を探しています。それがまったく可能ならば。これを 'conditionalPanel()'でどのように修正しますか? – Jim

+0

「反応性と非反応性の切り替え」という意味がわからないと思います。正しいパスワードを持っていなくても、入力の元の値に基づいて 'output $ histo'を表示したいのであれば、ユーザが' nbins'とやりとりすることを防ぎたいのですか? –

答えて

1

:バルターの答えに

PASSWORD <- "test" 

    library(shiny) 

    shinyServer(function(input, output) { 
      bins <- eventReactive(input$nbins, { 
        if (input$pw == "PASSWORD") { 
        bins <- seq(min(faithful[, 2]), max(faithful[, 2]), length.out = input$nbins + 1) 
        } else { 
        bins <- seq(min(faithful[, 2]), max(faithful[, 2]), length.out = 30 + 1)  
        } 
      }) 

      output$histo <- renderPlot({ 
        x <- faithful[, 2] 
        #bins <- seq(min(x), max(x), length.out = input$nbins + 1) 
        hist(x, breaks = bins(), col = 'darkgray', border = 'white') 
      }) 
    }) 
+0

'PASSWORD'の前後の引用符を削除した後に動作します。ありがとう – Jim

0

ビル、あなたは/入力ウィジェットで無効にインタラクティビティを可能にするためにshinyjsを使用することができます。

ui.R

library(shiny) 
library(shinyjs) # install shinyjs 

shinyUI(fluidPage( 
    useShinyjs(), # activate 
    sidebarLayout(
    sidebarPanel(    
     passwordInput("pw", "Password:"), 

     sliderInput("nbins", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30) 
    ),  
    mainPanel(
     plotOutput("histo") 
    ) 
))) 

server.R

library(shiny) 
library(shinyjs) 

shinyServer(function(input, output) { 

    observe({ 
    if(input$pw != "PASSWORD") shinyjs::hide("nbins") else shinyjs::show("nbins") 
    }) 

    output$histo <- renderPlot({ 
    x <- faithful[, 2] 

    # will 'reset' bins to original value if incorrect pw 
    if(input$pw != "PASSWORD") { 
     bins <- seq(min(x), max(x), length.out = 30 + 1) 
    } else { 
     bins <- seq(min(x), max(x), length.out = input$nbins + 1) 
    } 

    hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    }) 
}) 
関連する問題