是否有更好的方法让小组内的程序员寻求共享闪亮应用程序或rmarkdown文档的通用样式,以便从单个位置访问css文件,而不是手动将所需文件复制到每个应用程序的子内容或文件?
理想的结果是将文件放在github仓库中,然后通过其Web链接将其附加到任何闪亮的应用程序或rmarkdown文件中,这可能吗?
谢谢。
答案 0 :(得分:3)
将样式表包含在R包中可能会更容易。这样一来,您每次加载应用或打开文档时都无需外部请求。将css文件放置在inst
中的文件夹中,并编写一个R函数,该函数将资源路径设置为css并相应地加载文件。
假设您的包裹具有以下结构。 (对于此示例,我为软件包mypkg
命名)
mypkg/
R/
use_stylesheets.R
inst/
stylesheets/
styles.min.css
...
...
在use_stylesheets.R
中,使用tags$head
创建一个将样式表加载到文档标题(tags$link
)中的函数。
use_stylesheets <- function() {
shiny::addResourcePath(
"styles",
system.file("stylesheets", package = "mypkg")
)
shiny::tags$head(
shiny::tags$link(rel = "stylesheet", href = "styles.min.css")
)
}
然后在您的应用程序或Rmarkdown文档中,可以使用mypkg::use_stylesheets()
答案 1 :(得分:1)
经过一番修补,我能够使用这些结构将包中的css或html添加到Shiny Apps和Rmarkdown文档中,从而获得成功(等待同事在其计算机上进行测试)。
# For attaching a css file to an Rmarkdown file
use_package_style_rmd <- function(css_file = "my_css.css"){
# css file
file_name <- paste0("/", css_file)
file_path <- paste0(system.file("stylesheets", package = "my_pkg"), file_name)
shiny::includeCSS(path = file_path)
}
# For placing an HTML headers/footers in place
use_package_header <- function(html_file = "my_header.html"){
# HTML Header
file_name <- paste0("/", html_file)
file_path <- paste0(system.file("stylesheets", package = "my_pkg"), file_name)
shiny::includeHTML(path = file_path)
}
# For attaching css to a shiny app via resourcePath
use_package_style_shiny <- function(stylesheet = "my_css.css"){
# Add Resource Path
shiny::addResourcePath(
prefix = "styles",
directoryPath = system.file("stylesheets", package = "my_pkg"))
# Link to App
shiny::tags$head(
shiny::tags$link(rel = "stylesheet",
href = paste0("styles/", stylesheet)))
}
use_package_style_rmd
函数可以放置在任何代码块中,而标头函数将在运行该函数的位置添加html。
对于Shiny应用程序用例,应运行该函数以建立文件夹的资源路径,然后在UI中fluidpage
下,可以使用Resource的前缀将theme选项设置为css文件。路径styles/my_css.css
。
我仍然遇到的一个问题可能是一个单独的问题,即在哪里放置支持图像文件,以及如何添加相对路径以使图像可以放置在页眉或页脚中。