csvFileInput <- function(id, label = "CSV file") {
# Create a namespace function using the provided id
ns <- NS(id)
tagList(
fileInput(ns("file"), label),
checkboxInput(ns("heading"), "Has heading"),
selectInput(ns("quote"), "Quote", c(
"None" = "",
"Double quote" = "\"",
"Single quote" = "'"
))
)
}
mainUI <- function(id){
ns <- NS(id)
box(cvsFileInput(ns('datafile1'), "User data (.csv format)"),
title = paste('box',1),
collapsible = FALSE,
width = 6,
status = 'info',
solidHeader = TRUE)
box(cvsFileInput(ns('datafile2'), "User data (.csv format)"),
title = paste('box',2),
collapsible = FALSE,
width = 6,
status = 'info',
solidHeader = TRUE)
}
csvFile <- function(input, output, session, stringsAsFactors) {
# The selected file, if any
userFile <- reactive({
# If no file is selected, don't do anything
validate(need(input$file, message = FALSE))
input$file
})
# The user's data, parsed into a data frame
dataframe <- reactive({
read.csv(userFile()$datapath,
header = input$heading,
quote = input$quote,
stringsAsFactors = stringsAsFactors)
})
# Return the reactive that yields the data frame
return(dataframe)
}
main <- function(input, output, session){
datafile1 <- callModule(csvFile, "datafile1",
stringsAsFactors = FALSE)
datafile2 <- callModule(csvFile, "datafile2",
stringsAsFactors = FALSE)
return(list(df1=datafile1(), df2=datafile2()))
}