构建包时仅将特定变量传递给闪亮的应用程序

Pass only specific variables to a shiny app when building a package

我正在构建一个包,其中包含我闪亮的应用程序。

为此,我围绕我的 "shiny::runApp" 调用构建了一个包装器,但不幸的是,闪亮的应用程序使用了全局工作区变量。 我希望包装函数使用我提供给函数的变量(如果没有补充则出错)并将它们用于闪亮。例如,它需要 x,y 和 z(它有一个默认值):

Shiny_wrapper <- function(x,y,z=TRUE){
    shiny::runApp(appDir = system.file("shinyApp", package = "WebFlood"))
}

我通过将变量分配给全局工作区来解决这个问题,但我认为这不是正确的方法:

Shiny_wrapper <- function(x,y,z=TRUE){
    x<<-x
    y<<-y
    z<<-z
    shiny::runApp(appDir = system.file("shinyApp", package = "WebFlood"))
}

如何让我闪亮使用我传递给包装器的变量?

你可以在你的包中定义一个环境,并用它来传递一些变量。

PKGENVIR <- new.env(parent=emptyenv()) 

#' @export
Shiny_wrapper <- function(x,y,z=TRUE){
    PKGENVIR$x <- x
    PKGENVIR$y <- y
    PKGENVIR$z <- z
    shiny::runApp(appDir = system.file("shinyApp", package = "WebFlood"))
}

然后在闪亮的应用程序中(在 global.Rserver.R 中):

x <- WebFlood:::PKGENVIR$x