Я создал приложение, использующее реактивные значения для заполнения таблицы данных, аналогичной ответу здесь R Блестящий DT - редактировать значения в таблице с реактивными
То, что я не могу понять, это послередактируя таблицу, она сбрасывается на первую страницу. Этого не происходит, когда таблица данных не создается из таблицы реактивных значений.
library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
DTOutput('x1'),
verbatimTextOutput("print")
),
server = function(input, output, session) {
x = reactiveValues(df = NULL)
observe({
df <- iris
df$Date = Sys.time() + seq_len(nrow(df))
x$df <- df
})
output$x1 = renderDT(x$df, selection = 'none', editable = TRUE)
proxy = dataTableProxy('x1')
observeEvent(input$x1_cell_edit, {
info = input$x1_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]))
replaceData(proxy, x(), resetPaging = FALSE) # important I have tried with and without this line no impact on page resetting
})
output$print <- renderPrint({
x$df
})
}
)
Я хотел бы поделиться с вами тем, что выяснил, как решить эту проблему, все еще немного не понимая, почему это так сложно, но еслиу кого-то еще есть такая же проблема.
x = reactiveValues(df = NULL)
x$df2 = NULL
#Tells which data to pull based on how the OSC list is populated
FundData <- observe({
if(input$SelectFunds == 'None Selected'){
x$df <- head(QDataAnalystSummary,0)
}else if(input$SelectFunds == 'Load OSC List'){
tmp_funds <- subset(QDataAnalystSummary,as.character(QDataAnalystSummary$OSC) %in% as.character(OSCData()$OSC))
tmp_funds <- subset(tmp_funds,tmp_funds$`Quarter End` == CurrentQtr)
tmp_funds_new <- NULL
for(i in 1:nrow(OSCData())){
tmp_fd <- subset(tmp_funds,tmp_funds$OSC == OSCData()$OSC[i])
tmp_funds_new <- rbind(tmp_funds_new,tmp_fd)
}
tmp_funds_new
x$df <- tmp_funds_new
x$df2 <- tmp_funds_new
}
else if(input$SelectFunds == 'Search By Analyst'){
tmp_funds5 <- subset(QDataAnalystSummary,QDataAnalystSummary$Analyst %in% input$Analyst)
tmp_funds5 <- subset(tmp_funds5,tmp_funds5$`Quarter End` == CurrentQtr)
x$df <- tmp_funds5
})
#Summary Table showing general fund info and current quarter stats for IC Meeting Funds
output$summary_ic <- DT::renderDT({
QDAW <- subset(QDataAnalystSummary,QDataAnalystSummary$OSC %in% OSCData()$OSC & QDataAnalystSummary$`Quarter End` ==CurrentQtr)
if(nrow(QDAW) >= 1){
QDAW$Notes <- ''
QDAW_new <- NULL
for(i in 1:nrow(OSCData())){
tmp_fd <- subset(QDAW,QDAW$OSC == OSCData()$OSC[i])
QDAW_new <- rbind(QDAW_new,tmp_fd)
}
QDAW <- QDAW_new
}
datatable(QDAW,
rownames = FALSE,caption = "Current Quarter Data",
filter = "top",extensions = c('Buttons','ColReorder'),editable = list(target = 'cell',disable = list(columns=c(0:9))),
options = list(initComplete = JS(
"function(settings, json) {",
"$(this.api().table().header()).css({'background-color':'rgb(85,114,138)','color': '#fff'});","}"),
autoWidth = TRUE,
columnDefs = list(list(width = '2%', targets = list(0,1,6,7,8,9)),
# list(width = '20%', targets = list()),
list(className = 'dt-center',targets = c(1,5,6,7,8,9)),
list(visible = FALSE, targets = c(0,5,8,9))
)
,resetPaging = FALSE,
bFilter = 1,bSortClasses = 1,
aLengthMenu = list(c(10,20,50, -1), list('10','20','50','All')),iDisplayLength = 10,
searchHighlight = TRUE,
dom = 'Blfrtip',buttons = c('colvis','excel','copy'),colReorder= TRUE,
scrollX = TRUE,
# scrollY = "1000px",
fixedHeader = TRUE,
paging=TRUE,server = TRUE))%>%
formatRound('Trailing Average', 2) %>%
formatStyle('Trailing Average',
color = 'white',
background = styleInterval(c(50,75),c('green','orange','red'))) %>%
formatCurrency('AUM')
})
proxy = dataTableProxy('summary_ic')
observeEvent(input$summary_ic_cell_edit, {
info = input$summary_ic_cell_edit
str(info)
i = info$row
j = info$col + 1 # column index offset by 1
v = info$value
x$df2[i, j] <<- isolate(DT::coerceValue(v, x$df2[i, j]))
replaceData(proxy, x$df2, resetPaging = FALSE, rownames = FALSE)
})