2017-05-23 13 views
0

私は、ユーザーの入力を受け取り、後でそれに基づいてプロットを作成する小さな光沢のあるアプリケーションを持っています。 これまでのところ私のサイドバーは次のようになります:like thisShiny:checkboxGroupinputのグループを検証する

ここで、6つのオプションのうちの1つがクリックされているかどうかを確認するために "validate"を使用したいと思います。

これまでのところ、私のコードでは赤の色だけがチェックされています。

また、1つのボックス(果物など)を持つ方法がある場合は、 が自動的にチェックされているのでしょうか。たとえば、アプリを起動するAppleは事前に選択されていますが、クリックを解除すると自動的にバナナ(またはCitrus)が選択されます。検証の代わりにこのアプローチを使用するソリューションはありますか?

library(shiny) 
library(ggplot2) 
library(plotly) 
library(data.table) 
library(DT) 
library(shinyjs) 


ui <- shinyUI(fluidPage(
    tabsetPanel(
    tabPanel("Upload", 
      sidebarLayout(
      sidebarPanel(width = 4, 
         fileInput('file1', 'Choose CSV File', 
            accept=c('text/csv', 
              'text/comma-separated-values,text/plain', 
              '.csv')), 
         #tags$hr(), 
         checkboxInput('header', 'Header', TRUE), 
         radioButtons('sep', 'Separator', 
            c(Comma=',', 
             Semicolon=';', 
             Tab='\t'), 
            ',') 
      ), 
      mainPanel(dataTableOutput('table1') 
      )) 
), 
    tabPanel("fruits", 
      sidebarLayout(
      sidebarPanel(width = 4, 
          uiOutput("fruitTable") 
         ), 
      mainPanel(dataTableOutput('table2') 
    ))) 
))) 


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

    file_data <- reactive({ 
    fruit_file1 <- input$file1 
    if(is.null(fruit_file1)){ 
     return(NULL) 
    }else{ 
     fruits <- fread(fruit_file1$datapath, header=input$header, sep=input$sep, check.names = FALSE) 
     return(fruits) 
    } 
    }) 


    output$table1 <- renderDataTable({ 
    if(is.null(file_data())){ 
     return(NULL) 
    }else{ 
     datatable(file_data(),options = list(pageLength = 25)) 
    } 
    }) 

    output$table2 <- renderDataTable({ 
    if(is.null(file_data())){ 
     return(NULL) 
    }else{ 

     validate(
     need(input$fruit, 'Check at least one fruit!'), 
     need(input$stim, 'Check at least one fertilizer!'), 
     need(input$marker1, 'Check at least one color!') 


     datatable(file_data(),options = list(pageLength = 25)) 
    } 
    }) 

    output$fruitTable <- renderUI({ 
    if(is.null(file_data())){ 
     return() 
    }else{ 
     tagList(
     checkboxGroupInput(inputId = "fruit", 
          label = "Fruit", 
          choices = c("Apple", "Banana", "Citrus")), 
     radioButtons(inputId = "month", 
        label = "Month", 
        choices = c("1"= 1, "9" = 2, "12" = 3), 
        selected = 1, 
        inline = TRUE), 
     checkboxGroupInput(inputId = "stim", 
          label = "Stimulation", 
          choices = list("A","B", "C")), 
          #choices = c(unique(as.character(file_data()[,3])))), 
     checkboxGroupInput(inputId = "marker1", 
          label = "red", 
          choices= list("+", "-"), 
          #choices = c(unique(as.character(file_data()[,4]))), 
          inline = TRUE), 
     checkboxGroupInput(inputId = "marker2", 
          label = "green", 
          choices= list("+", "-"), 
          #choices = c(unique(as.character(file_data()[,5]))), 
          inline = TRUE), 
     checkboxGroupInput(inputId = "marker3", 
          label = "yellow", 
          choices= list("+", "-"), 
          #choices = c(unique(as.character(file_data()[,6]))), 
          inline = TRUE) 
    ) 
    } 
    }) 
}) 

shinyApp(ui = ui, server = server) 

と私が使用しfileへのリンク:

は、ここに私のコードです。あなたは果物にタブを切り替えるために必要なファイルをアップロードした後

。(私はまだ考え出したていない、自動的にタブがアップロードした後に切り替えている方法)助けるため

ありがとう!

答えて

1

あなたは使用することができます。

need(!is.null(input$marker1) | !is.null(input$marker2) | !is.null(input$marker3), 
    'Check at least one color!') 
+0

を私はあなたのソリューションで私のポストを更新し、グループとしての色をフィルタリングする方法を知っていただきたいと思います。入力がNULLでない場合は、選択されている表の行を選択します。 'if(!is.null(input $ marker1)|!is.null(input $ marker2)|!is.null(input $ marker3)){ #????それはフルーツと肥料のために働いていますが、私はそれを全カラーグループで行うことはできません。ありがとう! – Rivka

+0

ねえ、最初の質問にあまり関係ないので、新しい質問を投稿するべきだと思います。あなたは新しい質問に私を参照することができ、私は助けることができます.. – BigDataScientist

+1

私はそれを自分で考え出しました。 – Rivka

関連する問題