簡體   English   中英

Shiny 中的條件默認值 rhandsontable

[英]Conditional Default value rhandsontable in Shiny

問題:在下面的 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)

期望的行為可以通過使用被achived 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)

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM