我正在开发R Shiny应用程序,该应用程序将依赖于模块,希望我可以重用该模块来上传和显示两个不同的数据集。到目前为止,我的代码可以正常工作,但是我认为我可以使它更简洁一点,因为我认为我没有正确理解该模块。我的意思是,如何将以下代码段(从下面)移出app_server并移入模块服务器,然后将callModule函数用于两个不同的数据集。同样,我可能需要从应用程序ui中删除以下代码:group c by c.CompanyName into CompanyName
,并在模块ui中进行该调用。请参阅下面的代码片段中的模块ui,模块服务器,应用ui和应用服务器。有什么建议么?谢谢!
tableOutput("metacontent")
#code snippet
output$metacontents <- renderTable({
metafile()
})
# Module UI
mod_dataInput_ui <- function(id,label) {
# Create a namespace function using the provided id
ns <- NS(id)
tagList(
# Input: Select a file ----
fileInput(ns("id"),label,multiple = FALSE,accept = c("text/csv","text/comma-separated-values,text/plain",".csv",".tsv")),# Input: Select separator ----
radioButtons(ns("sep"),"Separator",choices = c(Comma = ",",Tab = "\t"),selected = "\t"))
}
# Module Server
mod_dataInput_server <- function(input,output,session) {
userFile <- reactive({
validate(need(input$id !="","Please import a data file"))
input$id
})
datafile <- reactive({
utils::read.table(userFile()$datapath,header = FALSE,sep = input$sep,row.names = NULL,skip = 1,stringsAsFactors = FALSE)
})
}
#App UI
app_ui <- function() {
tagList(
# Leave this function for adding external resources
golem_add_external_resources(),# List the first level UI elements here
navbarPage("Tinsel",tabPanel("Load Data",sidebarPanel(mod_dataInput_ui("dataInput_ui_meta",tags$div("User Meta data",tags$br(),"(.csv,.tsv,or .txt file format)")),helpText("Can add help text here"),# Horizontal line ----
tags$hr(style="border-color: black;"),mod_dataInput_ui("dataInput_ui_gene",tags$div("User GENETIC data",tags$hr(style="border-color: black;")),mainPanel(
tabsetPanel(
tabPanel("Meta Data",tableOutput("metacontents")),tabPanel("Genetic Data",tableOutput("genecontents"))
)))
)
)
}