我正在尝试使用模块创建一个闪亮的应用程序包。我无法找到任何帮助,我找到的每个例子都没有使用模块。有人可以举个例子吗?
答案 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和服务器功能。在软件包完全正常运行之前要考虑的其他一些事项:
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)
}