Отображение нескольких информационных окон в рамках одной реактивной функции в R Shiny

Я хочу знать, возможно ли создать несколько информационных окон только с одной реактивной функцией «ibox», как в приведенном ниже сценарии. Я передам значения для всех информационных полей ниже в рамках реактивной функции ibox и увижу, что все они отображаются вместе.

library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic boxes"),
dashboardSidebar(),
dashboardBody(
  fluidRow(
  infoBoxOutput("ibox")
  )))
server <- function(input, output) {
output$ibox <- renderInfoBox({
  infoBox(
    "Title",
    5,
    icon = icon("credit-card")
  )
  infoBox(
    "Title",
    5,
    icon = icon("credit-card")
  )
  infoBox(
    "Title",
    4,
    icon = icon("credit-card")
  )

  })}
  shinyApp(ui, server)

person Adam Shaw    schedule 22.03.2018    source источник
comment
Вместо этого посмотрите на renderUI() и uiOutput() :) Я думаю, что если вы замените renderInfoBox() на renderUI(), вы уже должны быть достаточно близки к тому, что хотите.   -  person Lodewic Van Twillert    schedule 22.03.2018
comment
Привет, спасибо за ответ, все еще получаю то же самое, если вы можете помочь мне с рабочим примером.   -  person Adam Shaw    schedule 22.03.2018


Ответы (1)


Как упоминалось в комментариях, вы можете использовать renderUI и uiOutput. Однако обратите внимание, что renderUI на самом деле отображает только последний оператор в своем теле. Чтобы отобразить несколько объектов, мы можем поместить их в список (или column, fluidRow и т. д.). Рабочий пример:

library(shiny)
library(shinydashboard)
ui <- dashboardPage(
  dashboardHeader(title = "Dynamic boxes"),
  dashboardSidebar(),
  dashboardBody(
    fluidRow(
      uiOutput("ibox")
    )))
server <- function(input, output) {
  output$ibox <- renderUI({
    list(
      infoBox(
        "Title",
        5,
        icon = icon("credit-card")
      ),
      infoBox(
        "Title",
        5,
        icon = icon("credit-card")
      ),
      infoBox(
        "Title",
        4,
        icon = icon("credit-card")
      )
    )
  })}
shinyApp(ui, server)
person Florian    schedule 22.03.2018