微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:如何在 rhandsontable 中为单个单元格着色

如何解决R:如何在 rhandsontable 中为单个单元格着色

我有一个数据帧(color_cells),其中包含数据帧的单元格的列数和行数,这些单元格应该在 rhandsontable 中着色。如何将此信息传递给 renderRHandsontable 中的渲染器?

library(shiny)
library(rhandsontable)

ui <- fluidPage(
  rHandsontableOutput('hot')
)

server <- function(input,output,session) {
  
  color_cells <<- data.frame(col=c(1,2,3),row=c(2,4,5))
  
  output$hot <- renderRHandsontable({
    rhandsontable(mtcars,readOnly = TRUE,width = 750,height = 300) %>%
      hot_cols(renderer = myrenderer)
  })
  
  
  myrenderer <- "function (instance,td,row,col,prop,value,cellProperties) {

  Handsontable.renderers.TextRenderer.apply(this,arguments);

  for ( i in 1:length(color_cells$row) ) {
    r <- color_cells[i,'row']
    c <- color_cells[i,'col']
    if (col == c & row == r ) {  
      td.style.background = 'pink';
      }
    }
  }"
}

shinyApp(ui = ui,server = server)

解决方法

这里有一些东西可以尝试 - 如果可行,请告诉我。

调用 rhandsontable 时包括两个自定义参数,这些参数将包含表示 color_cells 中要突出显示的列和行的向量。

在您的自定义渲染器中,从存储在 params 中的这两个向量创建数组。然后,如果列和行匹配参数,您可以设置背景颜色。

server <- function(input,output,session) {
  
  color_cells <<- data.frame(col=c(1,2,3),row=c(2,4,5))
  
  output$hot <- renderRHandsontable({
    rhandsontable(mtcars,col_highlight = color_cells$col - 1,row_highlight = color_cells$row - 1,readOnly = TRUE,width = 750,height = 300) %>%
      hot_cols(renderer = myrenderer)
  })

  myrenderer <- "function(instance,td,row,col,prop,value,cellProperties) {
                Handsontable.renderers.TextRenderer.apply(this,arguments);
                if (instance.params) {
                    hcols = instance.params.col_highlight
                    hcols = hcols instanceof Array ? hcols : [hcols]
                    hrows = instance.params.row_highlight
                    hrows = hrows instanceof Array ? hrows : [hrows]
                    
                    for (i = 0; i < hcols.length; i++) { 
                        if (hcols[i] == col && hrows[i] == row) {
                            td.style.background = 'pink';
                        }
                    }
                }
  }"      
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。