Brandon S Brandon S - 21 days ago 4
R Question

R Shiny Conditional Input label based on another Input

I am trying to have the

label
of a
conditionalPanel
include the name derived from an output, which is created using another input. I've been researching and have not been able to figure out how to do this yet. Below is what I've tried, to no avail.

ui.R

shinyUI(
fluidPage(
titlePanel("example"),
sidebarLayout(
sidebarPanel(

numericInput("criteria_count",
label = "How many criteria are being considered? (max = 5)",
2, min = 2, max = 5),

textInput("critera_text",
label = "Type the different criteria titles, seperated by commas.",
value = "Example A, Example B"),
#verbatimTextOutput("value"),

conditionalPanel(condition = "input.criteria_count == 2",
selectInput("main_cri1",
label = paste0("How much more important is ", output.criteria1, " than ", output.criteria2, "?"),
c("9 (Extremely more important)",
"7 (Much more important)",
"5 (Moderately more important)",
"3 (Slightly more important)",
"1 (Equally as important)",
"1/3 (Slightly less important)",
"1/5 (Moderately less important)",
"1/7 (Much less important)",
"1/9 (Extremely less important)")))

)
)
)
)


server.R

library(shiny)

shinyServer(function(input, output){

output$criteria1 <- renderText({
strsplit(input$critera_text, ", ")[[1]][1]
})

output$criteria2 <- renderText({
strsplit(input$critera_text, ", ")[[1]][2]
})

})


Given the ui.R above, the
label
for the
conditionalPanel
should read as follows:

"How much more important is Example A than Example B?"

Answer

Try this (app.R)

ui <-
  fluidPage(titlePanel("example"),
            sidebarLayout(

              sidebarPanel(
                numericInput(
                  "criteria_count",
                  label = "How many criteria are being considered? (max = 5)",
                  2,
                  min = 2,
                  max = 5
                ),

                textInput("critera_text",
                          label = "Type the different criteria titles, seperated by commas.",
                          value = "Example A, Example B"),

                conditionalPanel(condition = "input.criteria_count == 2",
                                 uiOutput("mySelectInput"))
              ),

              mainPanel()

            ))

server <-
  function(input, output) {
    output$mySelectInput <- renderUI({
      criteria1 <- strsplit(input$critera_text, ", ")[[1]][1]
      criteria2 <- strsplit(input$critera_text, ", ")[[1]][2]

      selectInput(
        "main_cri1",
        label = paste0(
          "How much more important is ",
          criteria1,
          " than ",
          criteria2,
          "?"
        ),
        choices = c(
          "9 (Extremely more important)",
          "7 (Much more important)",
          "5 (Moderately more important)",
          "3 (Slightly more important)",
          "1 (Equally as important)",
          "1/3 (Slightly less important)",
          "1/5 (Moderately less important)",
          "1/7 (Much less important)",
          "1/9 (Extremely less important)"
        )
      )
    })
  }

shinyApp(ui = ui, server = server)