Shiny应用程序中控件选中的值可以通过生成响应式输出来显示。用户切换控件的值,输出的文本也随着控件的值自动响应。 如下是两个小控件,分别用来展示 variable to display和Range of interest,此时选中是没有响应式输出。
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(
textOutput("selected_var")
)
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
下面将添加对控件值的响应。
1.将R对象添加到ui用户界面。 2.在server中构建响应式对象并调用控件的值。
Shiny提供了一系列函数,可将R对象转换为用户界面的输出。每个函数都会创建特定类型的输出。
每个render*函数都有一个参数:R表达式用花括号括起来{}。表达式可以是一行简单的文本,也可以包含一组指令。表达式可以返回想到的对象(一段文本,一个图,一个数据框等)。
例如返回一段文字:
上述ui代码中textOutput
它带有一个参数,即字符串"selected_var"。一般放在ui中的sidebarPanel或mainPanel。每个*Output
函数都需要一个参数:一个Shiny将用于反应的元素名称的字符串。
在ui中设置Shiny在哪里显示对象后,接下来,需要告诉Shiny如何构建对象。为此,需要在server函数中构建对象。server会建立一个output的list,其中包含更新R对象的代码。可以通过server中的output定义一个输出元素,元素名称应与ui中创建的反应性元素的名称一致。
如下:在server中output$selected_var与ui中的textOutput("selected_var")
是一致的。在server中添加renderText
函数并添加固定的一段文字,则返回这一段文字。
server <- function(input, output) {
output$selected_var <- renderText({
"You have selected this"
})
}
上述反应的输出是一段固定文字,动态响应小控件的值,还需要引入input
。server
函数包含2个参数,input
和output
,output
作为一个类似列表的对象,存储了在应用程序中构建R对象。input
是也是一个类似列表的对象。它存储控件的当前值。这些值来自ui中小控件的名称。
响应第一个控件:添加input$var
server <- function(input, output) {
output$selected_var <- renderText({
paste("You have selected", input$var)
})
}
响应第二个控件:在ui中添加range的textOutput,并在server中添加output为input$range。
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(
textOutput("selected_var"),
textOutput("min_max")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$selected_var <- renderText({
paste("You have selected", input$var)
})
output$min_max <- renderText({
paste("You have selected",input$range)
})
}
# Run the app ----
shinyApp(ui = ui, server = server)