我使用bslib-package中的value_box
在shiny 的仪表板中显示值.显示的值取决于用户通过各种 Select 器进行的输入,这需要我动态更新值框.使用概述here的方法,这对标题和价值很有效.
但是,我也想根据值来更改值框的类别:例如,如果值低于某个阈值,则显示红色值框,如果值高,则显示绿色值框.
以下是一个MWE来说明我的方法:
library(tidyverse)
library(shiny)
library(bslib)
test_df <- tibble(id = 1:2,
title = c("low value","high value"),
value = c(30, 80))
ui <- page_fixed(
selectInput("select_id", "Selected ID", choices = 1:2, selected = 1),
value_box(title = textOutput("vbox_title"),
value = textOutput("vbox_value"),
class = textOutput("vbox_class")
),
)
server <- function(input, output, session) {
subset_df <- reactive({
test_df %>%
filter(id == input$select_id)
})
output$vbox_title <- renderText({
subset_df() %>%
pull(title)
})
output$vbox_value <- renderText({
subset_df() %>%
pull(value)
})
output$vbox_class <- renderText({
value <- subset_df() %>%
pull(value)
ifelse(value > 50, "bg-success", "bg-warning")
})
}
shinyApp(ui, server)
不幸的是,类的文本输出被处理为div list(id = "vbox_class", class = "shiny-text-output") list()
,我不知道如何将原始字符串传递给类参数.我已经try 使用verbatimTextOutput()
和将输出转换为as.character()
,但均未成功.
我意识到,只在服务器函数内使用适当的类创建值框会更容易.但在我的实际应用程序中,我实际上需要值框保持不变,因为它包含其他未更新的元素.
有没有办法将容器从textOutput()
中移除以使其正常工作?或者,更改类是否需要使用样式标记?