我想在基於「rhandsontable」的表進行更新時創建驗證方案。我有兩列:最小值和最大值,我希望當Max列中的單元格更新時,只允許更新值大於前一列Min的值,反之亦然。也許有可能使用hot_cols渲染器並通過大於零的減法來驗證,等等,但我一般不熟悉「rhandsontable」或「hansontable」,雖然我認爲這是可能的,但我不知道如何。謝謝。使用rhandsontable R包進行單元格的數值驗證
玩具例子:
library(shiny)
library(rhandsontable)
if (interactive()) {
ui <- fluidPage(
rHandsontableOutput('table'),
tableOutput('table1')
)
server <- function(input, output,session) {
values <- reactiveValues(df=data.frame(Parameter=c('A','B','C'),Min=c(10,20,30),Max=c(20,30,40)))
observe({
if(!is.null(input$table)){
values$df <- hot_to_r(input$table)
output$table1<-renderTable(values$df)
}
})
output$table<-renderRHandsontable({
rhandsontable(values$df)%>%
hot_col("Parameter", readOnly = TRUE)%>%
hot_validate_numeric(col='Min', min = 1, max = 50,allowInvalid = FALSE)%>%
hot_validate_numeric(col='Max', min = 1, max = 50,allowInvalid = FALSE)
})
}
shinyApp(ui, server)
}
你有沒有考慮過在服務器端做這些細粒度的驗證?你可以進入服務器,不管輸入什麼,分析它,然後決定是否可以。客戶端適用於一般數據驗證(即範圍; num vs char等)。服務器案例似乎是更適合你所描述的那些挑戰的案例。 – Enzo
嗨恩佐,我用rhandsontable作爲一個「窗體」與初始值,用戶可以在任何時候修改。我知道我可以使用其他小部件來輸入數據,例如textInput,但是當你有很多參數,並且這些參數是「實時」生成的,我認爲這個選項可以用於這種表格,以簡單的方式輸入值,但是在rhandsontable中,只能通過列控制格式(例如列最小 - 最大值),但我不知道如何包含條件來關聯兩列。 – Uli
如果輸入最小20,最大10顯然是錯誤。所以,通過使用一些JavaScript或一些函數,我需要驗證這些值,然後繼續或顯示錯誤消息。總是在服務器端思考。我已經看到,當小於或大於固定值等時,可以使用渲染器函數來更改單元格的顏色,但我不知道如何將此行爲擴展到兩列。這對你有意義嗎? – Uli