「r<-Shiny」用户界面(二)输出控件

作者: 王诗翔 | 来源:发表于2020-02-21 15:57 被阅读0次

UI 中的输出控件创建了占位符,它随后被后端函数生成的内容所填充。
与输入控件一样,输出控件的第 1 个参数也是一个唯一的 ID:
如果你的 UI 有一个输入控件的 ID 是 "plot",那么你可以在后端中使用 output$plot 访问它

前端中每一个输出控件函数对与后端的一个 render 函数对应。
Shiny 中有 3 类输出控件,对应你报告中经常会使用到的文本、表格和图形。

下面将向读者介绍前端输出控件的基础,以及与之相连的 render 函数。

首先载入 Shiny。

library(shiny)

文本

使用 textOutput()verbatimTextOutput() 分别输出普通文本和固定的代码及控制台输出。

ui <- fluidPage(
  textOutput("text"),
  verbatimTextOutput("code")
)
server <- function(input, output, session) {
  ## 对应 textOutput()
  output$text <- renderText({ 
    "Hello friend!" 
  })
  ## 对应 verbatimTextOutput()
  output$code <- renderPrint({ 
    summary(1:10) 
  })
}


shinyApp(ui, server)
image

注意,render 函数中的 {} 应对单行代码是非必须的。后端函数写为如下的形式显得更加紧凑。

server <- function(input, output, session) {
  output$text <- renderText("Hello friend!")
  output$code <- renderPrint(summary(1:10))
}

另外,这里两个 render* 函数的区别是:

  • renderText() 显示代码返回的文本。
  • renderPrint() 显示代码打印的文本。

为了帮助读者理解它们的区别,我们看下下面这个函数。该函数打印 ab,并返回 "c"。 R 中一个函数能够打印很多的东西,但只能返回单个值。

print_and_return <- function() {
  print("a")
  print("b")
  "c"
}
x <- print_and_return()
#> [1] "a"
#> [1] "b"
x 
#> [1] "c"

表格

Shiny 中有两个办法以表格的形式展示数据框。

  • tableOutput()renderTable() 生成一个静态的数据表,一次性展示所有的数据。
  • dataTableOutput()renderDataTable() 生成一个动态表格,展示一个固定行数的表格以及相关的控件。

tableOutput() 对于小的、固定的汇总(如模型系数)非常有用,而 dataTableOutput() 更适用于你想要将完整的数据呈现给用户。

ui <- fluidPage(
  tableOutput("static"),
  dataTableOutput("dynamic")
)
server <- function(input, output, session) {
  output$static <- renderTable(head(mtcars))
  output$dynamic <- renderDataTable(mtcars, options = list(pageLength = 5))
}

shinyApp(ui, server)
image

任何类型的 R 图(基础、ggplot2 或其他)读者都可以使用 plotOutput()renderPlot()

ui <- fluidPage(
  plotOutput("plot", width = "400px")
)
server <- function(input, output, session) {
  output$plot <- renderPlot(plot(1:5))
}

shinyApp(ui, server)
image

图形有些特殊,它们既可以作为输出也可以作为输出控件。
plotOutput() 有一些像 clickdbclickhover 这样的参数。
如果指定 click = "plot_click",Shiny 会创建一个响应的输入 input$plot_click,利用它我们可以让图形产生交互性。

下载

读者可以使用 downloadButton()downloadlink() 创建下载功能,但它们需要后端新的技术支撑,后面我们再进行学习。

如果读者现在恰好想要实现该功能,请参考 https://github.com/rstudio/shiny-examples/tree/master/010-download 提供的模板。

相关文章

  • 「r<-Shiny」用户界面(二)输出控件

    UI 中的输出控件创建了占位符,它随后被后端函数生成的内容所填充。与输入控件一样,输出控件的第 1 个参数也是一个...

  • 「r<-Shiny」用户界面(一)输入控件

    用户界面之输入 再次提醒读者,该系列的内容源自 Hadley 编写的《Mastering Shiny》喔。中文由我...

  • Shiny学习(四)||响应式输出

    Shiny应用程序中控件选中的值可以通过生成响应式输出来显示。用户切换控件的值,输出的文本也随着控件的值自动响应。...

  • R语言:创建web界面

    1、shiny包 R语言使用shiny包创建web界面。使用shinydashboard包和shinytheme,...

  • 「r<-Shiny」用户界面(三)布局

    在我们知道如何创建一系列输入和输出控件之后,我们需要学会如何在一个页面中对它们进行排列,以达到比较好的展示效果。这...

  • R shiny教程-2:布局用户界面

    Shiny 是RStudio公司开发的R包,利用Shiny 可以轻松构建交互式Web应用程序(App)。 在前面一...

  • Shiny学习(二)

    前面介绍了Shiny的基本构成Shiny学习(一)下面接着学习如何构建用户界面。 首先,创建Shiny应用程序所需...

  • 「R shiny基础」交互式入门

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

  • [shiny 2]

    ui 用户自定义界面设置server 服务端脚本 Shiny Text这个应用程序展示的是直接打印R对象,以及用H...

  • 「R shiny 基础」初识Shiny

    传送门 Shiny基础教程: 「R shiny 基础」初识Shiny 「R shiny 基础」如何进行网页布局 「...

网友评论

    本文标题:「r<-Shiny」用户界面(二)输出控件

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