2015-07-10 43 views
3

我已經制作了一個shinydashboard應用程序,它現在有相當多的代碼行,並且我想知道是否有方法將代碼拆分爲不同的代碼。 R文件。我見過類似的問題here,但答案並沒有幫助(特別是它沒有提到應用服務器部分的代碼)。如何在閃亮或shinydashboard應用程序中管理我的R代碼?

對UI的部分,我已經創建函數調用headersidebarbody,然後我只是寫

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

它運作良好,而且它仍然有效,如果功能headersidebarbody需要有參數。

對於服務器部分,我不認爲可以應用類似的策略。我想知道是否可以編寫「本地」服務器功能(例如每個菜單項),然後統一到一箇中央服務器功能中。

你認爲這樣的事情是可行的嗎?更一般地說,感謝您的建議和想法,這可以使我的代碼更易於管理。

+0

這個問題也許應該被刪除,因爲它太一般了。查看關於模塊化閃亮應用的討論。例如,我剛剛編寫了幾百行縮短我的app.R的函數,但它不一定適用於您的應用程序。但是,你應該在應用程序內使用'source(「HelperFunctions.R」)'。 – jrzelling

回答

2

我不確定這是否符合您的要求,您可以創建不同的文件並在這些文件中執行所需的計算,並使用R中的saveRDS()將所有對象(數據框或列表或任何文字)保存到.RDS文件中。然後使用loadRDS()將該文件加載到server.R中,該文件將包含所有保存的對象。你可以找到文檔here

然後,通過在早先保存時調用名稱來簡單地使用這些對象。大多數複雜的Shiny應用程序使用global.R文件(只是一個常規,您可以使用任何名稱)進行繁重的計算並遵循上述方法。

2

您可以隨時使用source來調用server.R其他R上的文件:

  1. 使用source,你通常會做定期R的外側任何反應功能。

  2. 使用source("xxxxx", local=T)當您想在反應函數中使用它時,每次激活這段反應代碼時,您所調用的r代碼都會運行。

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)) 
}) 
} 
相關問題