条件默认值可在Shiny中

问题描述

问题:在下面的“闪亮”应用中,我想更改并通过rhandsontable将新行插入到以下数据中:

data.frame(car = c("Opel","Nissan","Opel","VW"),location = c("Ruesselsheim","Frankreich","Ruesselsheim","Wolfsburg"))
  1. 例如,如果我将car == Opel更改为car == VW,则位置将从吕塞尔斯海姆更改为沃尔夫斯堡。
  2. 如果我插入新行,例如用car == Opel填充它,那么在输入汽车信息后,位置应直接位于吕塞尔斯海姆

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

尝试: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","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)

解决方法

可以通过使用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","Opel","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)

result