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帮助函数


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

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)

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进行交互
网友评论