我正在创建一个Shiny应用程序,它在屏幕顶部显示data.frame信息,并在底部显示特定变量的统计信息。用户可以通过与DT :: datatable
对象交互来导航data.frame列。
当用户单击变量时,会呈现详细信息,可以进行编辑。我希望更新这些信息并在datatable中反映出来。我的问题是,当我更新表格时,它从最开始重新渲染和显示。 如何在编辑后保留datatable的页码和行选择?
这是一个简单的工作示例,显示了mtcars数据集中的DT :: datatable
。我有一些控件可以更新字段。请注意,datatable被重新呈现回到第一页。
library(shiny)
runApp(shinyApp(
ui = fluidPage(
title = "minimal-working-example",
fluidRow(
column(3, inputPanel(
selectInput("field", "Field", choices = names(mtcars)),
numericInput("value", "Value", 0),
actionButton("submit", "Submit")
)),
column(9,
DT::dataTableOutput("table")
)
)
),
server = function(input, output) {
v <- reactiveValues(mtcars=mtcars)
observeEvent(input$submit, {
v$mtcars[input$field] <- input$value
})
output$table <- DT::renderDataTable({
DT::datatable(
v$mtcars,
selection = "single",
options = list(pageLength = 5))
})
}
))
会话信息:
Session info --------------------------
setting value
version R version 3.3.0 (2016-05-03)
system x86_64, mingw32
ui RStudio (0.99.902)
language (EN)
collate English_United States.1252
tz America/Chicago
date 2016-07-11
Packages -------------------------------
package * version date source
DT 0.1.45 2016-02-09 Github (rstudio/DT@a63e9ac)
shiny * 0.13.0.9000 2016-02-08 Github (rstudio/shiny@e871934)
Shiny.onInputChange
来完成。然后当您呈现表格时,回调以在之前的页码处打开它。我会在有机会时写出完整的答案。 - Carl