1

我正在使用formattableandDT一起创建自定义表格,同时仍然能够编辑单元格值(使用editable=T, from DT)。

问题是,如果我formattable()用来制作自定义表格,每当我双击一个单元格以编辑其内容时,它将显示 HTML 代码而不是简单的值。

这里有一个例子:

library(formattable)
library(DT)

products <- data.frame(id = 1:5, 
                       price = c(10, 15, 12, 8, 9),
                       rating = c(5, 4, 4, 3, 4),
                       market_share = percent(c(0.1, 0.12, 0.05, 0.03, 0.14)),
                       revenue = accounting(c(55000, 36400, 12000, -25000, 98100)),
                       profit = accounting(c(25300, 11500, -8200, -46000, 65000)))

f_table <- formattable(products, list(
  price = color_tile("transparent", "lightpink"))) 

as.datatable(f_table, editable=T)
# as.datatable is from formattable, it lets you keep the table styling

在这里您可以看到问题:

在此处输入图像描述

有没有简单的方法来解决这个问题?

4

1 回答 1

1

formattable您可以使用DTwithrender选项来设置 CSS ,而不是 using 。

library(DT)

products <- data.frame(id = 1:5, 
                       price = c(10, 15, 12, 8, 9),
                       rating = c(5, 4, 4, 3, 4))

render <- c(
  "function(data, type, row){",
  "  if(type === 'display'){",
  "    var s = '<span style=\"padding: 0 4px; border-radius: 4px; background-color: pink;\">' + data + '</span>';",
  "    return s;",
  "  } else {",
  "    return data;",
  "  }",
  "}"
)

datatable(products, editable = "cell", 
          options = list(
            columnDefs = list(
              list(targets = 2, render = JS(render))
            )
          )
)

在此处输入图像描述

发生了一些奇怪的事情:如果您准确地双击单元格内容(值,例如 10),则编辑不起作用。您必须双击单元格而不是值。


编辑

这是另一个解决方案,取自这个问题

library(DT) 

products <- data.frame(id = 1:5, 
                       price = c(10, 15, 12, 8, 9),
                       rating = c(5, 4, 4, 3, 4))

break_points <- 
  function(x) stats::quantile(x, probs = seq(.05, .95, .05), na.rm = TRUE)
red_shade <- 
  function(x) round(seq(255, 40, length.out = length(x) + 1), 0) %>% 
  {paste0("rgb(255,", ., ",", ., ")")}

brks <- apply(products, 2, break_points)
clrs <- apply(brks, 2, red_shade)

column <- "price"

datatable(products, editable = "cell") %>%
  formatStyle(column, backgroundColor = styleInterval(brks[,column], clrs[,column]))

在此处输入图像描述

于 2019-09-10T10:11:37.030 回答