将参数传递到Shiny服务器

时间:2017-07-09 18:22:40

标签: r shiny

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

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

此功能如下所示:

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

我有没有办法将参数传递给这个runApp函数,而该函数又被传递到服务器?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

根据需要在ui中定义闪亮的serverinst/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, ...)
}

然后server内的任何功能都应该能够看到paramtest_param并使用它。

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

Here's an example of how I do it in my package,定义了启动功能here