闪亮的应用程序与模块作为一个包

时间:2017-07-07 12:06:13

标签: r shiny

我正在尝试使用模块创建一个闪亮的应用程序包。我无法找到任何帮助,我找到的每个例子都没有使用模块。有人可以举个例子吗?

2 个答案:

答案 0 :(得分:5)

您必须确保将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的答案。

答案 1 :(得分:3)

Gregor de Cillia为您提供了一个很好的例子,说明如何构建和导出UI和服务器功能。在软件包完全正常运行之前要考虑的其他一些事项:

  • 正如Gregor所说,导出这些功能将使它们可供最终用户使用。
  • 确保将shiny包添加到说明文件中的“取代”列表中(另请参阅Package Dependencies in the R manual)。与导入shiny包相比,将它添加到依赖列表更有意义,因为所有闪亮的功能也应该对最终用户可用,而不仅仅是模块功能。现在的标准是使用import而不是依赖,但在这种情况下,Depends更有意义。

为了使您的包装成为一流,请添加一个说明您的模块的小例子。以Gregor为例,然后在包中添加一个文件夹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)
}