在之前Shiny reference resoures中提到一篇book(Engineering Production-Grade Shiny Apps),里面提到构建一个R package来展示以及分享Shiny app,并且推荐用golem包来搭建Shiny app package的框架
{golem} is an opinionated framework for building production-grade shiny applications
文档资料:https://thinkr-open.github.io/golem/
golem包的一些便捷的函数确实能帮我们减少一些R包开发中的重复操作
Getting Started with {golem}
使用Rstudio打开"Package for Shiny App Using golem"项目,或者使用下述函数创建shiny项目
golem::create_golem(path = "./myshinyfk")
你会发现项目目录下已经生成的R包所需的基本文件以及一些shiny脚本示例
#> ├── DESCRIPTION
#> ├── NAMESPACE
#> ├── R
#> │ ├── app_config.R
#> │ ├── app_server.R
#> │ ├── app_ui.R
#> │ └── run_app.R
#> ├── dev
#> │ ├── 01_start.R
#> │ ├── 02_dev.R
#> │ ├── 03_deploy.R
#> │ └── run_dev.R
#> ├── inst
#> │ ├── app
#> │ │ └── www
#> │ │ └── favicon.ico
#> │ └── golem-config.yml
#> └── man
#> └── run_app.Rd
使用golem::fill_desc()
函数修改DESCRIPTION
文件,或者手动打开修改
golem::set_golem_options()
函数用于设置一些golem的参数
-- Setting {golem} options -----------------------------------------------------
√ Setting options('golem.pkg.name') to myshinyfk
√ Setting options('golem.pkg.version') to 0.0.0.1
√ Setting options('golem.wd') to C:/Users/anlan/Documents/myshinyfk
You can change golem working directory with set_golem_wd('path/to/wd')
√ Setting options('golem.app.prod') to FALSE
配合usethis
包自动化处理R包开发中的一些操作,具体可见?usethis
golem::use_recommended_tests()
生成一个模板用于测试,必选~
golem::use_recommended_deps()
在DESCRIPTION
文件中增加依赖包,手动添加也可以
使用golem::use_utils_ui()
和golem::use_utils_server()
生成两个R包中常见的utils文件,可将一些常用的自定义函数写入其中
Day to Day Dev with {golem}
在golem包中我最喜欢用的函数则是golem::add_module()
,其能帮助我们快捷的生成一个module模板,一些基本的代码会预先生成,然后我们只需要在其基础上进行个性化的添加即可
golem::add_module( name = "my_first_module" ) # Name of the module
示例如下:
# mod_UI
mod_my_first_module_ui <- function(id){
ns <- NS(id)
tagList(
)
}
mod_my_first_module_server <- function(input, output, session){
ns <- session$ns
}
## To be copied in the UI
# mod_my_first_module_ui("my_first_module_1")
## To be copied in the server
# callModule(mod_my_first_module_server, "my_first_module_1")
也可以生成一些CSS/JS文件
golem::add_js_file("script")
golem::add_js_handler("script")
golem::add_css_file("custom")
如果Shiny package需要用到一些数据集,则可以用usethis::use_data_raw()
或者usethis::use_data()
如果想生成一个Vignette(一般在看R包用法时常见的一个文档),可以先用usethis::use_vignette("shinyexample")
在vignette目录下生成一个shinyexample.Rmd
,修改完这个rmd文件后,再用devtools::build_vignettes()
在doc目录下生成shinyexample.html
文件
如果写完代码后想测试下shiny app,可直接在运行下run_app()
(前提先build下package),也可以在dev/run_dev.R
文件中修改此函数的一些自定义参数
Deploying Apps with {golem}
对于部署shiny app,一般我们常用的有以下三种方式
- 部署到服务器上的shiny server(操作简单,有台服务器即可)
- 部署到Shiny的公共服务器shinyapps.io上
- 部署到Rstudio connect(收费,但是功能蛮适合平台化使用的,后续可以介绍下)
gelem包也提供的函数接口方便我们部署,但是也可以手动部署,也不费事
golem::add_rstudioconnect_file()
golem::add_shinyappsio_file()
golem::add_shinyserver_file()
对于docker,其也提供的部署接口,但我还未尝试过,有兴趣的话可以再试试。。。
Suumary
总之,golem
包非常适合用于开发shiny package,并且作者(ThinkR团队)推荐配合shinipsum
,fakir
,shinysnippets
等R包的使用可以增加开发效率
详细文档资料可阅读:https://thinkr-open.github.io/golem/
本文出自于http://www.bioinfo-scrounger.com转载请注明出处