闪亮的 rhandsontable 对自身有反应

Fah*_*bar 2 r shiny rhandsontable

我正在尝试创建一个闪亮的应用程序,其中有一个rhandsontable。如果选择/检查另一列中的相应值,我希望 rhandsontable 能够更新其其中一列中的值。到目前为止,我已经能够使用反应/观察事件来更改两个对象之间的输出值,但我无法理解它,即,如何使 rhandsontable 的一列对同一个表中的另一列做出反应?

这是我正在尝试构建的一个简单示例:

library(shiny)
library(rhandsontable)

ui <- fluidPage(
  rHandsontableOutput('table')

)

server <- function(input,output,session)({

  data <- data.frame(c1=c(5,10,15), c2=c(3,6,9) , diff=c(0,0,0), select= as.logical( c(FALSE,FALSE,FALSE)))

  output$table <- renderRHandsontable({
    rhandsontable(data)
  })


}) 

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

因此,如果我检查“Select”列,“diff”列应该产生列 c1 和 c2 之间的差异

小智 6

据我了解,您的目标是根据其他列的值进行一些计算。因此,例如,如果选中第三列的框,您可能需要计算第 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)
Run Code Online (Sandbox Code Playgroud)