将参数传递到 Shiny 服务器

Aru*_*run 1 r shiny

我已经构建了一个闪亮的应用程序,它允许用户导入基因数据并将其可视化。我希望用户能够将其数据的路径作为参数传入服务器。有没有办法做到这一点?路径只是一个传递给服务器函数的字符串。

我希望将其作为参数而不是其他解决方案传入的原因是我目前正在创建此应用程序的 R 包,并且我将在包中拥有一个将启动应用程序的函数。

这个函数看起来像这样:

runMyApp <- function() {
  shiny::runApp(system.file("myapp", package="mypackage"))
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让我将参数传递给这个 runApp 函数,然后传递给服务器吗?

谢谢!

Ale*_*xis 7

我还没有对此进行广泛的测试,但它似乎有效。

定义闪亮的ui,并server根据需要在inst/myapp.R (我假设的变量有这些名字),但shinyApp。然后在你的包中你可以定义一个函数,如:

launch_app(param, ...) {
  file_path <- system.file("myapp.R", package = "mypackage")
  if (!nzchar(file_path)) stop("Shiny app not found")
  ui <- server <- NULL # avoid NOTE about undefined globals
  source(file_path, local = TRUE)
  server_env <- environment(server)

  # Here you add any variables that your server can find
  server_env$test_param <- "test"
  server_env$param <- param

  app <- shiny::shinyApp(ui, server)
  shiny::runApp(app, ...)
}
Run Code Online (Sandbox Code Playgroud)

然后里面的任何功能server应该能够看到paramtest_param使用它。

这还有一个额外的好处,即服务器中的所有函数都可以使用包中任何未导出的函数。

这是我如何在我的包中执行此操作的示例,并在此处定义了启动函数。