zoukankan      html  css  js  c++  java
  • R语言shiny包的学习

    shiny是一个R语言中的网络应用程序框架,可以将你的数据分析变成交互式的网络应用(web apps),简单又实用。

    基本用法

    一个shiny应用可以分为两部分:前端和后端,其实所有的shiny应用都是基于以下的模版:

    ui = fluidPage()
    server = function(input, output) {}
    shinyApp(ui = ui, server =server )

    其中,fluidPage中主要有两部分:输入函数,和输出函数

    输入函数

    输入函数基本上都是以 *input的形式,主要有以下

    • 按钮 actionButton()、submitButton()
    • 单个选框 checkboxInput()
    • 一组选框 checkboxGroupInput()
    • 日期输入 dateInput()
    • 日期范围 dateRangeInput()
    • 文件上传  fileInput()
    • 数字输入 numericInput()
    • 密码输入 passwordInput()
    • 单选框 radioButtons()
    • 下拉选择框 selectInput()
    • 滚动条 sliderInput()
    • 文字输入 textInput()

    输出函数,有以下几种:

    • 一个可交互表 datatableOutput()
    • 原始的HTML htmlOutput()
    • 图片 imageOutput()
    • 画图 plotOutput(),plotOutput("hist")
    • 表 tableOutput()
    • 文字 textOutput()
    • Shiny UI元素 uiOutput()
    • 文字 verbatimTextOutput()

     而将输入转化为输出的函数,便是server()函数了,写server()函数有3步:

    1. 用output$**来存储要输出的对象,例如output$hist, 其中hist就是plotOutput中所命名的
    2. 用render*()来创建要输出的对象,其中render*()函数有以下各种:renderDataTable(),renderImage(),renderPlot(),renderPrint(),renderTable(),renderText(),renderUI()
    3. 用input$* 来连接调用input中的参数

    shiny的基本用法就是这样了,下面是个完整的小案例:

    library(shiny)
    
    ui <- fluidPage(
        sliderInput(inputId = "num",
            label = "Choose a number",
            value = 25, min = 1, max = 100),
        plotOutput("hist")
    ) 
    
    server <- function(input, output) {
        output$hist <- renderPlot({
            hist(rnorm(input$num))
        })
    }
    
    shinyApp(ui = ui, server = server)    

     更多的shiny应用案例见https://github.com/rstudio/shiny-examples

     另外,响应表达式的两种方法(例如用于生成一组随机数,在不同的地方调用,保证是调用的同一组数):

    • 像调用函数一样调用响应表达式,例如:

    • 反应式表达式缓存它们的值(表达式将返回其最近的值,除非它已经失效)

     此外,还有一些其他可能会用到的函数:

    1. 将结果作为非反应性值返回:isolate({}),例如  hist(rnorm(input$num),main = isolate({input$title}))
    2. observeEvent()监听事件 observeEvent(input$clicks, { print(input$clicks)}), 更多button使用方法见此(点击
    3. observe()触发代码在服务器上运行,使用语法与render*(), reactive(), and isolate()相同
    4. eventReactive()延迟按钮事件等,用法与reactive()相同
    5. reactiveValues()创建一个响应值的列表来进行编程操作,例如

    嵌入HTML

    嵌入HTML的两种方法:

    •  用tags$*,支持很多,如a(),br(),code(),em(),h*(),hr(),img(),p(),strong()等
    • 直接用HTML("  "),引号里面即为HTML的原始代码

    布局

    布局的两个主要函数:

    • fluidRow()创建一行,每一个新行置于上一行的下面
    • column()在一行中添加列,每一个列从左边起,总共有12列,可用width指定需要几列的宽度,用offset指定从左边的偏移列数

    面板布局,有以下多种:

    • absolutePanel(),绝对布局
    • conditionalPanel(),一个JS表达式决定是否显示
    • fixedPanel(),面板固定到浏览器窗口,不滚动页面
    • headerPanel(),标题面板,同pageWithSidebar()一起用
    • inputPanel(),灰色背景,适用于一组输入
    • mainPanel(),显示输出的面板,可同pageWithSidebar()一起用
    • navlistPanel(),用于显示多个堆叠的tabPanels()面板,使用侧边栏导航
    • sidebarPanel(),用于显示输入的侧栏面板,可同pageWithSidebar()一起使用
    • tabPanel(),堆叠面板,同navlistPanel(),tabsetPanel()一起使用
    • tabsetPanel(),用于显示多个堆叠的tabPanels()面板,使用侧边栏导航
    • titlePanel(),标题面板,同pageWithSidebar()一起用
    • wellPanel(),灰色背景的面板

    还有一些预定义好的一些布局:

    • sidebarLayout( sidebarPanel(), mainPanel() ),左边标题栏,右边是主体
    • ui = fixedPage( fixedRow( column(5,#etc.) ) ),固定页面,默认宽度是1170px
    • navbarPage() 把不同的tab面板堆叠,面板栏在上部,需要title参数。内部可结合tabPanel()使用
    • navbarMenu(),不同的tab的下拉菜单,可用在navbarPage内部
    • dashboardPage(),来自shinydashboard包,内部同dashboardHeader()(上方标题),dashboardSidebar()(左方侧栏),dashboardBody()(中间主体),更多见此

     样式

    shiny所用的是Bootstrap 3 CSS框架。

    嵌入css样式有3中方法:

    • 链接到外部的css文件
    1. 在你的App文件夹下创建www文件夹,并将css文件放置其中
    2. 然后用fluidPage()的theme属性设置为css文件的名字,或者用tags$head进行设置,如下 tags$head( tags$link( rel = "stylesheet", type = "text/css", href = "file.css" ) ) 
    • 在header中写全局css样式,例如 tags$head( tags$style(HTML(" p { color:red; } ")) ) ,或者直接用 includeCSS("file.css") 
    • 在tag的style属性中添加个体的css样式,例如 tags$h1("Title", style = "color:red;") 

    shiny的中文教程见此,其中有关于从客户端获取数据的内容。

     此外,使用时shiny时经常要使用DT包展示数据表格,其常用链接:DT包介绍DT的APIDT常用设置

  • 相关阅读:
    右键菜单:锁到任务栏丢失 修复
    检测到鼠标时自动禁用触摸板 (注:仅适用于个别笔记本)
    清除右键菜单CMD入口
    VBS编辑字段
    VBS创建数据表
    VBS创建数据库
    QTP操作论坛回复编辑框----webelement
    数字排序
    对应键盘的ASCII码(备忘)
    将字符串打乱输出
  • 原文地址:https://www.cnblogs.com/Hyacinth-Yuan/p/8372563.html
Copyright © 2011-2022 走看看