r - 如何在 Shiny 中正确包含 `kable_classic_2()`?
问题描述
根据kableExtra
文档,此代码应正确输出表格,
library(shiny)
ui <- fluidPage(
# Application title
titlePanel("mtcars"),
sidebarLayout(
sidebarPanel(
sliderInput("mpg", "mpg Limit",
min = 11, max = 33, value = 20)
),
mainPanel(
tableOutput("mtcars_kable")
)
)
)
server <- function(input, output) {
library(dplyr)
library(kableExtra)
output$mtcars_kable <- function() {
req(input$mpg)
mtcars %>%
mutate(car = rownames(.)) %>%
select(car, everything()) %>%
filter(mpg <= input$mpg) %>%
knitr::kable("html") %>%
kable_classic_2() %>%
add_header_above(c(" ", "Group 1" = 5, "Group 2" = 6))
}
}
# Run the application
shinyApp(ui = ui, server = server)
但是,输出与表主题不对应kable_classic_2()
。所以我改变了output$mtcars_kable
它HTML
直接打印 -codes 的方式,在下面,
library(shiny)
ui <- fluidPage(
# Application title
titlePanel("mtcars"),
sidebarLayout(
sidebarPanel(
sliderInput("mpg", "mpg Limit",
min = 11, max = 33, value = 20)
),
mainPanel(
uiOutput("mtcars_kable")
)
)
)
server <- function(input, output) {
library(dplyr)
library(kableExtra)
output$mtcars_kable <- renderUI(
{
req(input$mpg)
mtcars %>%
mutate(car = rownames(.)) %>%
select(car, everything()) %>%
filter(mpg <= input$mpg) %>%
knitr::kable("html") %>%
kable_classic_2() %>%
add_header_above(c(" ", "Group 1" = 5, "Group 2" = 7))
}
)
}
# Run the application
shinyApp(ui = ui, server = server)
但是,这仅输出HTML
-codes 而不是将它们呈现到实际表中。我想要的输出是在替代主题下找到的输出。
解决方案
看起来闪亮不需要 kableExtra css 吗?
你从这里提到文档: https ://cran.r-project.org/web/packages/kableExtra/vignettes/use_kable_in_shiny.html
tableOutput
在 UI 中,以及function()
返回过滤结果的简单服务器中。
library(shiny)
ui <- fluidPage(
# Application title
titlePanel("mtcars"),
sidebarLayout(
sidebarPanel(
sliderInput("mpg", "mpg Limit",
min = 11, max = 33, value = 20)
),
mainPanel(
tableOutput("mtcars_kable")
)
)
)
server <- function(input, output) {
library(dplyr)
library(kableExtra)
output$mtcars_kable <- function()(
{
req(input$mpg)
mtcars %>%
mutate(car = rownames(.)) %>%
select(car, everything()) %>%
filter(mpg <= input$mpg) %>%
knitr::kable("html") %>%
kable_classic_2() %>%
add_header_above(c(" ", "Group 1" = 5, "Group 2" = 7))
}
)
}
# Run the application
shinyApp(ui = ui, server = server)
也许更好地建立这样的汽车专栏:
mtcars %>%
as_tibble(rownames = "car") %>%
select(car, everything()) %>%
有一个没有行名的小标题。
因此,就像您在评论中指出的那样,kableExtra 的 css 样式根本不会呈现。(我已经测试过更新所有软件包以查看是否有变化,但没有)。
gt 包的其他解决方案
然后另一个选择是迁移到 gt 包,您可以在其中完全编辑 css ...结果非常干净,但显然它不是您问题的 kableExtra 解决方案。
ui <- fluidPage(
# Application title
titlePanel("mtcars"),
sidebarLayout(
sidebarPanel(
sliderInput("mpg", "mpg Limit",
min = 11, max = 33, value = 20)
),
mainPanel(
gt::gt_output("mtcars_kable")
)
)
)
server <- function(input, output) {
library(dplyr)
library(kableExtra)
output$mtcars_kable <- gt::render_gt({
req(input$mpg)
mtcars %>%
as_tibble(rownames = "car") %>%
select(car, everything()) %>%
filter(mpg <= input$mpg) %>%
gt::gt(id = "cars") %>%
gt::tab_spanner(
label = "Group 1",
columns = 2:6) %>%
gt::tab_spanner(
label = "Group 2",
columns = 6:12) %>%
gt::opt_css(
css = "
#cars .gt_table {
background-color: #fffggg;
}
#cars .gt_row {
padding: 4px 12px;
}
#cars .gt_col_heading {
text-align: center !important;
}
")
})
}
推荐阅读
- java - 为什么 Kotlin 类默认是 final 而不是 open?
- javascript - React 无法识别 DOM 元素上的 `initialValue` 属性
- android - 如何模拟 Android `Tasks.await()`?
- c - 在C程序中动态查找数组长度而不使用sizeof
- python - Pyomo/IPOPT:检索计算变量
- android - 统一声音控制
- ruby-on-rails - 在 Ruby on Rails 中隐藏 ckeditor 字段
- python - Gensim:调用 docvecs.most_similar 产生错误
- powershell - 为什么 Export-CSV 会覆盖整个 CSV 内容而不仅仅是指定的数据?
- python-3.x - 从熊猫数据框创建嵌套字典