Метка updateSelectInput не принимает теги HTML?

У меня проблема с комбинацией selectInput и updateSelectInput в моем приложении Shiny (я новичок в Shiny, но нигде не могу найти ответа на этот вопрос). Я хочу отформатировать этикетку с помощью тегов html, как в базовом примере ниже (например, разделить на две строки, изменить размер шрифта). Это прекрасно работает для «selectInput», но «updateSelectInput» не может переварить ту же метку и выводит «[object Object]». Мне кажется, что с html-тегами он не справляется. Есть ли обходной путь для этого ??? Спасибо!

ui.R:

# Load libraries needed for app
library(shiny)
library(shinydashboard)

# Define the overall UI with a dashboard page template
shinyUI(
   dashboardPage(
      dashboardHeader(title = "dashboard header"),
      dashboardSidebar( 
         #Create first dropdown box
         selectInput("choice1", "First choice:",1:5,selected=NULL),

         #Create second dropdown box
         selectInput("choice2",  p("Then, make your ", tags$br(), tags$small("second choice")), c("a","b","c","d","e"))
      ),
      dashboardBody()
   ) 
)

server.R:

# Load libraries needed for app
library(shiny)
library(shinydashboard)

# Define server for the Shiny app
shinyServer(function(input, output,session) {
   # populate second dropdown box when a choice in first dropdown box is made
   observe({
      updateSelectInput(session, "choice2", p("Then, make your ", tags$br(), tags$small("second choice")), c("a","b","c","d","e"))
   })
}) 

person humuskopf    schedule 06.10.2016    source источник


Ответы (1)


В вашем описании / коде неясно, чего вы хотите достичь. При этом вы отмечаете изменение метки в updateSelectInput, поэтому нет необходимости повторять метку в команде обновления. Также нет ввода в ваше наблюдение (, оно ничего не будет делать. Я изменяю код, чтобы он был реактивным, чтобы ввести $ choice1, но вам нужно добавить код для обновления вариантов выбора в choice2.

Вы также можете использовать renderUI / uiOutput для обновления элементов управления на сервере, тогда вы избежите проблем с меткой.

# Load libraries needed for app
library(shiny)
library(shinydashboard)

# Define server for the Shiny app
server <- shinyServer(function(input, output,session) {
   # populate second dropdown box when a choice in first dropdown box is made
   observeEvent( input$choice1  ,{
      updateSelectInput(session = session,
                        inputId =  "choice2",
                       # label = p("Then, make your ", tags$br(), tags$small("second choice")),
                        choices = c("a","b","c","d","e"))
   })
}) 


# Define the overall UI with a dashboard page template
ui <- shinyUI(
   dashboardPage(
      dashboardHeader(title = "dashboard header"),
      dashboardSidebar( 
         #Create first dropdown box
         selectInput(inputId = "choice1",
                     label = "First choice:",
                     choices = 1:5,
                     selected=NULL),

         #Create second dropdown box
         selectInput(inputId = "choice2",
                     label = p("Then, make your ",    tags$br(),  tags$small("second choice")),
                     choices =  c("a","b","c","d","e"))
      ),
      dashboardBody()
   ) 
)

shinyApp(ui, server)
person Eduardo Bergel    schedule 06.10.2016
comment
Привет, Рон, большое спасибо за быстрый ответ. Во-первых, комментирование метки в updateSelectInput решило мою проблему !!! Хотя я до сих пор не понимаю, почему он не принимает то же самое, что и selectInput, - любые идеи ?. Я ничего не включил в наблюдение, потому что это было не по существу, но я полагаю, что тогда я мог бы полностью удалить это. Спасибо еще раз! - person humuskopf; 07.10.2016
comment
updateSelectInput сложен. Вы также можете установить label = NULL в selectInput и добавить метку в виде абзаца html над элементом управления в пользовательском интерфейсе или на сервере с помощью renderUI / uiOutput. Я обычно так делаю, потому что это гораздо более гибко. - person Eduardo Bergel; 07.10.2016
comment
stackoverflow.com/ questions / 40341804 / дает решение для обновления метки с помощью shinyjs::html("labelText", "<b>second choice</b>"), если вы помещаете метку, например, в div("First choice:", id = "labelText"). - person landroni; 20.09.2019