簡體   English   中英

在R Shiny中,可以使用DT :: dataframe交互突出顯示單元格嗎?

[英]In R Shiny, can one interactively highlight cells using DT::dataframe?

使用R Shiny和DT:可以輕松地以交互方式突出顯示/取消突出顯示單元格嗎?

我一直在查看DT輸入$ dt_cell_clicked以捕獲被單擊的行和列。 然后,我計划將該值存儲在另一列中,以有條件地突出顯示該值(TRUE / FALSE)。

我的問題是:使用其他選項/功能可以做得更好更快嗎?

library(shiny)
library(shinyjs)

library(dplyr)
library(DT)

options(DT.options = list(pageLength = 5))
df = as.data.frame(
        cbind(
                matrix(round(rnorm(50), 3), 10),
                sample(0:1, 10, TRUE),
                rep(FALSE, 10)
        )
)
# getwd()
setwd(here::here())
# write.csv(df, "data/df_test.csv")

ui <- fluidPage(
        h2("Last clicked:"),
        verbatimTextOutput("last_clicked"),
        actionButton("reset", "Reset clicked value"),
        h2("Datatable:"),
        DT::dataTableOutput("dt"),
        useShinyjs(),
        extendShinyjs(text = paste0("shinyjs.resetDTClick = function() { Shiny.onInputChange('dt_cell_clicked', null); }"))
)

server <- function(input, output) {

        # the last clicked value
        output$last_clicked <- renderPrint({
                str(input$dt_cell_clicked)
        })

        df_new <- reactive({

                # res <- read.csv("data/df_test.csv")
                res <- df
                res
        })

        output$dt <- DT::renderDataTable({
                # DT::datatable(head(mtcars, 2))
                DT::datatable(df_new(), select = "none", editable = TRUE) %>% formatStyle(
                        'V1', 'V6',
                        backgroundColor = styleEqual(c(0, 1), c('gray', 'yellow'))
                )
        })

        observeEvent(input$dt_cell_clicked, {
                validate(need(length(input$dt_cell_clicked) > 0, ''))
                # alert("You clicked something!")

                if(!is.null(input$dt_cell_clicked)){
                        # df[input$dt_cell_clicked$row, input$dt_cell_clicked$column] <- ifelse(0, 1, 0)
                        cat("changing value")
                        df_test <- df_new()
                        df_test[input$dt_cell_clicked$row, input$dt_cell_clicked$column] <- ifelse(0, 1, 0)
                        write.csv(df_test, "data/df_test.csv")
                        rm(df_test)
                        # i
                }
        })

        # use dt_cell_clicked to infer on bool cell

        # df_new <- eventReactive(input$dt_cell_clicked, {
        # df_new <- reactive({
        #
        # })

        observeEvent(input$reset, {
                js$resetDTClick()
        })
}

shinyApp(ui, server)

預期(尚未實現):單擊單元格突出顯示/取消突出顯示。

這段代碼來自: 如何根據其值更改R Shiny數據表單元格的單元格顏色? DataTables DT:單擊的單元格的重置值

您可以簡單地使用單個單元格selection突出顯示:

library(shiny)
library(DT)

options(DT.options = list(pageLength = 5))

DF = as.data.frame(
  cbind(
    matrix(round(rnorm(50), 3), 10),
    sample(0:1, 10, TRUE),
    rep(FALSE, 10)
  )
)

ui <- shinyUI(
  fluidRow(
    tags$style(HTML('table.dataTable tr.selected td, table.dataTable td.selected {background-color: lightgreen !important;}')),
    DT::dataTableOutput("myDT")
  )
)

server <- shinyServer(function(input, output, session) {

  output$myDT <- DT::renderDataTable({
    DT::datatable(DF, selection = list(mode="single", target="cell"), editable = TRUE) %>% formatStyle(
      'V1', 'V6',
      backgroundColor = styleEqual(c(0, 1), c('gray', 'yellow'))
    )
  })

})

shinyApp(ui, server)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM