Как использовать useShinydashboard ()? - PullRequest
0 голосов
/ 03 августа 2020

Я хотел бы иметь возможность выбирать, какой valueBox будет изменен командой useShinydashboard(), а не все, как в примере ниже

library(shiny)
library(shinydashboard)
library(shinyWidgets)

ui <- fluidPage(
    tags$h2("Classic shiny"),
    
    setBackgroundColor(color = "ghostwhite"),
    useShinydashboard(),

    fluidRow(
        
        valueBox(
            tagList("60", tags$sup(style="font-size: 20px", "%")),
            "Approval Rating", icon = icon("line-chart"), color = "green"
        ),
        valueBox(
            htmlOutput("progress"), "Progress", icon = icon("users"), color = "purple"
        )))

server <- function(input, output, session) {
    
    output$orderNum <- renderText({
        prettyNum(input$orders, big.mark=",")
    })
    
    output$progress <- renderUI({
        tagList(input$progress, tags$sup(style="font-size: 20px", "%"))
    })
    
}

shinyApp(ui, server)

### EDIT

Как складывается useShinydashboard()

enter image description here

Without useShinydashboard() it looks like this

enter image description here

I want the first option, so I must add useShinydashboard(). The first valueBox is generated by

valueBox(value=div(paste(1.51,"(1 óbito a cada 66 casos)"),style="font-size:25px;"),
               subtitle = tags$div(HTML(' LETALIDADE  ')), width = 12, #icon = icon ("skull", lib = "font-awesome"), color = "black") 

Проблема в том, что команда useShinydashboard() изменяется глобально. На изображении ниже показано, как это обходится без useShinydashboard() (вот как я хочу)

enter image description here

But the useShinydashboard() command looks like this

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Что вы подразумеваете под:

, чтобы иметь возможность выбирать, какой valueBox будет изменен

В документации ?useShinydashboard() говорится, что он позволяет вам использовать shinydashboard функций, которых нет в самом shiny.

valueBox() - это функция shinydashboard, и ее нет в пакете shiny.

Если вы хотите изменить его и иметь доступную «исходную» и «модифицированную» версии - я предлагаю продублировать его в этом отношении и изменить дубликат в соответствии с вашими потребностями. Вы можете увидеть код, из которого состоит функция, если вызвать его в консоли без скобок.

> shinydashboard::valueBox
function (value, subtitle, icon = NULL, color = "aqua", width = 4, 
    href = NULL) 
{
    validateColor(color)
    if (!is.null(icon)) 
        tagAssert(icon, type = "i")
    boxContent <- div(class = paste0("small-box bg-", color), 
        div(class = "inner", h3(value), p(subtitle)), if (!is.null(icon)) 
            div(class = "icon-large", icon))
    if (!is.null(href)) 
        boxContent <- a(href = href, boxContent)
    div(class = if (!is.null(width)) 
        paste0("col-sm-", width), boxContent)
}
<bytecode: 0x7fb528f7f648>
<environment: namespace:shinydashboard>

Измените его по своему усмотрению и сохраните как другую функцию.

PS, если вы просто скопируйте этот код в новую функцию, он выдаст вам ошибки, поскольку эта конкретная функция запускает внутри себя другую функцию, связанную с пакетом. Итак, вам нужно изменить validateColor() на shinydashboard:::validateColor().

0 голосов
/ 03 августа 2020

Возможно, вы можете использовать эту функцию над ui.

myvalueBox <- function (value, subtitle, icon = NULL, color = "white", width = 4, href = NULL) 
{
  #shinydashboard:::validateColor(color)
  if (!is.null(icon)) 
    shinydashboard:::tagAssert(icon, type = "i")
  boxContent <- div(class = paste0("small-box bg-", color), 
                    div(class = "inner", h3(value), p(subtitle)), if (!is.null(icon)) 
                      div(class = "icon-large", icon))
  if (!is.null(href)) 
    boxContent <- a(href = href, boxContent)
  div(class = if (!is.null(width)) 
    paste0("col-sm-", width), boxContent)
}

Затем замените valueBox() на myvalueBox в своей программе.

...