2016-12-12 56 views
1

我有一个闪亮的应用程序,工作相当不错,但我想改进它并添加一些功能。更新selectInput错误“强制错误(ui):找不到对象'ui'

我的数据是这样的:

NITG <- c("L447", "G24M", "G112", "F144", "B33D", "M4A1", "G432", "K54N", "K312", "K24K") 
RC <- c("7E", "8E", "7D", "2G", "2B", "1D", "2J", "7M", "4H", "1D") 
Pheno <- c("ZZ", "SS", "ZE", "ZZ", "ZZ", "ZLMN", "BB", "ZA", "GG", "ZZ") 
GRADES <- c("D", "C", "D", "D", "C", "A", "D", "D", "D", "D") 

data <- data.frame(NITG, RC, Pheno, GRADES) 

我要的是:

当我选择我的变量形式,例如让我们“L447”为NITG,我只想展示“7E”用于RC可变滤波器中的RC,并非我所有的RC都得到了我的数据,“ZZ”用于Pheno可变...等 我想要类似于Excel滤波器的东西。也许我需要一些反应函数,我现在被卡住了。

感谢您的帮助

ui <- fluidPage(

    titlePanel("Referentiel Renault Nissan"), 

    sidebarLayout(
    sidebarPanel(selectInput("nitg", 
          "NITG:", 
          c("All", unique(filtered_df$NITG)), 
          selected = "All", 
          multiple = TRUE), 
       selectInput("pheno", 
          "Phenomenon:", 
          c("All", unique(filtered_df$Pheno)), 
          selected = "All", 
          multiple = TRUE), 
       selectInput("rc", 
          "RC:", 
          c("All", unique(filtered_df$RC)), 
          selected = "All", 
          multiple = TRUE), 
       selectInput("grade", 
          "Grades:", 
          c("All", unique(filtered_df$GRADES)), 
          selected = "All", 
          multiple = TRUE) 
    ), 

    mainPanel(
     DT::dataTableOutput("tableprint") 
    ) 
) 
) 

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

    output$tableprint <- DT::renderDataTable({ 

    # Data 

    NITG <- c("L447", "G24M", "G112", "F144", "B33D", "M4A1", "G432", "K54N", "K312", "K24K") 
    RC <- c("7E", "8E", "7D", "2G", "2B", "1D", "2J", "7M", "4H", "1D") 
    Pheno <- c("ZZ", "SS", "ZE", "ZZ", "ZZ", "ZLMN", "BB", "ZA", "GG", "ZZ") 
    GRADES <- c("D", "C", "D", "D", "C", "A", "D", "D", "D", "D") 

    df <- data.frame(NITG, RC, Pheno, GRADES) 

    # Create filters based on inputs 
    f1 <- if("All" %in% input$nitg){ 
     df$NITG 
    } else { 
     input$nitg 
    } 

    f2 <- if("All" %in% input$pheno){ 
     df$Pheno 
    } else { 
     input$pheno 
    } 

    f3 <- if("All" %in% input$rc){ 
     df$RC 
    } else { 
     input$rc 
    } 

    f4 <- if("All" %in% input$grade){ 
     df$GRADES 
    } else { 
     input$grade 
    } 

    # Filter data 
    filtered_df <- filter(df, 
          NITG %in% f1, 
          Pheno %in% f2, 
          RC %in% f3, 
          GRADES %in% f4) 

    # Update selectInput choices based on the filtered data. Update 'selected' to reflect the user input. 
    updateSelectInput(session, "nitg", choices = c("All", filtered_df$NITG), selected = input$nitg) 
    updateSelectInput(session, "pheno", choices = c("All", filtered_df$Pheno), selected = input$pheno) 
    updateSelectInput(session, "rc", choices = c("All", filtered_df$RC), selected = input$rc) 
    updateSelectInput(session, "grade", choices = c("All", filtered_df$GRADES), selected = input$grade) 




    datatable(filtered_df) 

    }) 
} 

# Run the application 
shinyApp(ui = ui, server = server) 

回答

1

你需要的updateSelectInput()的实现。演示是here。这是一个小例子,代码与您的代码类似。

library(shiny) 
library(dplyr) 
library(DT) 

ui <- fluidPage(

    titlePanel("Title"), 

    sidebarLayout(
    sidebarPanel(width=3, 
       selectInput("filter1", "Filter 1", multiple = T, choices = c("All", LETTERS), selected = "All"), 
       selectInput("filter2", "Filter 2", multiple = T, choices = c("All", as.character(seq.int(1, length(letters), 1))), 
           selected = "All") 
    ), 

    mainPanel(
     DT::dataTableOutput("tableprint") 
    ) 
) 
) 

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

    output$tableprint <- DT::renderDataTable({ 

    # Data 
    df <- tibble(Letters = LETTERS, Numbers = as.character(seq.int(1, length(letters), 1))) 

    # Create filters based on inputs 
    f1 <- if("All" %in% input$filter1) LETTERS else input$filter1 
    f2 <- if("All" %in% input$filter2) as.character(seq.int(1, length(letters), 1)) else input$filter2 

    # Filter data 
    filtered_df <- filter(df, 
          Letters %in% f1, 
          Numbers %in% f2) 

    # Update selectInput choices based on the filtered data. Update 'selected' to reflect the user input. 
    updateSelectInput(session, "filter1", choices = c("All", filtered_df$Letters), selected = input$filter1) 
    updateSelectInput(session, "filter2", choices = c("All", filtered_df$Numbers), selected = input$filter2) 

    datatable(filtered_df) 

    }) 
} 

# Run the application 
shinyApp(ui = ui, server = server) 
+0

非常感谢你我只是按照这个例子,但我得到一个关于应用lauch错误你可以检查我的脚本再次感谢 –