r - Shiny reactive function behavior is not as expected -


i want have user upload 2 csv files. after done want send data table lm in rendertable, generate results , create table output of regression model. basics of ui , server code below. use fileinput read in data. server uses reactive construction construct datainput involving if (is.null) return(null) each of csv files. thought stop rendertable code doing until both csv files uploaded. in fact rendertable still reacting. may misunderstanding how use reactive functions pass data table reactive function.

  ui <- fluidpage(   titlepanel("generate calibration parameters"),   # sidebar 2 csv imports    sidebarlayout(     sidebarpanel(       fileinput('master', 'choose master aqe csv file',                 accept = c('text/csv', 'text/comma-separated values,text/plain', '.csv')),       fileinput('slave', 'choose slave aqe csv file',                 accept = c('text/csv', 'text/comma-separated-values,text/plain','.csv'))     ),     mainpanel(width = "100%",               fluidrow(align = "center",                        column(                          width = 6, div(tableoutput("coefftableo3"), style = "font-size:80%")                        ))))))  server <- function(input, output) {   datainput <- reactive({     masterinfo <- input$master     if (is.null(masterinfo))       return(null)     dt.master <- read_csv(masterinfo$datapath)      dt.master <- as.data.table(dt.master)      slaveinfo <- input$master     if (is.null(slaveinfo))       return(null)      dt.slave <- as.data.table(read_csv(slaveinfo$datapath)      timezone <- "america/denver"      #aggregate minutes; note cut returns factor 'timestamp' becomes 'cut'     varstoagg.master <- c("no2", "o3")     dt.master.min <- dt.master[, lapply(.sd, mean), = list(cut(dt.master$timestamp, breaks = "min")), .sdcols = varstoagg.master]     varstoagg.slave <- c("no2.slave", "o3.slave")     dt.slave.min <- dt.slave[, lapply(.sd, mean), = list(cut(dt.slave$timestamp.slave, breaks = "min")), .sdcols = varstoagg.slave]      # combine 2     combinedresults <- merge(dt.master.min, dt.slave.min, = 'cut')     # convert cut posix , change name time     combinedresults[, time := as.posixct(cut,format = "%y-%m-%d %h:%m:%s", tz = timezone)]     combinedresults[,cut := null]     return(combinedresults)    })    output$coefftableo3 <- rendertable({     # generate regression results     combinedresults <- datainput()     print(str(combinedresults))     lmresultso3 <- lm(o3.slave ~ o3, combinedresults)     coef(summary(lmresultso3))["o3","estimate"]     coef(summary(lmresultso3))["(intercept)","estimate"]   }) } 


Comments