ui.R code

library(shiny)

shinyUI(fluidPage(

titlePanel("Classification tree model on iris dataset."),
sidebarLayout(
    sidebarPanel(
        checkboxInput("ex","Uncheck for using your own file",value = TRUE),
        fileInput("file", "Upload the *.csv file with headers"),
        uiOutput("dependent"),
        uiOutput("predictor"),
        sliderInput("prop",
                    "Enter the training data ratio",
                    min = .5,
                    max = 1,
                    value = .6,step = .05)
    ),

    mainPanel(
    tabsetPanel(type = "tabs",
        tabPanel("Model",br(),verbatimTextOutput("model"),verbatimTextOutput("text")),
        tabPanel("Confusion Matrix & Statistics",br(),verbatimTextOutput("matrix")),
        tabPanel("Tree",br(),plotOutput("tree")))
    )
)

)) ## server.R code

library(shiny)

library(rattle)

library(dplyr)

library(datasets)

library(caret)

library(e1071)

shinyServer(function(input, output) {

output$dependent <- renderUI({
  if(input$ex==TRUE){
    data = datasets::iris
    dependents <- select_if(data,is.factor)
    selectInput("depvar","Select the dependent variable",choices = colnames(dependents))
  }
  else{
    file1 <- input$file
    data =  read.table(file =  file1$datapath,sep =",",header = TRUE)
    dependents <- select_if(data,is.factor)
    selectInput("depvar","Select the dependent variable",choices = colnames(dependents))
  }
})
output$predictor <- renderUI({
  if(input$ex==TRUE){
    data = datasets::iris
    dependents <- select_if(data,is.numeric)
    checkboxGroupInput("predvar","Select the predictor variables",choices = colnames(dependents))
  }
  else{
    file1 <- input$file
    data =  read.table(file =  file1$datapath,sep =",",header = TRUE)
    dependents <- select_if(data,is.numeric)
    checkboxGroupInput("predvar","Select the predictor variables",choices = colnames(dependents))
  }
})
model <- reactive ({
  req(input$depvar, input$predvar)
  prop = input$prop
  predictor = input$predvar
  dependent = input$depvar
  if(length(predictor)==0){return("Select atleast one predictor")}
  if(input$ex==TRUE){data <- datasets::iris}
  else{file1 <- input$file
  data =  read.table(file =  file1$datapath,sep =",",header = TRUE)
  data = as.data.frame(data)}
  set.seed(69)
  inTrain <- createDataPartition(y=data[[dependent]],p=prop,list = FALSE)
  train <- data[inTrain,]
  train <- train %>% select(predictor,dependent)
  train(dependent~.,data=data,method = "rpart")
})
test <- reactive ({
  prop = input$prop
  predictor = input$predvar
  dependent = input$depvar
  if(length(predictor)==0){return("Select atleast one predictor")}
  if(input$ex==TRUE){data = datasets::iris}
  else{file1 <- input$file
  data =  read.table(file =  file1$datapath,sep =",",header = TRUE)}
  set.seed(69)
  inTrain <- createDataPartition(y=data[[dependent]],p=prop,list = FALSE)
  test <- data[-inTrain,]
  test <- test %>% select(predictor,dependent)
})
output$model <- renderPrint({
  model()
})
output$matrix <- renderPrint({
  dependent <- input$depvar
  if(length(input$predvar)==0){return("Select atleast one predictor")}
  predict <- predict(model(),test())
  confusionMatrix(predict,test()$dependent)
})
output$tree <- renderPlot({
  if(length(input$predvar)==0){return("Select atleast one predictor")}
  fancyRpartPlot(model()$finalModel)
})

})