0%

Shiny Packages Resources

shinythemes

使用shinythemes包,可以给shiny app设置一个Bootstrap theme,使其看起来更加美观

所有的theme均来自于http://bootswatch.com/,现在这个包里所包含的theme有大约16种,我们可以在ui.R里写入shinythemes::themeSelector()来调用一个theme选择器,你可以在选择器的下拉框中依次查看每个theme的效果,示例代码展示网站:https://gallery.shinyapps.io/117-shinythemes/

如果确定选择某个theme后,则在ui.R中用下述代码调用

theme = shinytheme("cerulean")

有从上述Bootstrap网站中下载的主题(未包含在shinytheme包),可以将bootstrap.css放在www文件夹下,然后再用theme参数调用theme = bootstrap.css #### shinyalert

shinyalert包主要是用于生成一个messages Modal,跟shiny自带的Modal dialogs很类似,包的作者(Dean Attali,一位shiny大牛,还写了shinyJS包)在其基础加上了一点JS库功能,使其不仅仅用于展示对话框messages,而且还能接受信息并且对其处理

使用shinyalert,需要在ui.R中加上useShinyalert()(跟shinyJS调用方式一样)

然后就能在server.R中用shinyalert()函数来实现你的messages Modal,如下加个警告通知:

shinyalert("Oops!", "Something went wrong.", type = "error")

如果想增加OK和Cancel按钮来确定返回的值(对应就是TRUE和FALSE),则需要在shinyalert函数中增加confirmButtonTextcancelButtonText,如果点击框外部也当Cancel返回,如下:

shinyalert(
    title = "Hello",
    text = "This is a modal",
    closeOnClickOutside = TRUE,
    type = "success",
    showConfirmButton = TRUE,
    showCancelButton = TRUE,
    confirmButtonText = "OK",
    cancelButtonText = "Cancel"
)

如果将type参数改为type = "input",则在Modal会有一个可输入框,然后用input$shinyalert来接受输入,如:

shinyalert(
    "Enter your name", type = "input",
)
output$txt <- renderText(paste0("Your name is: ", input$shinyalert))

此外可以还通过callbackR函数接受回调信息

shinyalert(
    "Enter your name", type = "input",
    callbackR = function(x) { if(x != FALSE) message("Hello ", x) }
)

利用这个回调信息,可以再次结合shinyalert给出提示Modal(但是不知道为啥有BUG了)

shinyalert(
    title = "What is your name?", type = "input",
    callbackR = function(value) { shinyalert(paste("Welcome", value)) }
)

至于shiny内置的Modal,是搭配使用showModal()modalDialog()函数,其比shinyalert优势在于可以在modal上放置各种形式的插件input或者文档rmarkdown等,如下所示:

observeEvent(input$show, {
  showModal(modalDialog(
    title = "Important message",
    "This is an important message!",
    fileInput(inputId = "list", label = "File Input:", accept = c(".txt")),
    includeMarkdown("www/about.md"),
    easyClose = TRUE
  ))
})

shinyBS

shinyBS包可以将一些Bootstrap Components添加到shiny程序上,使得shiny app更具互动性

shinyBS是将alerts和Modals分成两个块:

  • Alerts主要由bsAlert()createAlert()closeAlert()组成,首先是在ui.R代码中用bsAlert()确定alerts的位置,然后在server.R代码中用createAlert()创建alerts内容,最后用closeAlert()关闭,示例如:https://ebailey78.github.io/shinyBS/docs/Alerts.html#bsAlert

  • Modals中最常用的则是bsModal()函数,在不少shiny app中见过,使用比较简单,展示形式跟shiny自带的Modal也是差不多,在ui.R中写入如下代码:

    bsModal(id = "modalExample", title = "Data Table", trigger = "tabBut", size = "large", dataTableOutput("distTable"))

    如果想对这个modal进行控制(open or close),则可以在server.R中使用toggleModal函数,如下:

    toggleModal(session, modalId = "modalExample", toggle = "open")

Collapses主要用于收缩或者展开panels(展开或者关闭),首先在ui.R中用bsCollapse()创建一个组,然后在组下用bsCollapsePanel()函数控制各个子panels,最后在server.R中用updateCollapse()函数控制panels的变化,示例如:https://ebailey78.github.io/shinyBS/docs/Collapses.html

Buttons主要用于对shiny自带的buttons进行改进(样式、大小、是否block等),在ui.Rserver.R下分别是bsButton()updateButton()

# ui.R
bsButton("actOne", label = "Block Action Button", block = TRUE)
# server.R
updateButton(session, "actOne", disabled = !input$togOne)

Tooltips和Popovers简单的说就是是UI界面上增加上一些提示信息,以免提示信息文字对UI界面整体造成过于的杂乱感,很好记,前者就是鼠标悬浮在某个插件上就跳出提示信息,后者则是鼠标点击某个区域后跳出提示信息,示例如:https://ebailey78.github.io/shinyBS/docs/Tooltips_and_Popovers.html

colourpicker

colourpicker包主要用于创建一个颜色选择插件

其主要函数是colourInput(),根据其不同参数,可以用于多种形式的颜色选择,我比较喜欢的一种是:

colourInput(inputId = "col", label = "corlor (e.g., blue)", value = "blue", palette = "limited", returnName = TRUE)

其还有一个plotHelper()函数有非常有趣,其可以让你实时查看,当你选择不同颜色时,在图片上呈现的结果是怎么样的,作者还做了个GIF文件可供学习:GIF

DT

DT包主要是给JS的DataTables库提供了一个R接口,可以将R的表格以更加美观的形式展示(包括html)以及提供一定的交互操作,可参照官网文档以及笔记:Learning DT包

shinydashboard

shinydashboard包主要是提供了一个框架,方便让shiny来实现dashboards,可操作性比较强,有不少独立于shiny之外的布局函数,但是最终界面确实蛮好用的,可看下官方的例子http://rstudio.github.io/shinydashboard/examples.html

官方使用文档http://rstudio.github.io/shinydashboard/get_started.html

shinyLP

shinyLP包主要提供了一些函数用于设计一个shiny版的home page(或者说 Landing page)

可以用shinyLP::runExample()查看下作者给的几个模块,并给出了每个模块所使用的代码,所以可以根据个人需求,从代码中挑选合适的函数,可以用用

我一般用用jumbotron()函数和thumbnail_label()来设置布局

shinyjs

把shinyJS包写在最后,是因为这是一个非常棒的shiny包,如果你不太懂JS的话,这个包能让你在不会JS的前提下使用一些JS的功能,只能说非常好用,值得好好尝试下,内容比较多,大概要好好整一整。。。

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