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

时间:2015-07-10 18:06:28

标签: r shiny shinydashboard

我已经制作了一个shinydashboard应用程序,现在有相当多的代码行,我想知道是否有办法将代码分成不同的代码。 R文件。我已经看到了类似的问题here,但答案没有帮助(特别是它没有说明应用程序服务器部分中的代码)。

对于ui部分,我创建了名为headersidebarbody的函数,然后我只写了

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

效果很好,如果函数headersidebarbody需要有参数,它仍然有效。

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您始终可以使用source来调用server.R中的其他R文件:

  1. 正常情况下使用source在任何反应函数之外的常规R中。

  2. 如果要在反应函数中使用source("xxxxx", local=T),请使用<button id="sync" onclick="showToast1()" value="3C0055">sync</button> ,以便每次激活此反应代码时,您调用的r代码将运行。

答案 2 :(得分:2)

对于服务器端:

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))
 })
}