请帮帮忙.我有一个关于这个帖子的后续问题. How to edit and save changes made on Shiny dataTable using DT package

如果DataTable数据集是一个react 性数据帧,情况会怎样?那我怎么才能保存编辑呢?

为了进一步说明,让我们假设我要求用户输入性别 Select (男性或女性),然后我根据该react 性输入创建输出tab1数据表,并且仍然希望能够编辑和保存对该数据表的更改.我怎么能做到呢?请参见下面的示例代码.

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


Admit <- c("Admitted","Rejected","Admitted", "Rejected", "Admitted", "Rejected", "Admitted",
         "Rejected","Admitted", "Rejected", "Admitted","Rejected","Admitted", "Rejected","Admitted","Rejected", "Admitted", "Rejected",
         "Admitted","Rejected", "Admitted" ,"Rejected","Admitted", "Rejected")
Gender <- c("Male","Male","Female","Female", "Male",   "Male",   "Female", "Female", "Male","Male","Female","Female",
          "Male","Male","Female","Female","Male",   "Male",   "Female", "Female","Male","Male","Female","Female")
Dept <- c( "A","A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C", "D", "D", "D", "D", "E", "E", "E", "E", "F", "F", "F", "F")
Freq <- c("512", "313",  "89",  "19", "353", "207",  "17",   "8", "120", "205", "202", "391", "138", "279", "131", "244",  "53", "138",
        "94", "299",  "22", "351",  "24", "317")

banking.df<-data.frame(Admit,Gender,Dept, Freq,stringsAsFactors = FALSE)



ui <- fluidPage(
  
  selectInput("gender", label = "Select Gender", c("Male", "Female"), selected = "Male"), br(),
  
  DTOutput("tab1"), br(), 
  
  actionButton("saveBtn", "Save changes"), br(),
  
  DTOutput("tab2")
)


server=function(input, output) {
  
  dat1 <- reactive({ banking.df %>% filter(Gender %in% input$gender) })
  
  output$tab1<-renderDT(datatable(dat1(), selection='none', editable = 'cell') )
  
  observeEvent(input$tab1_cell_edit, { 
    str(input$tab1_cell_edit)
    row  <- input$tab1_cell_edit$row
    col <- input$tab1_cell_edit$col
    value <- input$tab1_cell_edit$value
    dat1()[row,col] <<- value
  })
  
  save_fun<-eventReactive(input$saveBtn,{
    dat1()
  })
  
  output$tab2 <- renderDT({
    datatable(dat1(), caption="After Saved Edits")})
  
}

shinyApp(ui = ui, server = server)

将更改保存回react 性数据帧时,我收到此错误

警告:&lt;&lt;中出错-:赋值左侧无效(空)

推荐答案

我在您的代码中发现了几个错误并对其进行了修改:

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

Admit <- c("Admitted","Rejected","Admitted", "Rejected", "Admitted", "Rejected", "Admitted",
           "Rejected","Admitted", "Rejected", "Admitted","Rejected","Admitted", "Rejected","Admitted","Rejected", "Admitted", "Rejected",
           "Admitted","Rejected", "Admitted" ,"Rejected","Admitted", "Rejected")
Gender <- c("Male","Male","Female","Female", "Male",   "Male",   "Female", "Female", "Male","Male","Female","Female",
            "Male","Male","Female","Female","Male",   "Male",   "Female", "Female","Male","Male","Female","Female")
Dept <- c( "A","A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "C", "D", "D", "D", "D", "E", "E", "E", "E", "F", "F", "F", "F")
Freq <- c("512", "313",  "89",  "19", "353", "207",  "17",   "8", "120", "205", "202", "391", "138", "279", "131", "244",  "53", "138",
          "94", "299",  "22", "351",  "24", "317")

banking.df <- data.frame(Admit, Gender, Dept, Freq, stringsAsFactors = FALSE)

ui <- fluidPage(
    selectInput("gender", label = "Select Gender", c("none", "Male", "Female"), selected = "none"), br(),
    DTOutput("tab1"), br(),
    actionButton("saveBtn", "Save changes"), br(),
    DTOutput("tab2")
)

server <- function(input, output) {
    dat1 <- reactiveVal()

    observe({
        dat1(banking.df %>% filter(Gender %in% input$gender))
    })

    output$tab1 <- renderDT(datatable(dat1(), selection = 'none', editable = 'cell'))

    observeEvent(input$tab1_cell_edit, {
        info <- input$tab1_cell_edit
        str(info)
        modified_data <- dat1()
        modified_data[info$row, info$col] <- info$value
        dat1(modified_data)
    })

    save_fun <- eventReactive(input$saveBtn, {
        dat1()
    })

    output$tab2 <- renderDT({
        datatable(save_fun(), caption = "After Saved Edits")
    })
}

shinyApp(ui = ui, server = server)

在这款应用上的结果是:

enter image description here

enter image description here

R相关问答推荐

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

derrr summarise每个组返回多行?

如何使用R对每组变量进行随机化?

用值序列对行进行子集化,并标识序列开始的列

在R中为马赛克图中的每个字段着色

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

R:从geom_ol()中删除轮廓并导出为pdf

从数据创建数字的命名列表.R中的框

在点图上绘制置信度或预测区间ggplot2

将摘要图添加到facet_WRAP gglot的末尾

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

在ggploy中创建GeV分布时出错

如何使用包metaviz更改标签的小数位数?

将美学添加到ggploy中的文本标签

重写时间间隔模糊连接以减少内存消耗

如何创建一个由一个连续变量和一个因素变量组成的复杂方框图?

如何创建直方图与对齐的每月箱?

使用nls()函数的非线性模型的半正态图

如何在GGPlot中控制多个图例和线型

如何使用包含要子集的值的列表或数据框来子集多个列?