Насколько я понимаю, ваша цель состоит в том, чтобы сделать некоторые вычисления в зависимости от значений какого-либо другого столбца. Поэтому, если, например, установлен флажок в третьем столбце, вы можете вычислить разницу между элементами столбцов 1 и 2.
Если бы у вас был только фрейм данных, это было бы легко, не так ли? Ну, это возможно, используя реактивные значения. Основная идея заключается в том, что вы можете сохранить rhandsontable во фрейме данных в бэкэнде, изменить фрейм данных, а затем снова отобразить измененный фрейм данных в handsontable.
Надеюсь, это поможет:
Более подробный пример реактивных значений вы можете увидеть
это: http://stla.github.io/stlapblog/posts/shiny_editTable.html
и это: https://www.youtube.com/watch?v=BzE1JmC0F6Q&list=PL6wLL_RojB5wXR3NR3K38sIvexZ_45alY&index=3
library(rhandsontable)
library(shiny)
ui <- fluidPage(
mainPanel(
rHandsontableOutput("hot")
)
)
server = function(input, output, session){
df<- data.frame(c1=c(5,10,15), c2=c(3,6,9) , diff=c(0,0,0), select= as.logical( c(FALSE,FALSE,FALSE)))
values <- reactiveValues(data = df)
observe({
if(!is.null(input$hot)){
values$data <- as.data.frame(hot_to_r(input$hot))
isolate(values$data[,'diff'] <- ifelse(values$data[,'select'], values$data[,'c1']-values$data[,'c2'] ,0))
print(values$data)
output$hot <- renderRHandsontable({
rhandsontable(values$data)
})
}
})
output$hot <- renderRHandsontable({
rhandsontable(values$data)
})
}
shinyApp(ui, server)