「R shiny基础」交互式入门

作者: xuzhougeng | 来源:发表于2019-02-02 16:17 被阅读128次

    上一节的「R shiny基础」增加一些小控件放在网页中的控件只能说是装饰品,要想真正让用户通过选择不同参数来得到不同结果,还需要这一节的知识

    举个例子:我们希望下面网页在左边选择后,右边会有对应的输出

    示意图

    两步创建

    创建一个交互式的输出,只需要两步

    1. 在用户界面中增加输出内容项(R object)
    2. server中告知Shiny如何响应输入生成输出

    第零步: 网页布局

    先按照之前的教程,在网页中添加可见元素

    ui <- fluidPage(
      titlePanel("censusVis"),
      
      sidebarLayout(
        sidebarPanel(
          helpText("Create demographic maps with 
                   information from the 2010 US Census."),
          
          selectInput("var", 
                      label = "Choose a variable 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(
        )
      )
      )
    

    结果如下:

    示意图

    第一步: 在UI中增加R object

    Shiny提供了一组函数,能够在用户界面中(UI)返回R对象。不同函数创建不同类型的输出,如下所示:

    输出函数 作用
    dataTableOutput 数据表
    htmlOutput 原始HTML
    imageOutput 图片
    plotOutput 作图结果
    tableOutput 表格
    textOutput 文本
    uiOutput 原始HTML
    verbatimTextOutput 文本

    作为演示,我们选择textOutput作为输出项,修改文章的mainPanel部分

        mainPanel(
          textOutput(outputId = "selectVar")
        )mainPanel(
        )
    

    所有的的Output系列函数都需要有outputId参数,shiny根据这个参数确定输出内容的位置。

    第二步: 编写构建输出object的代码

    先前编写的ui只是确定了网页中哪个部分用于展示输出信息,具体如何展现输出则是需要一类render函数。shiny可用render类函数如下

    渲染函数 输出
    renderDataTable DataTable
    renderImage 图片(本地的静态文件)
    renderPlot 作图结果
    renderPrint 任何可打印的输出
    renderTable 数据框,矩阵或其他类表格结构
    renderText 字符串
    renderUI Shiny Tag 对象或HTML

    这类函数需要放在server函数中,例如我们希望能能够在mainPanel部分输出用户在sidebar选择的内容,代码如下:

    server <- function(input, output) {
      output$selectVar <- renderText({
        sprintf("Your selection is %s\n", input$var)
      })
    }
    

    如代码所示,render类函数的第一个参数是R的表达式,代码放在{}中。代码可以是一行,也可以是多行,取决于输出内容的复杂程度。

    结果

    : input后跟着Input类函数中第一个参数值,而output后跟着Output类函数的第一个参数值,如下所示:

    输入和输出

    小结

    这部分主要介绍

    • 使用output类函数指定UI中输出的位置
    • 使用render类函数构建输出的R对象
    • 输出的创建代码在{}中。

    下一部分介绍如何编写更加复杂的代码,根据输出得到更加复杂的输出。

    传送门

    Shiny基础教程:

    相关文章

      网友评论

        本文标题:「R shiny基础」交互式入门

        本文链接:https://www.haomeiwen.com/subject/qaggjqtx.html