我在一个闪亮的应用程序中有一个rhonsontable。 我的目标是根据列的总和为列中的所有单元格着色。 例如:如果该列中值的总和为1,则该列中的所有单元格都将显示为绿色。
向用户显示的预期结果如下:
使用这样的JS格式似乎可以做到这一点:
rhandsontable(myrhandsontable) %>%
hot_cols(renderer ="some JS script")
我以前从未做过任何JS,而我一直在努力获取“ some JS script
”部分中的列总和。
以下是可与之一起使用的最小生殖实例:
library(shiny)
library(rhandsontable)
library(tidyverse)
# basic user interface (not important here)
ui <- fluidPage(
rHandsontableOutput(outputId = "ex")
)
# server side calculations
server <- function(input, output) {
# create a dummy dataset
ex_data = data.frame(id = letters[1:3],
attr1 = c(0.5, 0.4, 0.3),
attr2 = c(0.6, 0.3, 0.1))
# create the rhandsontable object and define conditional formatting
output$ex = renderRHandsontable({
rhandsontable(ex_data) # %>% renderer ="JS script for conditional formatting")
})
我尝试使用这些帖子和教程未成功:
欢迎提出任何想法:)
答案 0 :(得分:1)
我们可以在rhandsontable - Custom Renderer处看到此解决方案,但是,当我们以闪亮的方式实现该解决方案时,就会遇到问题,幸运的是,该问题已解决here
library(shiny)
library(tidyverse)
library(rhandsontable)
# basic user interface (not important here)
ui <- fluidPage(
rHandsontableOutput(outputId = "ex")
)
# server side calculations
server <- function(input, output, session) {
# create the rhandsontable object and define conditional formatting
output$ex = renderRHandsontable({
# create a dummy dataset
ex_data = data.frame(id = letters[1:3],
attr1 = c(0.5, 0.4, 0.3),
attr2 = c(0.6, 0.3, 0.1))
#create index with columns sum is equal to 1
col_highlight <- unname(which(colSums(ex_data[c(2,3)])==1))
rhandsontable(ex_data, col_highlight = col_highlight,
width = 550, height = 300) %>%
hot_cols(renderer = "
function(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.NumericRenderer.apply(this, arguments);
if (instance.params) {
hcols = instance.params.col_highlight;
hcols = hcols instanceof Array ? hcols : [hcols];
}
if (instance.params && hcols.includes(col)) {
td.style.background = 'lightgreen';
}
}")
})
}
shinyApp(ui,server)