I am building a R shiny app. In the app, I have an editable table that allows users to edit numbers. I built this table using R library(DT).
On the server side it looks like this :
Note:
- On UI side, I ask user to select name(s) of a fruit (one or more from apple, orange, pear, banana)
- "create_param_table" is a function I wrote that builds a tibble data frame that looks like this (depending on what fruit(s) user picked, for example here users picked apple & orange):
+----------+-----------+-------+-------+
| Category | Parameter | Upper | Lower |
+----------+-----------+-------+-------+
| Apple | alpha | 0 | 0 |
+----------+-----------+-------+-------+
| Apple | beta | 0 | 0 |
+----------+-----------+-------+-------+
| Orange | alpha | 0 | 0 |
+----------+-----------+-------+-------+
| Orange | beta | 0 | 0 |
+----------+-----------+-------+-------+
| Orange | gamma | 0 | 0 |
+----------+-----------+-------+-------+
param_table <- reactiveValues(df = data.frame())
observeEvent(input$choice, {
param_table$df <- create_param_table(input$choice)
})
output$param_table <- DT::renderDataTable({
param_table$df %>%
datatable(
rownames = FALSE,
editable = TRUE,
options = list(
dom = "t",
paging = FALSE,
ordering = FALSE
)
),
},server = FALSE)
param_table_proxy <- dataTableProxy("param_table")
observeEvent(input$param_table_cell_edit, {
info <- input$param__table_cell_edit
i <- as.numeric(info$row)
j <- as.numeric(info$col) + 1
v <- as.numeric(info$value)
param_tables$df[i, j] <<- DT::coerceValue(v, param_table$df[i, j])
replaceData(param_table_proxy, param_table$df, resetPaging = FALSE)
output$my_table <- renderUI({
req(input$choice)
material_card(
title = tags$b("Parameters"),
depth = 4,
DT::dataTableOutput("param_table")
)
}
})
The UI side looks like this:
material_row(
...
...
material_column(
width = 3,
uiOutput("my_table")
)
)
- I am using this shiny package called "shinymaterial" for my user interface. So the UI construct looks a bit different from traditional bootstrapping Shiny interface.
Here is the problem:
-
The app runs (does not crash), but whenever I edit the number in the datatable, this warning message will show up:
-
The app still allows me to edit the numbers. But for each number I edit, this warning message shows up. This becomes very cumbersome and very user-unfriendly when I have to edit more than 1 number in the data table.
I am wondering:
- Is this because the app was expecting the table to be in JSON format, but it is not detecting a JSON table, hence the "invalid JSON response" message?
- If so, does library(DT) even allows a JSON format table?
- If not, what could be the source of this error? Could this be something unique about shinymaterial?
- If there's not an immediate cure, is there anyway I could just force suppress a warning message from popping up in my Shiny app?
Much appreciation for any help & insights into potential solutions!