2017-01-05 3 views
0

オプションのrowCallbackを使用してdatatableを使用してテーブルに条件付き書式を追加したいとします。テーブルのサイズはShinyアプリで変更され、2番目の列から最後の列の値が1番目の列の値よりも大きいかどうかに基づいてバックグラウンドを適用したいと考えています。したがって、どの列をフォーマットするかを指定するときにforループを組み込みたいと思います。ループ内のjavascriptコード内のRableのdatatable関数のrowCallbackオプション

私はに条件付き書式を適用したいと考えている列をハードコーディングするときは、次はうまく動作します:

if (!require(devtools)) install.packages("devtools"); library(devtools) 
if (!require(DT)) devtools::install_github("rstudio/DT"); library(DT) 

trial <- matrix(c(3,4,1,2,1,2,4,2,5), ncol=3) 
colnames(trial) <- c('value', 'min', 'max') 
trial.table <- data.frame(trial) 

DT::datatable(trial.table,options = list(rowCallback = JS(' 
                  function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
                  if (parseFloat(aData[2]) > aData[1]) 
                  $("td:eq(2)", nRow).css("background-color", "orange"); 
                  if (parseFloat(aData[2]) > aData[1]) 
                  $("td:eq(3)", nRow).css("background-color", "orange"); 
                  }'))) 

私はループでこれをしようとすると、しかし、ディスプレイに何も表示され:

DT::datatable(trial.table,options = list(rowCallback = JS(' 
                  function(nRow, aData, iDisplayIndex, iDisplayIndexFull) { 
                  for (i =2, i < 4, i++) { 
                   if (parseFloat(aData[i]) > aData[1]) 
                   $("td:eq(i)", nRow).css("background-color", "orange"); 
                   } 
                  }'))) 

RのJavascriptの中でforループを処理しますか?

答えて

0

私はこれを理解しました。ここに2つの問題があります

  1. 構文エラーです。 JavaScriptのforループの引数は、セミコロンで区切る必要があります。
  2. 繰り返し変数iは、forループの2行目に二重引用符で表示されます。したがって、JSは引用符で囲まれているため、これをどうしたらいいのかわかりません。現在のiの値を渡すためには二重引用符の外に置く必要があります。

-

trial <- matrix(c(3,4,1,2,1,2,4,2,5), ncol=3) 
colnames(trial) <- c('value', 'min', 'max') 
trial.table <- data.frame(trial) 

DT::datatable(trial.table,options = list(rowCallback = JS(' 
                  function(nRow, aData) { 
                  for (i=2; i < 4; i++) { 
                   if (parseFloat(aData[i]) > aData[1]) 
                   $("td:eq(" + i + ")", nRow).css("background-color", "orange"); 
                   } 
                  }'))) 
0

forループを閉じるための右中かっこがありません。

+0

スティーブ、私は(今それを修正)していますが、テーブルはまだどちらか、中括弧で表示されません。 –

関連する問題