Shiny是什么东东?
官方描述:
Shiny is an R package that makes it easy to build interactive web apps straight from R. You can host standalone apps on a webpage or embed them in R Markdown documents or build dashboards. You can also extend your Shiny apps with CSS themes, htmlwidgets, and JavaScript actions.
简单来说,通过Shiny,你可以把在R里面的所有分析结果通过更友好的界面来展示。除了可以嵌入到RMD文件,还可以做仪表盘,创建App,做成html插件和Java脚本。
01 示例:一个简单的html
install.packages("shiny")
setwd("E:\shiny\testing")
在工作目录下创建两个文件:ui.R,server.R
##ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Data science FTW!"),
sidebarLayout(
sidebarPanel(
h3("Sidebar Text")
),
mainPanel(
h3("Main Panel Text")
)
)
))
##server.R
library(shiny)
shinyServer(function(input,output){
})
回到RStudio输入“runApp()”,就会弹出一个html页面
更多封装函数可在RStudio里面输入“?builder”来查看shiny的帮助文档。
02 示例:加入可拖动组件和可视化数据
仍然是在两个文件(ui.R, server.R)里面做工作,具体函数在注释中,如下:
##ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("HTML Tags"),
sidebarLayout(
sidebarPanel(
h1("一级标题"),
h3("三级标题"),
em("斜体文字"),
##定义一个可拖动组件
sliderInput("slider1","Slide Me!",0,100,0),
##输入出图的随机数的个数
numericInput("numeric","How Many Random Numbers Should be Plotted?",
value = 1000, min = 1, max = 1000, step = 1),
##选择X轴的最小最大值
sliderInput("sliderX", "Pick Minimum and Maximum X Values",
-100, 100, value = c(-50, 50)),
##选择y轴的最小最大值
sliderInput("sliderY", "Pick Minimum and Maximum Y Values",
-100, 100, value = c(-50, 50)),
##可选的设置选项
checkboxInput("show_xlab", "Show/Hide X Axis Label", value = TRUE),
checkboxInput("show_ylab", "Show/Hide Y Axis Label", value = TRUE),
checkboxInput("show_title", "Show/Hide Title")
),
mainPanel(
h3("Main Panel Text"),
code("Some Code!"),
h3("Slider Value:"),
##用来存放拖动数值,通过server.R来传值
textOutput("text"),
h3("Graph of Random Points"),
plotOutput("plot1")
)
)
))
##server.R
library(shiny)
shinyServer(function(input,output){
##用renderText来传递可拖动组件的值
output$text <- renderText(input$slider1)
##用renderPlot来传递plot对象
output$plot1 <- renderPlot({
set.seed(2016-05-25)
##把ui.R中的参数传递过来
number_of_points <- input$numeric
minX <- input$sliderX[1]
maxX <- input$sliderX[2]
minY <- input$sliderY[1]
maxY <- input$sliderY[2]
dataX <- runif(number_of_points, minX, maxX)
dataY <- runif(number_of_points, minY, maxY)
##设置plot的标识
xlab <- ifelse(input$show_xlab, "X Axis", "")
ylab <- ifelse(input$show_ylab, "Y Axis", "")
main <- ifelse(input$show_title, "Title", "")
##出图
plot(dataX, dataY, xlab = xlab, ylab = ylab, main = main,
xlim = c(-100, 100), ylim = c(-100, 100))
})
})
再次运行runApp()即可得到结果: