r - Random forest using caret not working in shiny -
i trying random forest using caret package in shiny.....was trying print variable importance random forest model output....following code below...
library(shiny) pacman::p_load(amelia,broom,caret,cluster,clustertend,clvalid,corrplot,dbscan,dplyr,dt,data.table,forecast,fpc,fpdclustering,fpp,ggally,ggfortify,ggraph,ggplot2,ggrepel,ggthemes,gmodels,googlevis,gridextra,igraph,knitr,mice,missforest,nbclust,optcluster,pacman,plyr,purrr,qcc,randomforest,rcharts,reshape2,tibble,tidyr,tidyverse,tsa,tseries,vegan,vim,zoo) library(markdown) library(imputets)
define ui application
ui <- navbarpage( # application title titlepanel("ms iima_paper shinyapp "), # sidebar layout input , output definitions ---- sidebarlayout( # sidebar panel inputs ---- sidebarpanel( # input: select file ---- fileinput("dataset", "choose csv file", multiple = true, accept = c("text/csv", "text/comma-separated-values,text/plain", ".csv")), # include clarifying text ---- helptext("note: first select dataset of csv format app give insight!!"), # horizontal line ---- tags$hr(), # input: checkbox if file has header ---- checkboxinput("header", "header", true), # input: select separator ---- radiobuttons("sep", "separator", choices = c(comma = ",", semicolon = ";", tab = "\t"), selected = ","), # horizontal line ---- tags$hr(), # input: actionbutton() defer rendering of output ---- # until user explicitly clicks button (rather # doing when inputs change). useful if # computations required render output inordinately # time-consuming. actionbutton("update", "update button", class = "btn-primary"), tags$hr() ), # show plot of generated distribution mainpanel( tabsetpanel( navbarmenu("random forest", tabpanel("structure of data", h4("input data str"), verbatimtextoutput("summary_rf")), tabpanel("varimp-gini (table)", h4("variable importance"), verbatimtextoutput("varimp")) ) ) ) ) )
define server logic required draw histogram
server <- function(input, output) { datasetinput <- eventreactive(input$update, { read.csv(input$dataset$datapath, header = input$header, sep = input$sep) }, ignorenull = false) #selecting numeric variables ms.num<- reactive({sapply(datasetinput(), is.numeric)}) ms.data.in.num <- reactive({datasetinput()[ , ms.num()]}) # imputing nas zeros df<- reactive({imputets::na.replace(ms.data.in.num(), 0)}) # keeping sample of 10k modeling sample_data <-reactive({df()[1:10000,]}) #### kmeans opt.cluster=9 set.seed(115) ms.data.kmeans.mdl <- reactive({kmeans(scale(sample_data()),opt.cluster,nstart=25)}) # appending clusters raw sample data x<-reactive({ cluster<-ms.data.kmeans.mdl()$cluster cluster }) add_to_df <- reactive({ sample_data1<-cbind(sample_data(),x()) sample_data1 }) ##### random forest on kmeans data # cluster.means1<-reactive({ # cluster1<-ms.data.kmeans.mdl()$cluster # cluster1 # }) ms.data_kmeans<-reactive({ df<-add_to_df() %>% mutate_each(funs(as.factor),one_of("x()")) df }) # generate summary of dataset ---- output$summary_rf <- renderprint({ dataset <- ms.data_kmeans() str(dataset) })
caret package
# var imp using caret # create training , test sets (75:25 split) using 'caret' package set.seed(123)# reproducibility intrain <- reactive({caret::createdatapartition(y = as.factor(ms.data_kmeans()$cluster.kmeans()), p = 0.75, list = false)}) # subset training <- reactive({ms.data_kmeans()[intrain(), ]}) testing <- reactive({ms.data_kmeans()[-intrain(), ]}) # random forest using caret package set.seed(122) modfit.rfcaret <- reactive({caret::train(cluster.kmeans~ ., method = "rf",data =training(),trcontrol = traincontrol(method = "cv"), number = 25)}) output$varimp <- renderprint({ rfimp=varimp(modfit.rfcaret(),scale = false) dataset<-setdt(rfimp$importance, keep.rownames = true)[] dataset }) } # run application shinyapp(ui = ui, server = server)
i getting following error:
warning: error in caret::createdatapartition: attempt apply non-function stack trace (innermost first): 130: caret::createdatapartition 129: <reactive:intrain> [c:\users\admin\documents\shiny_test/app.r#155] 118: intrain 117: [.data.frame 116: [ [c:\users\admin\documents\shiny_test/app.r#158] 115: <reactive:training> [c:\users\admin\documents\shiny_test/app.r#158] 104: training 103: eval 102: eval 101: eval.parent 100: train.formula 99: caret::train 98: <reactive:modfit.rfcaret> [c:\users\admin\documents\shiny_test/app.r#164] 87: modfit.rfcaret 86: varimp 85: renderprint [c:\users\admin\documents\shiny_test/app.r#167] 84: func 83: eval 82: eval 81: withvisible 80: evalvis 79: utils::capture.output 78: paste 77: origrenderfunc 76: output$varimp 1: runapp
i unable debug problem is.
head(df) # after appending cluster.kmeans raw data ## mob.data mob.sms mob.voice prepaid.sms mob.pre.voice mob.data.upld ## 1 634 80 85.8 2 8.8 46 ## 2 16 27 247.9 39 3.0 0 ## 3 560 532 8.3 3 59.1 231 ## 4 5582 23 157.4 942 2.6 385 ## 5 7176 31 27.6 300 3.5 0 ## 6 524 76 13.5 11 8.4 268 ## mob.data.dwnld mob.sms.amt mob.voice.amt mob.data.amt cluster.kmeans ## 1 628 1.39 34.8 35 5 ## 2 18 0.52 1.2 20 9 ## 3 660 2.61 2.6 37 2 ## 4 5212 2.09 2.0 35 8 ## 5 6817 8.70 1.0 31 8 ## 6 476 0.17 2.6 35 8
error says there must problem part of code has smthg createdatapartition(). after quick @ code assumed problem might in part:
...createdatapartition(y = as.factor(ms.data_kmeans()$cluster.kmeans())...
more here:
ms.data_kmeans()$cluster.kmeans()
cluster.kmeans()
not reactive argument, ms.data_kmeans() reactive, therefore should use: cluster.kmeans
. therefore here solution:
...createdatapartition(y = as.factor(ms.data_kmeans()$cluster.kmeans)...
Comments
Post a Comment