我构建了一个闪亮的应用程序,允许用户导入基因数据并将其可视化。我希望用户能够将其数据的路径作为参数传递到服务器中。有什么办法可以做到这一点吗?路径只是传递到服务器函数的字符串。
我希望将其作为参数而不是其他解决方案传入的原因是,我目前正在创建此应用程序的 R 包,并且我将在包中有一个将启动该应用程序的函数。
此函数将如下所示:
runMyApp <- function() {
shiny::runApp(system.file("myapp", package="mypackage"))
}
有什么方法可以将参数传递到这个runApp函数中,然后该函数又传递到服务器中?
谢谢!
我没有对此进行广泛测试,但它似乎有效。
根据需要定义 Shiny 的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
并使用它。
这也具有额外的优势,即服务器中的所有函数都将能够使用包中的任何未导出函数。
下面是如何在包中执行此操作的示例,此处定义了启动函数。