简介
我创建了一个R闪亮的仪表板应用程序,它很快变得相当复杂。我有超过1300行的代码都放在应用程序中。R和它的工作。我正在使用RStudio。
我的应用程序有一个侧边栏和选项卡,而不是使用模块,我在绘制图形等时动态获取侧边栏和标签ID以生成唯一标识符。
我试图重新组织它,使其更易于管理,并将其拆分为其他程序员的任务,但我遇到了错误。
工作代码
我的原始代码有许多库语句,并将工作目录设置为代码位置。
rm(list = ls())
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
getwd()
然后,我有一系列位于ui/server函数之外的函数,因此只加载一次(不是被动的(。这些都是从服务器内部通过设置反应值和从renderPlot等内部调用函数来调用的。其中一些是嵌套的,所以服务器中的函数只调用常规应用程序中的函数。R,它又调用另一个。例如
# Start of month calculation
som <- function(x) {
toReturn <- as.Date(format(x, "%Y-%m-01"))
return(toReturn)
}
start_fc <- function(){
fc_start_date <- som(today())
return(fc_start_date)
}
然后在服务器中类似这样的东西(代码不完整(
server <- function(input, output, session) {
RV <- reactiveValues()
observe({
RV$selection <- input[[input$sidebar]]
# cat("Selected:",RV$selection,"r")
})
.......
cat(paste0("modelType: ",input[[paste0(RV$selection,"-modeltype")]]," n"))
vline1 <- decimal_date(start_pred(input[[paste0(RV$selection,"-modeltype")]],input[[paste0(RV$selection,"-modelrange")]][1]))
vline2 <- decimal_date(start_fc())
.......
问题代码
所以现在,当我把我所有的函数放进不同的.R文件时,我会收到错误,表明函数还没有加载。如果我通过高亮显示源文件并按Alt Enter键运行它们来加载源文件,以便将它们加载到内存中,然后单击运行应用程序,代码就可以工作了。但是,如果我依赖Run App加载这些源文件以及其中的函数,则无法找到这些函数。
source('./functionsGeneral.R')
source('./functionsQuote.R')
source('./functionsNewBusiness.R')
source('./ui.R')
source('./server.R')
shinyApp(ui, server)
其中ui。R是
source('./header.R')
source('./sidebar.R')
source('./body.R')
source('./functionsUI.R')
ui <- dashboardPage(
header,
sidebar,
body
)
最后是问题
R Shiny Dashboard以何种顺序运行代码。当我将完全相同的内联代码放入另一个文件并用源代码('./functions.R(引用它时,为什么它会失败?它不会在闪亮的应用程序会话期间加载到内存中吗?我错过了什么?
如有任何帮助,我们将不胜感激。
谢谢,Travis
好的,我发现最简单的方法是创建一个名为R的子文件夹,并将预加载代码放入该文件夹中。从闪亮的1.5版本开始,R文件夹中的所有这些代码都会首先自动加载。