#r #shiny #rhandsontable
#r #shiny #rhandsontable
Вопрос:
Q1: Я хотел бы изменить формат ячейки rhandsontable в Shiny, когда ее содержимое становится пустым. Я думал, что нашел это с помощью hot_cols(renderer = "...")
, но я весьма удивлен результатом: ячейки с содержимым 0 также выделены. Может кто-нибудь сказать мне, как я должен проверять пустоту в JS через R? Я пробовал value === ''
и isEmpty() без какого-либо успеха.
Q2: Дополнительно, если мы введем «1e6» в столбец 3, отображаемое значение действительно равно 1000000, но его фон переключится на красный: есть ли способ предотвратить это? т.е. разрешить ввод научной нотации?
Вот минимально воспроизводимый пример:
library(shiny)
library(rhandsontable)
DF <- data.frame(col1 = c(1, 0, 3), col2 = c(letters[23:22], NA), col3 = round(rnorm(3, 1e6, 1e3),0))
server <- shinyServer(function(input, output, session) {
output$rt <- renderRHandsontable({
rhandsontable(DF) %>%
# conditional overall formatting > grey empty cells
hot_cols(renderer = "
function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.NumericRenderer.apply(this, arguments);
if(!value) {
td.style.background = '#EEE';
}
}")
})
})
ui <- shinyUI(fluidPage(
rHandsontableOutput("rt")
))
shinyApp(ui, server)
Ответ №1:
Что касается вашего первого вопроса: вы можете добавить условие, что значение не равно 0:
library(shiny)
library(rhandsontable)
DF <- data.frame(col1 = c(1, 0, 3), col2 = c(letters[23:22], NA), col3 = round(rnorm(3, 1e6, 1e3),0))
server <- shinyServer(function(input, output, session) {
output$rt <- renderRHandsontable({
rhandsontable(DF) %>%
# conditional overall formatting > grey empty cells
hot_cols(renderer = "
function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.NumericRenderer.apply(this, arguments);
if(!value amp;amp; value != 0) {
td.style.background = '#EEE';
}
}")
})
})
ui <- shinyUI(fluidPage(
rHandsontableOutput("rt")
))
shinyApp(ui, server)
Что касается вашего второго вопроса: это известная ошибка, которая была исправлена только в handsontable
6.2.1, но версия CRAN rhandsontable
использует handsontable
6.1.1. Версия для разработки, похоже, обновлена до 6.2.2, так что вы можете установить ее из https://github.com/jrowen/rhandsontable
Комментарии:
1. Я был так уверен, что есть определенный способ протестировать оба одновременно… Я не подумал об этом очевидном решении 🙂 Почему вы используете «amp;amp;», а не просто «amp;»?
2. Я не очень разбираюсь в javascript, но я думаю, что логическое И в JS является
amp;amp;