Форматирование блестящих условных переменных-столбцов с помощью formatStyle - PullRequest
1 голос
/ 11 марта 2020

У меня есть список фреймов данных, каждый с общим именем столбца, но другие столбцы могут отличаться. Моя цель состоит в том, чтобы отформатировать все, кроме общего столбца, так как каждый df отображается в блестящем приложении. Насколько я понял:

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

set.seed(101)

df1 <- data.frame(id = runif(10), col1 = rnorm(10), col2 = rnorm(10))
df2 <- data.frame(id = runif(10), col1 = rnorm(10), col3 = rnorm(10))
df3 <- data.frame(id = runif(10), col3 = rnorm(10), col4 = rnorm(10))

df <- list(data1 = df1, data2 = df2, data3 = df3)

ui <- fluidPage(
  fluidRow(
    column(3, selectInput('select', 'Choose dataframe: ', choices = c('data1', 'data2', 'data3'),
                          selected = 1)),
    column(9, DTOutput('table'))
  )
)

server <- function(input, output) {

  selected <- reactive({
    input$select
  })

  col_names <- c('col1', 'col2', 'col3', 'col4')

  output$table <- renderDT(
    df[[selected()]] %>% formatStyle(names(.)[names(.) %in% col_names], backgroundColor = 'yellow'), 
    options = list(pageLength = 15))

}

shinyApp(ui=ui,server=server)

И вот ошибка, которую я получаю в консоли:

Предупреждение: ошибка в name2int: вы указали столбцы: col1, col2, но имена столбцов данных: [Нет трассировки стека]

Table not rendered

Как мне заставить formatStyle работать с эти имена переменных столбцов?

1 Ответ

0 голосов
/ 11 марта 2020

Попробуйте изменить его на datatable

server <- function(input, output) {

  selected <- reactive({
  input$select
  })

  col_names <- c('col1', 'col2', 'col3', 'col4')

  output$table <- DT::renderDT(

    {dat <- df[[selected()]]
    nm1 <- intersect(names(dat), col_names)

    DT::datatable(dat, options = list(pageLength = 15))   %>%
        formatStyle(nm1, backgroundColor = 'yellow')
    }


  )

}

shinyApp(ui=ui,server=server)

-выход

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...