[英]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.