课程1
1.1. Rshiny作用:
可以将数据分析变成互动性网络应用
1.2. shiny 应用结构
- 一个用户界面脚本,用来控制应用的布局与外表 ui.R
- 一个服务器脚本 ,包含建构应用所需要的重要指示 server.R
1.3. shiny 运行及退出
- 需要文件:一个目录中包含ui.R和serve.R
- 运行 :
- 方式1
library(shiny)
runApp("my_app")##括号中接目录地址+名字
##更改展示模式:
runApp("my_app",display.mode = "Showcase")
##如果想取消运行,需要点击网页退出,或者点击右上角处退出符号
- 方式2
在Rstudio中打开ui.R或者server.R,键盘快捷键ctl + shift + enter 或点击右上角 Run App - 退出应用
点击退出或者点击Rstudio中红点
课程2:构建一个用户界面
创建一个Shiny应用最低要求:
#Ui.R
ShinyUI(fluidPage(
))
#Server.R
shinyServer(function(input,output){
})
- 布局
ui.R 脚本创造用户界面
shinyUI(fluidPage(
titlePanel("titlie panel"),
mainPanel(
h1(""),#一级标题
p(""),#新起段落
strong(""),#字体加粗
em(""),#斜体
br(),#插入空行
code(""),#加入代码
img(src="",height=,width=)#插图,图片需要在UI.R同一目录下的www文件夹下
)
))
##注意:不能出现双引号中包含双引号
课程3:添加控制部件(widgets)
- 部件:一个用户可以进行交互的网络元素,为我们提供了一种可以向应用发送信息指令的途径
-
Shiny创建部件,,eg:actionButton:创建一个动作按钮,sliderInput:创建滑动条
- 添加部件
+添加位置:ui.R文件中 sidebarPanel或者mainPanel- 部件参数
- 部件的名称(name for the widget)
- 标签
eg:actionButton("action",label="Action"),其中部件名称为action,标签为Action
- 示例
- 部件参数
shinyUI(
fluidPage(
titlePanel("class 3"),
fluidRow(
column(3,h3("widget"),actionButton("action",label = "Action"),br(),br(),submitButton("Submit")),
column(3,h3("single checkbox"),checkboxInput("checkbox",label="Choice A",value = TRUE)),
column(3,checkboxGroupInput("checkGroup",label=h3("checkbox group"),
choices = list("choice"=1,"choice"=2,"choice"=3),selected = 1)),
column(3,dateInput("data",label = h3("Data input"),value = "2014-01-01"))
)
)
)
课程4 响应式输出
- 响应式输出基本格式:
ui.R:
ui<-fluidPage(
titlePanel(),
sidebarLayout(
helpText(),
selectInput(),
)
mainPanel(*Output("name"))
)
server.R:
server<-function(input,output){
output$name<-render*({
})
}
- 步骤1:向UI中加入R对象(操作脚本ui.R):
shinyUI(
fliudePage(
titlePanel(),
siderbarLayout(
sidebarPanel(
helpText(),
selecInput("",label="",choice=c(),selected=""),
selecInput("",label="",min=,max=,value=c())
),
mainPanel(textOutput("text1"))# 加入R对象
)
)
)
- 步骤2 提供R代码建立对象 (操作脚本server.R)
shinyServer(
function(input,output){
output$test1<-renderText({ ##使用render*函数告诉shiny如何搭建对象
paste("you have selected",input$Var)
})
}
)
class-5 使用R 脚本与数据
library(shiny)
library(maps)
library(mapproj)
source("helpers.R")
counties<-readRDS("data/counties.rds")
ui<-fluidPage(
titlePanel("censusVis"),
sidebarLayout(
sidebarPanel (
helpText("create demographic maps with information from the 2010 US Census."),
selectInput("var",label = "choose a varibable to display",
choices = c("Percent White", "Percent Black",
"Percent Hispanic", "Percent Asian"),
selected = "Percent White"),
sliderInput("range",label = "range of interest:",min=0,max=100,value=c(0,100))
),
mainPanel = (plotOutput("map"))
)
)
server2<-function(input,output){
output$map<-renderPlot({
args<-switch(input$var,
"Percent White"=list(counties$white,"darkgreen","% White"),
"Percent Black"=list(counties$black,"black","% Black"),
"Percent Hispanic"=list(counties$hispanic,"darkorange","% Hispanic"),
"Percent Asian"=list(counties$asian,"darkkviolet","% Asian"))
args$min<-input$range[1]
args$max<-input$range[2]
do.call(percent_map,args)
})
}
shinyApp(ui,server2)
- recap(重点回顾)
- Server.R所在目录为shiny应用的工作目录
- shiny执行sever.R开头部分一次,但是render*相关代码会执行多次,用户改变参数会就会重新执行,
- switch是一个将部件数值转化为R表达式时,使用
class-6 使用响应式表达式
- 功能:限制部分代码在响应过程中重复运行,原理:将表达式中内容在运行一次后保存至电脑内存,
- 如果相关部件没有发生改变,之后调用直接返回保存结果
- 如果相关边间发生改变,重新计算并保存最新结果
- 格式:reactive({})
- recap
- 使用响应表达式,对代码进行模块化,保证自己的应用运行更快速
- 从其他响应表达式或者render*函数中调用响应表达式
- 在表达式名称后插入()来调用响应表达式
class-7 分享应用
方式:
- 分享两个文件server.R and ui.R
- runUr1 直接从网络链接中下载运行一个Shiny应用:
library(shiny)
runUrl("")
+ runGitHub
runGitHub("","")
+ runGist
+ 网页形式分享
### 输入输出对应关系
mainPanel(plotOutput()) ==> renderPlot
mainPanel(verbatimTextOutput()) ==> renderPrint
mainPanel(tableOutput()) ==> renderTable