如何在闪亮或shinydashboard应用程序中管理我的R代码?

如何在闪亮或shinydashboard应用程序中管理我的R代码?

问题描述:

我已经制作了一个shinydashboard应用程序,它现在有相当多的代码行,并且我想知道是否有方法将代码拆分为不同的代码。 R文件。我见过类似的问题here,但答案并没有帮助(特别是它没有提到应用服务器部分的代码)。如何在闪亮或shinydashboard应用程序中管理我的R代码?

对UI的部分,我已经创建函数调用headersidebarbody,然后我只是写

ui <- dashboardPage(header(), sidebar(), body()) 

它运作良好,而且它仍然有效,如果功能headersidebarbody需要有参数。

对于服务器部分,我不认为可以应用类似的策略。我想知道是否可以编写“本地”服务器功能(例如每个菜单项),然后统一到一个中央服务器功能中。

你认为这样的事情是可行的吗?更一般地说,感谢您的建议和想法,这可以使我的代码更易于管理。

+0

这个问题也许应该被删除,因为它太一般了。查看关于模块化闪亮应用的讨论。例如,我刚刚编写了几百行缩短我的app.R的函数,但它不一定适用于您的应用程序。但是,你应该在应用程序内使用'source(“HelperFunctions.R”)'。 – jrzelling

我不确定这是否符合您的要求,您可以创建不同的文件并在这些文件中执行所需的计算,并使用R中的saveRDS()将所有对象(数据框或列表或任何文字)保存到.RDS文件中。然后使用loadRDS()将该文件加载到server.R中,该文件将包含所有保存的对象。你可以找到文档here

然后,通过在早先保存时调用名称来简单地使用这些对象。大多数复杂的Shiny应用程序使用global.R文件(只是一个常规,您可以使用任何名称)进行繁重的计算并遵循上述方法。

您可以随时使用source来调用server.R其他R上的文件:

  1. 使用source,你通常会做定期R的外侧任何反应功能。

  2. 使用source("xxxxx", local=T)当您想在反应函数中使用它时,每次激活这段反应代码时,您所调用的r代码都会运行。

对于服务器端:

server.R:

library(shiny) 
source('sub_server_functions.R') 

function(input, output, session) { 
    subServerFunction1(input, output, session) 
    subServerFunction2(input, output, session) 
    subServerFunction3(input, output, session) 
} 

这为我工作,有可能你需要传递更多变量的子服务器功能。但是无功输出的范围似乎允许这样做。

sub_server_functions.R:

subserverfunction1 <- function(input, output, session) { 
    output$checkboxGroupInput1 <- renderUI({ 
    checkboxGroupInput('test1','test1',choices = c(1,2,3)) 
}) 
} 

subserverfunction2 <- function(input, output, session) { 
    output$checkboxGroupInput2 <- renderUI({ 
    checkboxGroupInput('test2','test2',choices = c(1,2,3)) 
}) 
} 

subserverfunction3 <- function(input, output, session) { 
    output$checkboxGroupInput3 <- renderUI({ 
    checkboxGroupInput('test3','test3',choices = c(1,2,3)) 
}) 
}