Вы можете достичь того, что вы хотите, соответственно отобразив Handsontables. Вы можете использовать наблюдающее событие, которое проверяет изменения в handsontable в зависимости от измененного столбца и устанавливает желаемые столбцы для чтения только. Для этого я предлагаю использовать реактивные значения и таким образом вы можете получить столбец, который был изменен
просто by column_index = input $ hot $ changes $ changes [[1]] [[2]].
Надеюсь, это поможет.
library(rhandsontable)
library(shiny)
ui <- fluidPage(
mainPanel(
rHandsontableOutput("hot")
)
)
server = function(input, output, session){
df <- data.frame(a = rnorm(10), b = rnorm(10))
values <- reactiveValues(data = df)
observeEvent(
input$hot$changes$changes, # observe any changes in the cells of the rhandsontable
{
column_index =input$hot$changes$changes[[1]][[2]] # get the index of the column that was changed
values$data <- hot_to_r(input$hot)
if(column_index == 1){
output$hot <- renderRHandsontable({
rhandsontable(values$data) %>%
hot_col('a', readOnly = T)
})
}
else{
output$hot <- renderRHandsontable({
rhandsontable(values$data) %>%
hot_col('b', readOnly = T)
})
}
}
)
output$hot <- renderRHandsontable({
rhandsontable(values$data)
})
}
shinyApp(ui, server)