【问题标题】:Conditional Default value rhandsontable in ShinyShiny中的条件默认值rhandsontable
【发布时间】:2020-12-15 01:52:54
【问题描述】:

问题:在下面的 Shiny 应用程序中,我想通过 rhandsontable 更改并插入新行到以下数据:

data.frame(car = c("Opel", "Nissan", "Opel", "VW"),
                 location = c("Ruesselsheim", "Frankreich", "Ruesselsheim", "Wolfsburg"))
  1. 如果我将 car == Opel 更改为 car == VW,则位置将从 Ruesselsheim 更改为 Wolfsburg。
  2. 如果我插入一个新行并使用 car == Opel 填充它,则在提供汽车输入后,位置应直接为 Ruesselsheim

问题:如何有条件地更改单元格值并定义有条件的默认值?

尝试: hot_col 有一个默认参数,但它只接受字符串而不接受条件。此外,通过观察者跟踪变化似乎并不是最好的方法。

关于如何解决这个问题的任何想法?非常感谢!

library(shiny)
library(rhandsontable)

ui = shinyUI(fluidPage(
  
  titlePanel("Handsontable"),
  
  sidebarLayout(
    sidebarPanel(
      rHandsontableOutput("hot")
    ),
    mainPanel(
      verbatimTextOutput("debug")
    )
  )
))

server = function(input, output) {

  
  data <- reactive({
      data.frame(car = c("Opel", "Nissan", "Opel", "VW"),
                 location = c("Ruesselsheim", "Frankreich", "Ruesselsheim", "Wolfsburg"))
    })
  
  output$hot <- renderRHandsontable({
    DF <- data()
    rhandsontable(DF, useTypes = FALSE, selectCallback = TRUE)
  })
  
  ### DEBUG
  output$debug <- renderPrint({
    req(input$hot)
  
    input$hot$changes
  })  
}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: javascript r shiny callback rhandsontable


    【解决方案1】:

    可以通过使用reactiveVal 和查找表将当前选择与以下内容合并来实现所需的行为:

    library(shiny)
    library(rhandsontable)
    
    ui = shinyUI(fluidPage(
      
      titlePanel("Handsontable"),
      
      sidebarLayout(
        sidebarPanel(
          rHandsontableOutput("hot")
        ),
        mainPanel(
          verbatimTextOutput("debug")
        )
      )
    ))
    
    server = function(input, output) {
      
      LUT_DF <- data.frame(car = c("Opel", "Nissan", "VW"),
                       location = c("Ruesselsheim", "Frankreich", "Wolfsburg"))
      
      data <- reactiveVal(data.frame(car = c("Opel", "Nissan", "Opel", "VW"),
                                     location = c("Ruesselsheim", "Frankreich", "Ruesselsheim", "Wolfsburg")))
      
      output$hot <- renderRHandsontable({
        rhandsontable(data(), useTypes = FALSE, selectCallback = TRUE)
      })
      
      observeEvent(input$hot, {
        data(merge(LUT_DF, hot_to_r(input$hot)[1], by = "car"))
        }, ignoreInit = TRUE)
    
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2017-12-02
      • 2018-04-28
      • 2020-01-01
      相关资源
      最近更新 更多