使用 renderUI 更改页面上输入的顺序
use renderUI to change the order of inputs on page
我有一个数据输入表格,用户将使用该表格输入来自纸质数据的野生动物捕获数据 sheets。论文 sheet 有许多相同的字段(例如,年龄、体重、性别),但并不完全相同(例如,有些字段有 chest_girth,有些则没有)。 sheet 也以不同的顺序设置,闪亮的表格必须与纸上字段的确切顺序匹配 sheet。
我目前有一系列 uiOutput
/renderUI
对,根据用户从下拉列表中选择的物种显示输入。因为大多数物种都收集了相同的数据,并且这些数据都将进入相同的 table,我想对所有物种使用一个输入(例如,input$Age
而不是 input$BearAge
和 input$ElkAge
)。然而,正如我上面所说,所有 sheet 的顺序都不同,所以请不要建议我对所有物种使用相同的表格。
我知道我可以使用 shinyjs::show()
和 shinyjs::hide()
来更改输入是否可见,但是有没有办法根据用户输入更改现有对象的顺序,使用 renderUI
还是别的?
看起来像这样:
library(shiny)
ui <- fluidPage(
fluidRow(
column(3, selectInput(inputId = 'species', label = 'Species', choices = c('Elk', 'Bear', 'Deer'))),
column(3, numericInput(inputId = 'age', label = 'Age', value = NA)),
column(3, numericInput(inputId = 'weight', label = 'Weight', value = NA))
)
server <- function(input, output, session) {
if (input$species == 'bear') {
*switch the order of age and weight*
}
library(shiny)
ui <- fluidPage(
fluidRow(
column(3, selectInput(inputId = 'species', label = 'Species',
choices = c('Elk', 'Bear', 'Deer'))),
uiOutput("inputs_UI")
)
)
server <- function(input, output, session) {
output$inputs_UI <- renderUI({
if (input$species == 'Bear') {
tagList(
column(3, numericInput(inputId = 'age', label = 'Age', value = NA)),
column(3, numericInput(inputId = 'weight', label = 'Weight', value = NA))
)
} else {
tagList(
column(3, numericInput(inputId = 'weight', label = 'Weight', value = NA)),
column(3, numericInput(inputId = 'age', label = 'Age', value = NA))
)
}
})
}
shinyApp(ui, server)
我有一个数据输入表格,用户将使用该表格输入来自纸质数据的野生动物捕获数据 sheets。论文 sheet 有许多相同的字段(例如,年龄、体重、性别),但并不完全相同(例如,有些字段有 chest_girth,有些则没有)。 sheet 也以不同的顺序设置,闪亮的表格必须与纸上字段的确切顺序匹配 sheet。
我目前有一系列 uiOutput
/renderUI
对,根据用户从下拉列表中选择的物种显示输入。因为大多数物种都收集了相同的数据,并且这些数据都将进入相同的 table,我想对所有物种使用一个输入(例如,input$Age
而不是 input$BearAge
和 input$ElkAge
)。然而,正如我上面所说,所有 sheet 的顺序都不同,所以请不要建议我对所有物种使用相同的表格。
我知道我可以使用 shinyjs::show()
和 shinyjs::hide()
来更改输入是否可见,但是有没有办法根据用户输入更改现有对象的顺序,使用 renderUI
还是别的?
看起来像这样:
library(shiny)
ui <- fluidPage(
fluidRow(
column(3, selectInput(inputId = 'species', label = 'Species', choices = c('Elk', 'Bear', 'Deer'))),
column(3, numericInput(inputId = 'age', label = 'Age', value = NA)),
column(3, numericInput(inputId = 'weight', label = 'Weight', value = NA))
)
server <- function(input, output, session) {
if (input$species == 'bear') {
*switch the order of age and weight*
}
library(shiny)
ui <- fluidPage(
fluidRow(
column(3, selectInput(inputId = 'species', label = 'Species',
choices = c('Elk', 'Bear', 'Deer'))),
uiOutput("inputs_UI")
)
)
server <- function(input, output, session) {
output$inputs_UI <- renderUI({
if (input$species == 'Bear') {
tagList(
column(3, numericInput(inputId = 'age', label = 'Age', value = NA)),
column(3, numericInput(inputId = 'weight', label = 'Weight', value = NA))
)
} else {
tagList(
column(3, numericInput(inputId = 'weight', label = 'Weight', value = NA)),
column(3, numericInput(inputId = 'age', label = 'Age', value = NA))
)
}
})
}
shinyApp(ui, server)