我目前正在创建一个闪亮的应用,可以通过包装函数使用shiny::shinyApp
调用。
startApp <- function(param1, param2, ...){
# in fact, ui and server change based on the parameters
ui <- fluidPage()
server <- function(...){}
runApp(shinyApp(ui, server))
}
当我包含资源(如图像,视频等)时,我目前使用addResourcePath
命令并包含带前缀的资源。但是,我想在常规应用中添加“默认资源路径”(appDir/www
)。 shinyApp
或runApp
似乎没有合适的参数。将工作目录设置为资源文件夹或上面的一个级别也不起作用。
这是一个简短的MWE。
## ~/myApp/app.R
library(shiny)
shinyApp(
fluidPage(tags$img(src = "image.gif")),
server <- function(...){}
)
## ~/myApp/www/image.gif
# binary file
如果我通过RunApp("~/myApp")
运行应用程序,一切正常,但
setwd("~/myApp")
myApp <- shinyApp(source("app.R")$value)
runApp(myApp)
将无法显示图像。任何建议都表示赞赏。
我想基于shiny.appobj
(代表应用程序的对象)而不是文件路径启动应用程序的原因是,后一种方法在将参数传递给应用程序时效果不佳。 Here是关于此主题的讨论。
将参数传递给runApp("some/path")
调用的应用的推荐方法如下:
startApp <- function(param1, param2, ...) {
.GlobalEnv$.param1 <- param1
.GlobalEnv$.param2 <- param2
.GlobalEnv$.ellipsis <- as.list(...)
on.exit(rm(.param1, .param2, .ellipsis, envir = .GlobalEnv))
runApp("~/myApp")
}
这种方法只是丑陋的IMO,当我构建包含app和startApp
函数的包时,我会收到警告。发生这些警告是因为程序包会破坏建议的程序包开发范围模型。
答案 0 :(得分:0)
在shiny::runApp
的帮助文档中,它说appDir
可能是以下任何一种:
包含server.R的目录,以及ui.R或www目录 包含文件index.html。
包含app.R。
的目录包含Shiny应用程序的.R文件,以表达式结尾 这会产生一个闪亮的应用程序对象。
包含ui和服务器组件的列表。
由shinyApp创建的闪亮应用对象。
当您通过RunApp("~/myApp")
运行时,它是包含app.R 的目录
如果您想通过由shinyApp
你可以尝试像
这样的事情myapp_obj <- shinyApp(
fluidPage(tags$img(src = "image.gif")),
server <- function(...){}
)
runApp(myapp_obj)
<强>更新强>
使用
shinyApp(
fluidPage(tags$img(src='image.gif')),
server <- function(...){}
)
然后拨打runApp("myapp_script.R")