我已经制作了一个shinydashboard应用程序,现在有相当多的代码行,我想知道是否有办法将代码分成不同的代码。 R文件。我已经看到了类似的问题here,但答案没有帮助(特别是它没有说明应用程序服务器部分中的代码)。
对于ui部分,我创建了名为header
,sidebar
和body
的函数,然后我只写了
ui <- dashboardPage(header(), sidebar(), body())
效果很好,如果函数header
,sidebar
和body
需要有参数,它仍然有效。
对于服务器部分,我认为不能应用类似的策略。我想知道是否可以编写“本地”服务器功能(例如,每个菜单项一个),然后重新统一到一个中央服务器功能。
你认为这样的事情是可行的吗?更一般地说,感谢您的建议和想法,使我的代码更易于管理。
答案 0 :(得分:2)
我不确定这是否符合您的要求,您可以创建不同的文件并在这些文件中执行所需的计算,并使用saveRDS()
将所有对象(数据框或列表或字面上的任何内容)保存到.Rds文件中在R中,然后使用loadRDS()
将该文件加载到server.R中,该文件将包含所有已保存的对象。您可以找到文档here。
然后通过调用之前保存的名称来简单地使用这些对象。大多数复杂的Shiny应用程序使用global.R
文件(只是一般约定,您可以使用任何名称)来执行繁重的计算并遵循上述方法。
答案 1 :(得分:2)
您始终可以使用source
来调用server.R中的其他R文件:
正常情况下使用source
在任何反应函数之外的常规R中。
如果要在反应函数中使用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))
})
}