繁体   English   中英

DT中的新条件行,R闪亮中的rowCallback

[英]New conditional row in DT with rowCallback in R shiny

满足某些条件后,我想在DT中引入新的一行。 它仅用于演示目的。

例如,如果第一行某行的值是“一般风险”,则之前仅引入一列的新行将被引入。 新列的值将为“ RISKS”。 我有以下rowCallback:

rowCallback = I(
                'function(row, data) {
                   if (data[1] == "General risk")
                     $("tr", row).prepend("<tr><td>RISKS</td></tr>");
                }'
               )

$("tr", row).prepend("<tr><td>RISKS</td></tr>"); 不起作用,我也不知道如何解决。

提前致谢。

根据官方的文档本主题存在没有API方法datatablesDT用于在特定的indeces添加行包中的R)。

您可以通过JavaScript中的rowCallback解决此问题,但我建议在R中创建一个临时data.frame (可以是响应式的,这取决于您的用例)。

码:

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

# Create df for reproducible example
df <- data.frame(
  test = c("General risk", "Category2", "Category3"),
  some_value = runif(12)
)

ui <- fluidPage(
  DT::dataTableOutput("dt")
)

server <- function(input, output, session) {
  output$dt <- DT::renderDataTable( {
    # Create temporary data.frame
    df_shown <- df

    # Row indeces to add
    row_indeces <- which(df$test == "General risk")

    # Add rows in decreasing order
    for (i in sort(row_indeces, decreasing = TRUE)) {
      df_shown <- dplyr::add_row(df_shown, test = "Risk", some_value = NA_real_, .before = i)
    }    


    datatable(
      data = df_shown,

      # Change bg color to stand out more
      options = list(
        rowCallback = JS("
          function( row, data, index ) {
            if (data[1] === 'Risk') {
              $(row).css('background-color', 'Crimson');
            }
          }"
        )
      )
    )
  })  
}

shinyApp(ui, server)

输出:

输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM