闪亮:验证一组checkboxGroupinput

时间:2017-05-23 22:39:27

标签: r checkbox shiny

我有一个小小的闪亮应用程序,它将接受用户的输入并在以后基于它创建一个绘图。 到目前为止,我的侧边栏看起来像这样:like this

我现在想用“验证”检查是否点击了6种颜色选项中的一种,如果没有,请让用户这样做。

到目前为止,我的代码只检查红色。

我也想知道是否有方法有一个盒子(例如水果) 自动检查整个时间。例如:启动应用程序Apple已预先选择,但如果您取消选择它,Banana(或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 个答案:

答案 0 :(得分:1)

您可以使用:

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