I\'m experimenting with Shiny and I love it. I built a little application where students upload a csv file and then choose a dependent variables and independent variables and th
Here's the working ShinyApp and the final version of both ui.R and server.R based on all the suggestions provided by Marat.
First the ui.R
# ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Multiple Linear Regression with R/Shiny"),
sidebarLayout(
sidebarPanel(
p("Please upload a CSV formatted file with your data."),
fileInput('file1', label='Click button below to select the file in your computer.',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
uiOutput("dependent"),
uiOutput("independents"),
tags$hr(),
uiOutput('ui.action') # instead of conditionalPanel
),
mainPanel(
p("Here's the output from your regression:"),
verbatimTextOutput('contents')
)
)
))
and server.R
# server.R
library(shiny)
shinyServer(function(input, output) {
filedata <- reactive({
infile <- input$file1
if (is.null(infile)){
return(NULL)
}
read.csv(infile$datapath)
})
output$ui.action <- renderUI({
if (is.null(filedata())) return()
actionButton("action", "Run regression")
})
output$dependent <- renderUI({
df <- filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("dependent","Now select ONE variable as dependent variable from:",items)
})
output$independents <- renderUI({
df <- filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("independents","Also select ONE or MANY independent variables in the box below. You can change your selection several times:",items,multiple=TRUE)
})
output$contents <- renderPrint({
if (is.null(input$action)) return()
if (input$action==0) return()
isolate({
df <- filedata()
if (is.null(df)) return(NULL)
fmla <- as.formula(paste(input$dependent," ~ ",paste(input$independents,collapse="+")))
summary(lm(fmla,data=df))
})
})
})
Once again thanks for your help Marat.
This code worked for me
ui.R
# ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Multiple Linear Regression"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
uiOutput("dependent"),
uiOutput("independents"),
tags$hr(),
uiOutput('ui.action') # instead of conditionalPanel
),
mainPanel(
verbatimTextOutput('contents')
)
)
))
server.R
# server.R
library(shiny)
shinyServer(function(input, output) {
filedata <- reactive({
infile <- input$file1
if (is.null(infile)){
return(NULL)
}
read.csv(infile$datapath)
})
output$dependent <- renderUI({
df <- filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("dependent","Select ONE variable as dependent variable from:",items)
})
output$independents <- renderUI({
df <- filedata()
if (is.null(df)) return(NULL)
items=names(df)
names(items)=items
selectInput("independents","Select ONE or MANY independent variables from:",items,multiple=TRUE)
})
output$contents <- renderPrint({
input$action
isolate({
df <- filedata()
if (is.null(df)) return(NULL)
fmla <- as.formula(paste(input$dependent," ~ ",paste(input$independents,collapse="+")))
summary(lm(fmla,data=df))
})
})
output$ui.action <- renderUI({
if (is.null(input$file1)) return()
actionButton("action", "Press after reading file and selecting variables")
})
})