2017-07-07 60 views
1

我試圖創建與模塊組織的閃亮應用程序包。我找不到任何幫助,我可以找到的每個示例都不使用模塊。有人可以給我一個例子嗎?與模塊作爲包閃亮的應用程序

+2

模塊是功能。您可以像構建包時的功能一樣定義模塊功能。 (這在https://shiny.rstudio.com/articles/modules.html中建議)。你可以看看這個問題,以獲得關於這種包的機制的一些指導https://stackoverflow.com/questions/37830819/developing-shiny-app-as-a-package-and-deploying-it-to-shiny服務器 – Benjamin

回答

3

你將不得不確保ui部分以及模塊的server部分獲得出口在你的包

#' @export 
myModuleUI <- function(id){ 
    ns = NS(id) 
    plotOutput(ns("plot")) 
} 

#' @export 
myModuleServer <- function(input, output, session){ 
    output$plot <- renderPlot({hist(rnorm(100))}) 
} 

從加載你的packae腳本,那麼你可以使用

library(myPackage) 

shinyApp(
    fluidPage(myModuleUI("someId")), 
    function(input,output,session){ 
    callModule(myModuleServer, "someId") 
    } 
) 

說到記錄你的模塊,沒有這樣做的標準方法。大多數軟件包使用最少的功能類文檔和示例應用程序 - 請參閱Joris Meys的答案。

+0

不寫那個便利包裝,你可以進入各種環境問題。 –

+0

我目前在我的包裝中使用了類似的圖案,目前一切正常。請你詳細說明這可能會導致麻煩嗎? –

+1

我在包中使用了一個類似的模式,但是當使用嵌套模塊時,它有時會混淆id鏈接。所以我刪除了它。我必須補充一點,我使用構造函數來創建基於不同模塊的類似佈局的應用程序,並允許用戶使用字符串指定他們想要的模塊。所以我的生活有點複雜,那就是問題的出現。 –

2

Gregor de Cillia爲您提供了一個如何構建UI和服務器功能並導出的好例子。在包裝完全起作用之前需要考慮一些其他事項:

  • 正如Gregor所說,導出這些功能將使它們可供最終用戶使用。
  • 確保將shiny包添加到說明文件中的取決於列表中(另請參閱Package Dependencies in the R manual)。與導入shiny軟件包相比,將其添加到依賴列表中會更有意義,因爲所有閃亮功能也應該可供最終用戶使用,而不僅僅是您的模塊功能。該標準現在使用導入而不是依賴,但在這種情況下,Depends更有意義。

爲了讓您的軟件包一流,請添加一個小例子來說明您的模塊。就拿格雷戈爾的例子,那麼你的文件夾inst/examples/moduleExample/添加到您的包,並在那裏你有一個文件app.R如下:

shinyApp(
    fluidPage(myModuleUI("someId")), 
    function(input,output,session){ 
    callModule(myModuleServer, "someId") 
    } 
) 

現在,添加例如moduleDemo函數,演示瞭如何使用該模塊。

#' @export 
moduleDemo <- function(){ 
    loc <- system.file("examples","moduleExample", 
        package = "myPackage") 
    shinyAppDir(loc) 
} 
+1

對於這個例子,使用路徑'examples/moduleExample/app.R'(和'shinyAppDir')也許是個好主意。原因是[這個PR](https://github.com/rstudio/shiny/pull/1458) –

+0

@GregordeCillia真的,相應地適應並感謝提示。 –

相關問題