在闪亮的应用程序包中包含图像

时间:2016-08-05 14:24:39

标签: r shiny

如果您想在普通闪亮的应用中添加图片,请致电

shiny::img(src = "imgName.png")
在您的ui函数中使用以下目录结构

| shinyApp/
    | ui.R
    | server.R
| www/
    | myImage.png

你如何在一个同样是r包的闪亮应用程序中复制它?我试图完全一样,但是使用以下目录结构,没有运气:

| packageName/
    | R
        | app.R # contains ui.R and server.R
    | inst
        | www
            | imgName.png

对于它的价值,在我的情况下,软件包实际上捆绑了一个闪亮的模块,但我不认为这与此问题相关。

编辑:Minimal example使用this package演示我的问题。

3 个答案:

答案 0 :(得分:2)

使用addResourcePath添加一个目录,使其对Shiny Web服务器可见。

正如文件http://shiny.rstudio.com/reference/shiny/latest/addResourcePath.html

所述
  

使用给定的路径前缀向Shiny的Web服务器添加静态资源目录。主要用于包装作者为其组件提供支持的JavaScript / CSS文件。

它应该允许您引用包中的任何文件。

答案 1 :(得分:1)

您有多个选项。最简单的方法是将png文件放在inst文件夹中,然后使用system.file("imgName.png",package="yourPackage")

访问它

如果您将代码更改为shiny::img(src="www/imgName.png"),您的方法应该可行,但我不确定。

答案 2 :(得分:0)

Divad Nojnarg的“ CaPO4 sim”中找到了一个有效的示例,如issue I raised中有关在闪亮的dashboardPlus用户描述中引用本地图标文件所述。

总而言之,引用本地图像文件的一种方法是在zzz.R目录中添加R/文件。

.onAttach <- function(libname, pkgname) {
  shiny::addResourcePath('www',
                         system.file('www',
                                      package = 'DailyMeasure'))
}

其中软件包名称为 DailyMeasure

图像文件位于inst/www/imgname.png中。

像这样在Shiny的服务器部分中引用该文件...

output$user <- shinydashboardPlus::renderUser({
  shinydashboardPlus::dashboardUser(
    name = UserConfig()$Fullname[UserConfig()$AuthIdentity == Sys.info()[["user"]]],
    src = 'www/imgname.png', # this depends on addResourcePath in zzz.R
    subtitle = Sys.info()[["user"]], ... )})
相关问题