解析shiny程序

     最近学习MOOC公开课,讲的数据开发,使用的语言是R语言的shiny包。听了几节课,
     有点小收获,现在尝试解析shiny包的示例程序”01_hello”。

     首先,构建shiny程序需要R语言环境,可以到网上下载R语言,再通过R Console下载shiny包

当然也可以使用推荐Rstudio。

     语言环境配置好后,试运行实例的程序,程序所在目录是:安装目录\R\R-3.1.2\library\shiny\examples。
   首先加载shiny库,在R Console键入library(“shiny”)
   输入runExample(“01_hello”);回车,即可运行实例的程序,运行图如下:

观察到运行情况后,接下来就是解析shiny的构成及语法。
实例程序中,由2个文件构成,分别是ui.R和server.R。其中ui.R主要是前台的页面语言,
虽然shiny程序最终运行的是依赖浏览器
如下:library(shiny)

# Define UI for application that draws a histogram
shinyUI(fluidPage(
 
  # Application title
  titlePanel("Hello Shiny!"),
  # Sidebar with a slider input for the number of bins
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min=1,
                  max=50,
                  value=30)
    ),
    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("distPlot")
    )
  )
))
 

可见源代码中,首先引用了shiny库,此处不谈,可见源代码中
首先是shinyUI函数,次处是声明一个shinyUI的语言函数,我的理解是次数应嵌入shiny语言的控件,但是我在其后面和前面加入HTML标签,是不支持的。
紧接着是一个fluidPage函数,从字面上看是一个动态的页面,此函数中应包含页面的主要构成,从代码上看主要有以下几个
titlePanel
SliderInput
MainPanel
当然,sliderInput和MainPanel被包含在一个sidebarLayout里面。mainPanel中包含一个呈现图表的plotOutput(“distPlot”),此Id或name会被后台使用。

前面提到后台文件,它其实就是server.R文件,接下来,让我们一睹它的风格:
library(shiny)

# Define server logic required to draw a histogram
shinyServer(function(input, output) {
 
  # Expression that generates a histogram. The expression is
  # wrapped in a call to renderPlot to indicate that:
  #
  #  1) It is "reactive" and therefore should be automatically
  #     re-executed when inputs change
  #  2) Its output type is a plot
 
  output$distPlot <- renderPlot({
    x    <- faithful[, 2]  # Old Faithful Geyser data
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
 
    # draw the histogram with the specified number of bins
    hist(x, breaks = bins, col = 'darkgray', border = 'white')
  })
 
})

首先依旧是引入shiny库文件,然后与shinyUI对应的是shinyServer函数。
这里面有个声明一个新的函数function(input,output){}
经过分析,此函数中的两个参数极其重要,首先是input,字面上将是输入,那么是什么输入呢,其实是对应着ui.R中的输入,参考此文件中的以下字句:
input$bins其实是取得前台页面中sliderInput的值

接下来是分析output参数,此参数是发送给客户端的数据,如以下代码
Ouput$distPlot<-renderPlot(…)就是将renderPlot函数返回值传递给前台的distPlot控件。

通过以代码,即可得出前面的图表了。通过分析,也可以得出其实主要思想还是MVC,其中model就是参数input和output,input负责取得前台页面的值,然后组装后赋值给output,在发送到前台呈现。而ui.R即是controller。不过shiny主要是用来做数据分析,简化一些不必要的东西,而加强了图形数据方面,使用起来简单。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值