利用shiny包构建简单的BI

作者: 鸣人吃土豆 | 来源:发表于2018-03-03 19:24 被阅读98次

1.简介

Shiny是R中的一种Web开发框架,使得R的使用者不必太了解css、js
只需要了解一些html的知识就可以快速完成web开发,且shiny包集
成了bootstrap、jquery、ajax等特性,极大解放了作为统计语言的R
的生产力。使得非传统程序员的R使用者不必依赖于前端、后端工程
师就可以自己依照业务完成一些简单的数据可视化工作,快速验证想
法的可靠性。

2.组成

Shiny应用包含连个基本的组成部分:一个是用户界面脚本(a user-
interface script),另一个是服务器脚本(a server script)。
• 用户界面(ui)脚本控制应用的布局与外表,它定义在一个称作ui.R的源脚本中。
• 服务器(server)脚本包含构建应用所需要的一些重要指示,它定义在一个称作
server.R的源脚本中。

3.程序运行

3.1 第一种方式

你可以在一个目录中保存一个ui.R文件和server.R文件来创建一个
Shiny应用。每一个应用都需要自己独特的存放位置。运行应用的方法
是在函数runApp中置入目录名称。例如你的应用目录名称为myapp,
且放在D盘目录下,那么键入以下代码可以执行应用:
• library(shiny)
• runApp("D:/myapp")
• 运行完成后自动生成一个网页展示结果。

3.2第二种方式

也可以将ui和server代码写在一个脚本内,通过shinyApp执行该app。
运行以下脚本将得到一个简单的web版直方图。

library(shiny)
ui <- fluidPage(
numericInput(inputId = "n",
"Sample size", value = 25),
plotOutput(outputId = "hist")
)
server <- function(input, output) {
output$hist <- renderPlot({
hist(rnorm(input$n))
})
}
shinyApp(ui = ui, server = server)

4.HTML5帮助函数


例子

在自己电脑目录上构建三个文件


3w文件用于存放图片

ui.R文件写下如下代码

library(shiny)
shinyUI(pageWithSidebar(
  headerPanel("Iris k-means 聚类"), #标题面板
  sidebarPanel(
    p("想上百度网,请点击下方微信图片",style="color:green"),
    a(img(src="Snipaste_2018-03-03_16-30-02.jpg",width=150,height=150),href="www.baidu.com")
               ), #侧面板
  mainPanel(
    h1(strong("这是我的第一个APP应用")), #h1:一级标题;strong:加粗
    br(), #换行符
    h1(em("这是我的第一个APP应用")), #em:斜体
    h3("这是我的第一个APP应用",align="center"),
    h4("输入红色的文字",style="color:red"),
    a(img(src="Snipaste_2018-03-03_16-30-02.jpg"),href="www.baidu.com")
    
  ) #主面板
))

server.R文件写下如下代码

shinyServer(function(input,output,session){
  
})

注意:如果是windows电脑的话要将以上两个文件保存为utf-8编码格式的

运行一下就会产生如下结果


5.控件函数和页面布局

创建一个layout.R文件,并在该文件下输入以下代码

1. pageWithSidebar.R

ui <- shinyUI(pageWithSidebar(
  headerPanel("Iris k-means 聚类"), 
  sidebarPanel(
  ),
  mainPanel(
    
  ) #主面板
))
server <- function(input,output){
  
}
shinyApp(ui=ui,server = server)

结果为


2.sidebarLayout.R

ui <- shinyUI(fluidPage( #fluidPage:自适应页面
  titlePanel("Iris k-means 聚类"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel()
  )
))

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

结果为:


3.fluidRow and column

ui <- shinyUI(fluidPage(
  titlePanel("逐渐完整版"),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(
      fluidRow(
        column(3,sliderInput(inputId="num1",label="第一个滑动条",min=1,max=100,value=25)),
        column(3,sliderInput(inputId="num2",label="第二个滑动条",min=1,max=100,value=50)),
        column(3,sliderInput(inputId="num3",label="第三个滑动条",min=1,max=200,value = 100))
      ),
      br(),
      fluidRow(
        h1("hahhahahahha",slign="center")
      )
    )
  )
  )
)

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

结果为:


4.wellPanel.R

ui <- shinyUI(fluidPage(
  wellPanel(
      fluidRow(
      column(4,sliderInput(inputId="num1",label="第一个滑动条",min=1,max=100,value=25)),
      column(4,textInput(inputId="num1",label="输入文字",value="默认值"))
)
    )
  )
)

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

结果为:


ui <- shinyUI(fluidPage(
  wellPanel(
    sliderInput(inputId="num1",label="第一个滑动条",min=1,max=100,value=25),
    textInput(inputId="num1",label="输入文字",value="默认值")
  ),
  wellPanel(
    numericInput(inputId="num1",label="数字框",value=10)
)
)
)
server <- function(input,output){
  
}
shinyApp(ui=ui,server = server)

结果为:


5.tabsetPanel.R

ui <- shinyUI(fluidPage(title="tabsetPanel",
  tabsetPanel(
    tabPanel(title="tab1",
             sliderInput(inputId="num1",label="第一个滑动条",min=1,max=100,value=25)),
    tabPanel(title="tab2",
             submitButton(text="submit"))
  )
))
server <- function(input,output){
  
}
shinyApp(ui=ui,server = server)
鼠标可以点击tab1和tab2

6.navbarPage.R

ui <- shinyUI(navbarPage(
  title="navbarPage",
  tabPanel(title="tab1",
           sliderInput(inputId="num1",label="第一个滑动条",min=1,max=100,value=25)),
  tabPanel(title="tab2",
           submitButton(text="submit"))
))
server <- function(input,output){
  
}
shinyApp(ui=ui,server = server)

结果为:


ui <- shinyUI(navbarPage(
  title="navbarPage",
  tabPanel(title="tab1",sliderInput(inputId="num1",label="第一个滑动条",min=1,max=100,value=25)),
  navbarMenu(title="其他控件",
             tabPanel(title="tab2",textInput(inputId="num1",label="输入文字",value="默认值")),
             tabPanel(title="tab3",numericInput(inputId="num1",label="数字框",value=10)))
))
server <- function(input,output){
  
}
shinyApp(ui=ui,server = server)

结果为:


下篇文章介绍怎么将ui和server进行交互

相关文章

网友评论

    本文标题:利用shiny包构建简单的BI

    本文链接:https://www.haomeiwen.com/subject/yjfxfftx.html