簡體   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