首页 > 解决方案 > 根据可编辑单元格用户输入更新闪亮的 DT

问题描述

一个小例子闪亮的应用程序:

library(shiny)
library(tidyverse)
library(DT)

ui <- fluidPage(

    # Application title
    titlePanel("blah"),

    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           DT::DTOutput('ex_table')
        )
    )
)

server <- function(input, output) {

    output$ex_table <- DT::renderDataTable(mtcars %>% select(cyl) %>% mutate(blah = cyl + 2), 
                                           selection = 'none', editable = TRUE)
}

# Run the application 
shinyApp(ui = ui, server = server)

如果你运行它,它看起来像: 在此处输入图像描述

您可以编辑单元格,因为我editable = TRUErenderDataTable().

我提供数据表的表有以下行:

mtcars %>% select(cyl) %>% mutate(blah = cyl + 2)

所以功能“等等”应该始终是 cyl + 2 中的任何内容。在屏幕截图中,我添加了 10,000,因此所需的输出将是数据表在按 Enter 后更新以显示 10,002。

这可能吗?我怎样才能做到这一点?

标签: rshinydt

解决方案


您可以按照这些示例进行操作。
尝试 :

library(shiny)
library(tidyverse)
library(DT)

ui <- fluidPage(
  
  # Application title
  titlePanel("blah"),
  
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),
    
    # Show a plot of the generated distribution
    mainPanel(
      DT::DTOutput('modtable'),
    )
  )
)

server <- function(input, output,session) {
  data <- mtcars %>% select(cyl) %>% mutate(blah = cyl + 2)
  
  output$modtable <- DT::renderDT(data, selection = 'none', editable = TRUE)
  
  proxy = dataTableProxy('modtable')

  observeEvent(input$modtable_cell_edit, {
    info = input$modtable_cell_edit
    str(info)
    i = info$row
    j = info$col
    v = info$value
    data <<- editData(data, info)
    if(j==1){data[i,j+1]<<-as.numeric(data[i,j])+2}
    replaceData(proxy, data, resetPaging = FALSE) 
  })

}

# Run the application 
shinyApp(ui = ui, server = server)

在此处输入图像描述


推荐阅读