gpt4 book ai didi

r - 更新 Shiny 数据表的行,同时保持位置

转载 作者:行者123 更新时间:2023-12-03 05:05:56 25 4
gpt4 key购买 nike

我正在创建一个 Shiny 的应用程序,它在屏幕顶部显示 data.frame 信息,在底部显示特定的变量统计信息。用户可以通过与 DT::datatable 对象交互来导航 data.frame 列。

当用户单击变量时,会显示可以编辑的详细信息。我希望更新此信息并反射(reflect)在数据表中。我的问题是,当我更新表格时,它会从一开始就被渲染和显示。 如何在编辑后保留数据表的页面和行选择?

这是一个最小的工作示例,显示 DT::datatable 中的 mtcars 数据集。我有一些更新字段的控件。请注意,数据表重新渲染回第一页。

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 信息:

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)

最佳答案

这可以从 R 内部完成,而无需通过 JS 或类似的东西进入数据表的结构。

我们利用从DT包中获取的各种表状态信息来呈现新更新的datatable,就像之前的一样。我们使用的所有东西都在 this DT documentation 中描述。 。

第一项:选择。您可以通过在数据表的 selection 参数内添加 selected = ... 来预选择行。这可以与变量 input$table_rows_selected 结合使用,以保存先前选择的行并在重新渲染时预先选择该行。

第二项:页面。 datatable 包有一个选项displayStart,它指定渲染表格时应首先显示哪一行。 Documentation here.因此,如果每页有 5 行,displayStart = 9 将在第 3 页开始显示。(JavaScript 数组从 0 开始,因此始终减去 1。)这可以与 input 结合使用$table_rows_current 这是当前可见行号的向量。如果我们存储第一个条目(负 1),我们就知道从哪里开始显示。

完整代码示例如下:

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)
previousSelection <- NULL
previousPage <- NULL

observeEvent(input$submit, {
previousSelection <<- input$table_rows_selected
previousPage <<- input$table_rows_current[1] - 1

v$mtcars[input$field] <- input$value
})

output$table <- DT::renderDataTable({
DT::datatable(
v$mtcars,
selection = list(mode = "single", target = "row", selected = previousSelection),
options = list(pageLength = 5, displayStart = previousPage))
})
}
))

关于r - 更新 Shiny 数据表的行,同时保持位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com