R shiny:基于checkboxgroupinput的子集数据

时间:2016-03-26 06:05:09

标签: r shiny

我想根据复选框输入动态选择的列来设置我的数据。 有什么方法可以让我的输入文件在我的代码中全局可用 这样可以很容易地进行进一步的操作。

以下是我的代码:

Server.R

    library(shiny)

    shinyServer(function(input, output) {

    dInput <- reactive({
       inFile <- input$file1
       if (is.null(inFile))
       return(NULL)

    finput <- read.csv(inFile$datapath, header=TRUE, sep=',',quote="'")
    fheaders <- names(finput) 
    return(fheaders)
    })


    output$choose_columns <- renderUI({
                       checkboxGroupInput("columns", "Choose columns", 
                       choices  = dInput(),
                       selected = NULL)
    })


  # to observe in environment which columns are selected
  observe({ print(input$columns) })


  output$data_table <- renderTable({
    # If missing input, return to avoid error later in function
    if(is.null(input$file1))
      return()

    # Get the data set
    dat <- get(input$file1)

    # Keep the selected columns
    dat <- dat[, input$columns, drop = FALSE]

    # Return first 20 rows
    head(dat, 20)
  })


})

ui.R

library(shiny)

# Define UI for application 
shinyUI(fluidPage(

  # Application title
  titlePanel("Subset a table"),


  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv', 
                         'text/comma-separated-values,text/plain', 
                         '.csv')),

      uiOutput("choose_columns")
      ),

    mainPanel(
      tableOutput("data_table")
    )
  )
))

我在显示tableOutput时遇到以下错误(&#34; data_table&#34;)

Error : invalid first argument    

1 个答案:

答案 0 :(得分:1)

我认为您的reactive需要dInput,并在过滤后的数据上再添加一个data_table()。然后,您可以使用()(使用observe)进行进一步操作。下面的(单个文件)代码在我的机器上正常工作。我还删除了dInput(无用)并更改了 library(shiny) server <- shinyServer(function(input, output) { dInput <- reactive({ inFile <- input$file1 if (is.null(inFile)) return(NULL) else return(read.csv(inFile$datapath, header=TRUE, sep=',',quote="'")) }) output$choose_columns <- renderUI({ cn <- colnames(dInput()) selectInput("columns", "Choose columns", choices = cn, selected = cn, size=10, multiple=TRUE, selectize=FALSE) }) data_table <- reactive({ # If missing input, return to avoid error later in function if(is.null(input$file1)) return(NULL) # Get the data set dat <- dInput() # Keep the selected columns dat[, input$columns, drop = FALSE] }) output$data_table <- renderTable(data_table()) }) # Define UI for application ui <- shinyUI(fluidPage( # Application title titlePanel("Subset a table"), sidebarLayout( sidebarPanel( fileInput('file1', 'Choose CSV File', accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')), uiOutput("choose_columns") ), mainPanel( h3("Filtered table"), tableOutput("data_table") ) ) )) shinyApp(ui, server) 返回的内容(实际文件而不是列号)。

`s.equals("PWD")` instead of `s == "PWD"` or `equalsIgnoreCase(...)` for case insensitive comparison.

是你想要的吗?