Rshiny:重构代码

时间:2015-10-15 12:16:46

标签: r

对于我的Rshiny应用程序,我有一个ui和一个服务器文件。 ui和服务器文件都非常庞大,现在我想将ui / server的某些部分重构为其他函数,然后调用这些函数。例如,我有这个UI代码:

shinyUI(

       something,
       something,
       something
)

我想这样做:

shinyUI(

       somethingFunction()
)

该功能存储在不同的数据中:

somethingFunction() <- function()

   something,
   something,
   something

用户界面仍然有效,我仍然可以获得相同的用户界面。但是服务器的功能不再适用。好像我只有一个基本的服务器,如:

shinyServer(function(input, output, session) {

})

我觉得一旦我分解了功能,服务器就不能再与UI正常通信了。有人能帮助我吗?

修改

以下是代码的相关摘要。 ImportDataTab() - 文件包含重构的代码。

服务器文件:

    library(Korridorbudgetierung)
library(shinythemes)


source("ImportDataTab.R")


shinyServer(function(input, output, session) {


  output$contents <- renderTable({
    # input$file1 will be NULL initially. After the user selects
    # and uploads a file, it will be a data frame with 'name',
    # 'size', 'type', and 'datapath' columns. The 'datapath'
    # column will contain the local filenames where the data can
    # be found.

    inFile <- input$file1

    if (is.null(inFile))
      return(NULL)

    file.data <-  as.tbl(read.csv(inFile$datapath, header = input$header,
                                  sep = input$sep, quote = input$quote, dec = ","))

    file.data

  })



})

UI-File

  library(dygraphs)
library(xtable)
library(htmltools)
library(shiny)
library(shinythemes)
library(d3heatmap)
library(datasets)
library(DBI)
library(RMySQL)

source("ImportDataTab.R")

shinyUI(


  navbarPage(title="App", 


             tabPanel("Home"),
             ImportDataTab(),
             tabPanel("New Tab")


  )
)

ImportDataTab() - 文件:

library(shiny)


ImportDataTab <- function()
  navbarMenu(
    "1. Import Data", ImportFile(), DatabaseFile(), WebsiteFile()
  )

#######################################################################
#FUNCTION
#######################################################################
ImportFile <- function()

  tabPanel("Data from Files",
           h4("Uploading data", align="center"),
           sidebarLayout(
             sidebarPanel(
               fileInput('file1', 'Choose file to upload',
                         accept = c(
                           'text/csv',
                           'text/comma-separated-values',
                           'text/tab-separated-values',
                           'text/plain',
                           '.csv',
                           '.tsv'
                         )
               ),
               tags$hr(),

               checkboxInput('header', 'Header', TRUE),
               radioButtons('sep', 'Separator',
                            c(Comma=',',
                              Semicolon=';',
                              Tab='\t'),
                            ','),
               radioButtons('quote', 'Quote',
                            c(None='',
                              'Double Quote'='"',
                              'Single Quote'="'"),
                            '"'),
               tags$hr(),
               headerPanel(
               h6("Powered by", align = "left",
                    style = "font-weight: 600;color: black")),

               br(),
               tags$img(src= 'pic.png', height=70, width=70)
             ),
             mainPanel(
               tableOutput('contents')
             )

           )
  )

#######################################################################
#FUNCTION
#######################################################################

DatabaseFile <- function()

tabPanel("Data from Database",
         h4("Uploading data", align="center"),
         sidebarLayout(
           sidebarPanel(
             selectInput("tables", "Select a table", c("Cali", "Florida"))
           ),

           mainPanel(
             tableOutput('contents')
           )
         )
)

#######################################################################
#FUNCTION
#######################################################################

WebsiteFile <- function()

  tabPanel("Data Extraction from Website")

1 个答案:

答案 0 :(得分:2)

如果已经理解了你的意思,请考虑以下文件结构:

--ShinyApp
   --ui.R
   --server.R
   --myFunctions.R

myFunctions.R包含您的所有功能。要使myFunctions.R中定义的所有功能只是source server文件顶部的文件。例如:

source("/Volumes/full/directory/path/myFunctions.R")