私は画面の上部にdata.frame情報を、下部に特定の変数の統計情報を表示するShinyアプリケーションを作成しています。ユーザーはDT::datatable
オブジェクトと対話することによってdata.frame列をナビゲートできます。位置を維持しながらShiny 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/[email protected])
shiny * 0.13.0.9000 2016-02-08 Github (rstudio/[email protected])
これは難しいが、なんとかです。本質的に何が起こる必要があるのは、テーブルの現在のページが反応的に保存される必要があることです。これはjavascriptの 'Shiny.onInputChange'で行うことができます。その後、コールバックするテーブルをレンダリングして、ページ番号で開いてください。私はチャンスを得るときに完全な答えを書くでしょう。 – Carl