Блестящее форматирование таблицы - PullRequest
3 голосов
/ 21 апреля 2020

Я новичок в Shiny и имею базовое c блестящее приложение, использующее mtcars. У меня есть несколько вкладок с некоторыми выпадающими ввода и представления вывода в виде таблиц DT. Это все работает нормально, но теперь я хотел бы использовать некоторое форматирование, например formattable. Некоторые из форматирования, которые я хотел бы включить, - это basi c процент, десятичное число. Также я хотел бы добавить подсветку на основе ячеек. Я попробовал несколько функций форматирования без какой-либо удачи. Я добавил функции в вывод на стороне сервера, но не могу получить правильную комбинацию. Ниже мой блестящий код:

library(shiny)
library(dplyr)
library(DT)

ui <- fluidPage(

titlePanel("mtcars"),

sidebarLayout(

sidebarPanel(

  selectInput("cyl", 
              "cyl:",
              c(unique(as.character(mtcars$cyl)))), 

    selectInput("gear",
                "gear:",
                c("All",
                  unique(as.character(mtcars$gear)))), width=2),

    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("Summary", DT::dataTableOutput("Summary")),
        tabPanel("Detail", DT::dataTableOutput("Detail"))))))
    server <- function(input, output) {

    output$Detail <- renderDataTable(datatable({
       data <- mtcars
         if (input$cyl != "All") {
             data <- data[data$cyl == input$cyl,]
             }
         if (input$gear != "All") {
             data <- data[data$gear == input$gear,]
             }
         data
         }))

    output$Summary <- renderDataTable({

    mtcars %>% 
      filter(cyl==input$cyl)  %>% 
      group_by(gear) %>%
      summarise(mpg = median(mpg), 
                count = n())  %>% 
      ungroup() %>%
      arrange(desc(count))
    })}

shinyApp(ui = ui, server = server)

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Я не уверен, что вы пробовали до сих пор с formattable, но вы должны иметь возможность использовать его с DT в своем блестящем приложении.

Вот краткий пример, который вы можете пытаться. Это делает столбец mpg в процентах. Кроме того, если столбец count окрашен в оттенок зеленого.

Другие виньетки доступны для других опций с пакетом formattable.

output$Summary <- renderDataTable({
  my_data <- mtcars %>% 
    filter(cyl==input$cyl)  %>% 
    group_by(gear) %>%
    summarise(mpg = median(mpg), 
              count = n())  %>% 
    ungroup() %>%
    arrange(desc(count))

  # Make percent, for example
  my_data$mpg <- percent(my_data$mpg)

  # Return formattable datatable
  return(
    as.datatable(
      formattable(
        my_data,
        list(
          count = color_tile("transparent", "green")
        )
      )
    )
  )
})
0 голосов
/ 21 апреля 2020

Чтобы завершить ответ Бена, даже если вы говорите, что хотите использовать formattable, я думаю, что в DT достаточно параметров для настройки таблиц так, как вы хотите.

Вот ваш пример (случайным образом настроено, поскольку вы не указали форматирование ячеек):

library(shiny)
library(dplyr)
library(DT)

ui <- fluidPage(

  titlePanel("mtcars"),

  sidebarLayout(

    sidebarPanel(

      selectInput("cyl", 
                  "cyl:",
                  c(unique(as.character(mtcars$cyl)))), 

      selectInput("gear",
                  "gear:",
                  c("All",
                    unique(as.character(mtcars$gear)))), width=2),

    mainPanel(
      tabsetPanel(
        id = 'dataset',
        tabPanel("Summary", DT::dataTableOutput("Summary")),
        tabPanel("Detail", DT::dataTableOutput("Detail"))))))

server <- function(input, output) {

  output$Detail <- renderDataTable(datatable({
    data <- mtcars
    if (input$cyl != "All") {
      data <- data[data$cyl == input$cyl,]
    }
    if (input$gear != "All") {
      data <- data[data$gear == input$gear,]
    }
    data
  }))

  output$Summary <- renderDataTable({

    your_data <- mtcars %>% 
      filter(cyl==input$cyl)  %>% 
      group_by(gear) %>%
      summarise(mpg = median(mpg), 
                count = n())  %>% 
      ungroup() %>%
      arrange(desc(count))

    datatable(your_data) %>%
      formatPercentage(columns = c("mpg", "gear")) %>%
      formatRound(columns = c("count"), digits = 3) %>%
      formatStyle(columns = "mpg",
                  valueColumns = "gear", 
                  backgroundColor = styleEqual(c(3, 4, 5), c("red", "blue", "green")))
  })}

shinyApp(ui = ui, server = server)

См. здесь для получения более подробной информации и здесь для нескольких примеров цветового оформления .

...