0%

使用golem包开发Shinyapp

在之前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团队)推荐配合shinipsumfakirshinysnippets等R包的使用可以增加开发效率

详细文档资料可阅读:https://thinkr-open.github.io/golem/

本文出自于http://www.bioinfo-scrounger.com转载请注明出处