在shiny :: shinyApp中设置www位置

时间:2017-10-02 01:18:12

标签: r shiny filepath package-development

我目前正在创建一个闪亮的应用,可以通过包装函数使用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)。 shinyApprunApp似乎没有合适的参数。将工作目录设置为资源文件夹或上面的一个级别也不起作用。

这是一个简短的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函数的包时,我会收到警告。发生这些警告是因为程序包会破坏建议的程序包开发范围模型。

1 个答案:

答案 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)

<强>更新
使用

创建一个脚本 myapp_script.R
shinyApp(
  fluidPage(tags$img(src='image.gif')),
  server <- function(...){}
)

然后拨打runApp("myapp_script.R")