4

我制作了一个闪亮的仪表板应用程序,它现在有相当多的代码行,我想知道是否有办法将代码拆分为不同的 . R 文件。我在这里看到了一个类似的问题,但答案没有帮助(特别是它没有说明应用程序服务器部分的代码)。

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

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

header它运行良好,如果函数、sidebarbody需要有参数,它仍然有效。

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

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

4

3 回答 3

2

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

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

于 2015-07-10T18:30:15.470 回答
2

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

  1. source在任何反应函数之外的常规 R 中像通常那样使用。

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

于 2015-07-13T03:49:22.980 回答
2

对于服务器端:

服务器.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))
 })
}
于 2015-11-07T15:14:21.673 回答