检查Rhandsontable中Shiny中的有效输入

问题描述

问题我有以下示例应用程序,用户可以在其中更改可横置对象。我想检查用户所做的修改是否有效。已实现:如果无效,则单元格颜色将变为深红色。

问题:如果R仅包含有效输入,是否有可能检查R(不仅在视觉上)整个可控范围,即可以返回的TRUE / FALSE标志并且是一个属性可以放倒物体或某些隐藏选项?

library(shiny)
library(rhandsontable)

ui <- fluidPage(
    rHandsontableOutput("table")
)

server <- function(input,output,session) {
  
  output$table <- renderRHandsontable(
    rhandsontable(mtcars)
  )
  
  observe({
    str(input$table)
  })
}

shinyApp(ui,server)

解决方法

您可以使用hot_to_r读入表格,然后进行检查。在该示例中,如果将一个单元格更改为一个字符,则标志设置为FALSE。这是因为在输入中字符返回为NA(我不确定为什么不返回字符):

library(shiny)
library(rhandsontable)

ui <- fluidPage(
  rHandsontableOutput("table"),verbatimTextOutput("flag")
)

server <- function(input,output,session) {
  
  # flag for numeric values
  is_table_ok <- reactiveVal(FALSE)
  
  output$table <- renderRHandsontable(
    rhandsontable(mtcars)
  )
  
  observeEvent(input$table,{
    table_object <- hot_to_r(input$table)
    flag <- !is.na(table_object)
    flag <- purrr::reduce(flag,`&&`)
    is_table_ok(flag)
  })
  
  output$flag <- renderPrint({
    is_table_ok()
  })
}

shinyApp(ui,server)