ITPub博客

首页 > > > 浅谈R语言的Shiny

浅谈R语言的Shiny

作者:浪花小雨滴 时间:2020-06-17 14:06:09 0 删除 编辑

现在可以用来做BI的工具非常丰富,它们大多数操作都是对非专业人士比较友好的,容易上手。R语言中的shiny包在BI方面其实也有不错的能力,它能够帮助我们很轻易地搭建web式的数据交互程序。听上去很高大上,其实操作也很简单,关键是如何将数据的表达方式与shiny结合,下面就慢慢来一起了解它的原理。

我们首先从shiny包自带的例子了解一下它数据展示的效果,我们安装好shiny包之后,可以执行下面的代码:

library(shiny)
runExample('01_hello')

执行结果以网页形式打开,我们拖到左侧的滑动条,右面的直方图就会随之变化,且左边的滑动条是决定了右面直方图的条形数量。通过这个例子,我们可以简单地认为shiny包的作用就是帮助我们创建一个带有控件的交互可视化网页应用。

当然我们现在的目的是掌握如何创建一个应用,要想创建一个shiny应用,我们需要2段代码。第一个就是ui端的代码,第二个就是server端代码。ui端代码的作用就是我们用于构建整个应用的布局,比如应用上需要有那些控件,有那些图形;整个应用是上下布局还是左右排列,是否需要有嵌套等等。server端代码就是我们用于构建控件与图形的关系,并且采用什么样的可视化形式。有了这两段代码,我们的应用就能生成。继续用上例子的代码来加深对ui和server的理解:

#ui端的代码
ui <- fluidPage(
  titlePanel("Hello Shiny!"),
  sidebarLayout(
    sidebarPanel(
      sliderInput(inputId = "bins",
                  label = "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),
    mainPanel(
      plotOutput(outputId = "distPlot")
    )
  )
)

首先是fluidPage()这个函数,是ui端代码常用的布局函数,属于左右布局,当然具体的布局函数有机会我们后面的文章再总结。下面以fluidPage()布局为例,分别介绍三个部分:

第一部分是整个页面的title设置函数,使用titlePanel()输入页面名称。

第二部分是sidebarLayout()边栏布局函数,其中sidebarPanel()主要是用于侧栏设置(插件、文字等的设置),以sliderInput()滑动条插件为例,我们初步认识一下如何使用插件。滑动条插件的重点参数inputId是插件在这个程序的名称,用于之后用名字调动插件。第二个参数label是设置页面中滑动条的标签描述。min和max就是滑动条两端的端点值,value就是用于设置滑动条的默认值。

第三个mainPanel()是用于应用主要区域的设置(图形、表格、文字等设置)。我们可以使用Output类函数来指定我们要设置的要输出的图形、表格或者其他。上述例子plotOutput()就是用于图形的输出的函数,使用outputId作为图形输出函数的名称,可用于后面在server端代码调用并设置具体的参数值。

下面我们来看一下server端的代码:

#server端的代码
server <- function(input, output) {
  output$distPlot <- renderPlot({
    x    <- faithful$waiting
    bins <- seq(min(x), max(x), length.out = input$bins + 1)
    hist(x, breaks = bins, col = "#75AADB", border = "white",
         xlab = "Waiting time to next eruption (in mins)",
         main = "Histogram of waiting times")
    })
}

server端代码是一个函数体,两个参数,input和output。为什么是这两个参数?其实很容易理解,首先input就是我们之前提及到ui端插件的名称,换而言之就是我们通过插件输入的数据,使用插件名称调用;其次output是指我们前面提到output类指定的名称,也是我们设置输出图像等的重要参数。最后是我们用于渲染的render类函数,它是我们用于输出的函数。举个例子,前面的ui端我们使用了PlotOutput(输出图形),那么后面server端就会用renderPlot对应设置图形的具体参数,两者是互相对应的,也就是我们ui端和server端重要的关联。

当ui端和server端的代码都创建好了,我们就可以执行下面的代码,调用这个程序:

shinyApp(ui = ui, server = server)

通过上面对'hello shiny'例子的介绍,其实我们已经能够模仿并搭建自己的网页应用,当然要想实现各多的功能,我们还需要学习更多相关的知识。下面就是修改了'hello shiny'的例子,对shiny有兴趣的可以尝试看看官网里具体插件的使用方法,并且动手,还是很有乐趣的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3130239/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    40024