1

私は、優れたPivotTable.jsライブラリをラップするrpivotTable htmlwidgetを使用しています。セルの値に基づいてピボット テーブルを条件付きで書式設定したいと考えています。

これを行うために、ここで関数を適応させようとしました。以下は、最小限の Shiny アプリですrpivotTable

rm(list = ls())
library(shiny)
library(shinydashboard)
library(rpivotTable)
library(dplyr)

#==========================================================
# simulate some data for the pivot table
#==========================================================
df_pivot = data_frame(
  factor1 = sample(rep(LETTERS[1:2], 100)),
  factor2 = sample(rep(LETTERS[5:6], 100)),
  factor3 = sample(rep(LETTERS[19:20], 100)),
  value = abs(rnorm(200))
)

#==========================================================
# ui
#==========================================================
pivot_body = dashboardBody({
  tags$head(includeScript("pivot.js"))
  tags$head(
    tags$style(
      HTML(
        ".realGone { background-color: #F08080 !important; }"
      )
    )
  )
  rpivotTableOutput(outputId = "pivot_output")
})

pivot_header = dashboardHeader(title = "Some title.")
pivot_sidebar = dashboardSidebar()

pivot_ui = dashboardPage(
  header = pivot_header,
  sidebar = pivot_sidebar,
  body = pivot_body
)

#==========================================================
# server
#==========================================================
pivot_server = shinyServer(function(input, output, session) {
  output$pivot_output = renderRpivotTable({
    rpivotTable(
      data = df_pivot,
      rows = "factor1",
      cols = "factor2"
    )
  })
})

#==========================================================
# run the app
#==========================================================
pivot_app = shinyApp(
  ui = pivot_ui,
  server = pivot_server
)

runApp(pivot_app)

そして、これが JS 関数の私の適応です。基本的な考え方は、 class を持つ要素を探し、.pvtValそれらにクラスを追加し、このクラスに基づいて CSS スタイルを適用することです。

$(document).ready(function(){
var $labels = $('.pvtVal');
console.log("Reached here.");
  for (var i=0; i<$labels.length; i++) {
    if ($labels[i].innerHTML < 12) {
            $('.pvtVal').eq(i).addClass('expired');
        } else if ($labels[i].innerHTML > 12 && $labels[i].innerHTML < 14) {
          $('.pvtVal').eq(i).addClass('dead');
      } else if ($labels[i].innerHTML > 14) {
        $('.pvtVal').eq(i).addClass('realGone');
      }
  }
});

realGoneしかし、コンソールで要素を調べると、クラスが追加されていないようです。私の推測では、私は何をするのかを誤解していると思います$document().ready

4

1 に答える 1