我已经构建了一个闪亮的应用程序,允许用户导入遗传数据并将其可视化。我希望用户能够将其数据路径作为参数传递到服务器中。有没有办法做到这一点?该路径只是一个传递给服务器函数的字符串。
我希望将其作为参数而不是其他解决方案传递的原因是我正在创建此应用程序的R包,并且我将在包中启动将启动应用程序的函数。
此功能如下所示:
runMyApp <- function() {
shiny::runApp(system.file("myapp", package="mypackage"))
}
我有没有办法将参数传递给这个runApp函数,而该函数又被传递到服务器?
谢谢!
答案 0 :(得分:2)
我没有对此进行过广泛的测试,但似乎有效。
根据需要在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, ...)
}
然后server
内的任何功能都应该能够看到param
和test_param
并使用它。
这还有一个额外的好处,即服务器中的所有功能都可以使用包中任何未导出的功能。