对自己有反应的闪亮的横式

时间:2018-11-06 17:39:23

标签: r shiny 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)

因此,如果我检查“选择”列,则“差异”列应在c1和c2列之间产生差异

1 个答案:

答案 0 :(得分:0)

据我了解,您的目标是根据其他某些列的值进行一些计算。因此,例如,如果选中了第三列的框,则可能要计算第一列和第二列的元素之差。

如果只有一个数据框,那很容易,不是吗?嗯,这可以使用电抗值来实现。主要思想是,您可以将rhandsontable存储在后端的数据帧中,修改数据帧,然后再次将修改后的数据帧呈现回handontable中。

我希望这会有所帮助:

有关电抗值的更详细示例,请参见 这个: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)