2

これは、この他の質問のリンクに関連しています。

現在、テーブルにスタイリングを適用するためにこのコードを使用しています。

値が の 3 番目の分位数を超える場合にのみ、各セルに色を付ける必要がありrowます。DTrowcolumn

formattable()DT正常に動作しますが、セルを で編集する可能性など、からいくつかの有用なプロパティを失いeditable=Tます。

library(formattable)
library(DT)

dat <- as.data.frame(matrix(AirPassengers, ncol=12, byrow=T))

find_anomaly <- function(x) {
  q3 <- quantile(x, 0.75)
  q3
}

ftable <- formattable(dat, lapply(1:nrow(dat), function(row) {
  area(row, col = 1:12) ~ formatter("span", style = x ~ ifelse(x > find_anomaly(x),
                                                               style(
                                                                 display = "block",
                                                                 padding = "0 4px",
                                                                 "border-radius" = "4px",
                                                                 "color" = csscolor("white"),
                                                                 "background-color" = csscolor(
                                                                   gradient(as.numeric(x),"white", "orangered"))),
                                                               NA))
}))

as.datatable(ftable, editable=T)

formattable()ここでは、テーブルが一度クリックされた HTML を示していることを除いて、すべてが良好であることがわかります。

ここに画像の説明を入力

それから生成されたスタイリングを維持する方法はありformattableますeditable=Tか?

4

1 に答える 1

1

これは、各列にオプションをDT適用したソリューションです。render

library(DT)

products <- data.frame(
  X1 = round(runif(5),2),
  X2 = round(runif(5),2),
  X3 = round(runif(5),2),
  X4 = round(runif(5),2),
  X5 = round(runif(5),2),
  X6 = round(runif(5),2),
  X7 = round(runif(5),2),
  X8 = round(runif(5),2),
  X9 = round(runif(5),2),
  X10 = round(runif(5),2)
)

render <- c(
  "function(data, type, row){",
  "  if(type === 'display'){",
  "    var arr = row.slice();",
  "    arr.sort();",
  "    var per75 =  Math.floor(row.length*.75) - 1;",
  "    var s = data >= arr[per75] ? '<span style=\"padding: 0 4px; border-radius: 4px; background-color: red;\">' + data + '</span>' : data;",
  "    return s;",
  "  } else {",
  "    return data;",
  "  }",
  "}"
)

datatable(products, editable = "cell", rownames = FALSE, 
          options = list(
            columnDefs = list(
              list(targets = "_all", render = JS(render))
            )
          )
)

ここに画像の説明を入力

于 2019-09-10T12:24:02.980 に答える