上一节的「R shiny基础」增加一些小控件放在网页中的控件只能说是装饰品,要想真正让用户通过选择不同参数来得到不同结果,还需要这一节的知识
举个例子:我们希望下面网页在左边选择后,右边会有对应的输出
两步创建
创建一个交互式的输出,只需要两步
- 在用户界面中增加输出内容项(R object)
- 在
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基础教程: