Shiny app filtering not working

Vinnie
Vinnie Registered Posts: 9 ✭✭✭
edited July 16 in Using Dataiku

Hi all. New to Dataiku and shiny but facing an issue where my app is not being populated with column names as you can see in the attached screenshot. The app without any filtering applied that just prints the head of the data works. The log is fine

Loading required package: shiny
Listening on http://127.0.0.1:6288

UI:

library(shiny)


# Define UI
ui <- fluidPage(
  titlePanel("Display Top 10 Rows of Dataset"),
  sidebarLayout(
    sidebarPanel(
      selectInput("column", "Select Column:", choices = colnames(df)),
      textInput("filter", "Filter Value:")
    ),
    mainPanel(
      tableOutput("topRows")
    )
  )
)

Server:

library(shiny)
library(dataiku)

# Function to read dataset 
df <- dkuReadDataset("final_data")

server <- function(input, output) {
  # Reactive expression to filter dataset
  filteredData <- reactive({
    req(input$column, input$filter)
    df[df[[input$column]] == input$filter, ]
  })
  
  # Display the top 10 rows
  output$topRows <- renderTable({
    head(filteredData(), 10)
  })
}

Best Answer

  • Vinnie
    Vinnie Registered Posts: 9 ✭✭✭
    edited July 17 Answer ✓

    OK I've now realised that I need to read the data in both the ui and server via

    df <- dkuReadDataset("final_data")

Answers

  • Vinnie
    Vinnie Registered Posts: 9 ✭✭✭
    edited July 17

    To add, specifying the column name gives me "An error has occurred!
    object of type 'closure' is not subsettable" with code as follows:

    UI

    library(shiny)
    
    
    # Define UI
    ui <- fluidPage(
      titlePanel("Filter Dataframe by Article"),
      
      sidebarLayout(
        sidebarPanel(
          selectInput("article", "Select Article:", choices = unique(df$ARTICLE))
        ),
        
        mainPanel(
          tableOutput("table")
        )
      )
    )

    Server:

    library(shiny)
    library(dataiku)
    
    # Function to read dataset 
    df <- dkuReadDataset("final_data")
    
    # Define server logic for the application
    server <- function(input, output) {
      filtered_df <- reactive({
        df[df$ARTICLE == input$article, ]
      })
      
      output$table <- renderTable({
        head(filtered_df())
      })
    }

    Attached is me just rendering the table with the ARTICLE column visible

Setup Info
    Tags
      Help me…