对于我的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")
答案 0 :(得分:2)
如果已经理解了你的意思,请考虑以下文件结构:
--ShinyApp
--ui.R
--server.R
--myFunctions.R
myFunctions.R
包含您的所有功能。要使myFunctions.R
中定义的所有功能只是source
server
文件顶部的文件。例如:
source("/Volumes/full/directory/path/myFunctions.R")