R Datatable-编辑值、影响其他列并保留分页

R Datatable-编辑值、影响其他列并保留分页,r,shiny,datatable,R,Shiny,Datatable,我试图允许用户编辑DT值,并基于这些编辑,在其他列上运行计算。这在第一页上非常有效,但在后续页面上编辑值会将页面重置回第一页——从用户体验的角度来看,这是一场噩梦 示例应用程序演示问题。 尝试编辑第2页上的vs值以查看发生了什么 library(shiny) library(DT) library(dplyr) shinyApp( ui = fluidPage( DTOutput('table') ), server = function(input, o

我试图允许用户编辑DT值,并基于这些编辑,在其他列上运行计算。这在第一页上非常有效,但在后续页面上编辑值会将页面重置回第一页——从用户体验的角度来看,这是一场噩梦

示例应用程序演示问题。

尝试编辑第2页上的
vs
值以查看发生了什么

library(shiny)
library(DT)
library(dplyr)
shinyApp(
    ui = fluidPage(
        DTOutput('table')
    ),
    server = function(input, output, session) {
        x = reactiveValues(df = mtcars %>% select(vs,am))
        
        output$table = renderDT(x$df, editable = TRUE)
        
        proxy = dataTableProxy('table')
        
        observeEvent(input$table_cell_edit, {
            info = input$table_cell_edit
            str(info)
            i = info$row
            j = info$col
            v = info$value
            
            x$df[i, j] <- isolate(DT::coerceValue(v, x$df[i, j]))
            x$df[i,which(colnames(x$df)=='am')] <- x$df[[i, j]]*2
            replaceData(proxy, x$df, resetPaging = FALSE)  # important I have tried with and without this line no impact on page resetting
        })
    }
)
library(shiny)
library(DT)
library(dplyr)
shinyApp(
    ui = fluidPage(
        DTOutput('table')
    ),
    server = function(input, output, session) {
        
        df <- mtcars %>% select(vs,am)
        
        output$table = renderDT(df, editable = TRUE)
        
        proxy = dataTableProxy('table')
        
        observeEvent(input$table_cell_edit, {
            info = input$table_cell_edit
            str(info)
            i = info$row
            j = info$col
            v = info$value
            
            df[i, j] <- isolate(DT::coerceValue(v, df[i, j]))
            df[i,which(colnames(df)=='am')] <- df[[i, j]]*2
            replaceData(proxy, df, resetPaging = FALSE)
        })
    }
)
任何指点都将不胜感激

解决了

多亏了这篇文章。。。

解决方案是在renderDT()函数中隔离被动df,如下所示

library(shiny)
library(DT)
library(dplyr)
shinyApp(
  ui = fluidPage(
    DTOutput('table')
  ),
  server = function(input, output, session) {
    x = reactiveValues(df = mtcars %>% select(vs,am))
    
    output$table = renderDT(isolate(x$df), editable = TRUE)
    
    proxy = dataTableProxy('table')
    
    observeEvent(input$table_cell_edit, {
      info = input$table_cell_edit
      str(info)
      i = info$row
      j = info$col
      v = info$value
      
      x$df[i, j] <- isolate(DT::coerceValue(v, x$df[i, j]))
      x$df[i,which(colnames(x$df)=='am')] <- x$df[[i, j]]*2
      replaceData(proxy, x$df, resetPaging = FALSE)  # important I have tried with and without this line no impact on page resetting
    })
  }
)
库(闪亮)
图书馆(DT)
图书馆(dplyr)
shinyApp(
ui=fluidPage(
DTOutput('表')
),
服务器=功能(输入、输出、会话){
x=反应值(df=mtcars%>%select(vs,am))
输出$table=renderDT(隔离(x$df),可编辑=TRUE)
proxy=dataTableProxy('表')
observeEvent(输入$table\u cell\u edit{
信息=输入$table\u cell\u edit
str(信息)
i=信息$行
j=信息$col
v=信息$value

x$df[i,j]由于某种原因,当我使用
replaceData
时,该表变为空,但如果我使用
reloadData
,它会工作。我查看了replaceData,文档中说它调用reloadData函数。