Ich bin ziemlich neu in der Anwendung, also vergib mir, wenn es offensichtlich ist. Ich habe eine Datentabelle, die basierend auf einem Kartencenter neu berechnet werden kann. Es funktioniert gut. Ich möchte jedoch bestimmte Einstellungen lesen und behalten (bewahren): nämlich Seitenlänge und Spaltensichtbarkeit. Wenn ein Benutzer im Moment 20 Einträge pro Seite ändert und die Karte verschiebt, rendert er sie mit der Standard-Seitenlänge und der Spalte vis (mit colvis in buttons). Ich dachte, ich könnte es in einer Variablen speichern und es beim erneuten Rendern der Tabelle abrufen, aber nicht sicher, wie man aus den Optionen liest. ist es in R Studio für Shiny gebaut Irgendwelche Ideen?Shiny für R DT: wie man Seitenlänge und Spaltensichtbarkeit liest/behält
EDIT: Ich habe die Daten über die Seitenlänge und Spaltensichtbarkeit mit der Option stateSave = TRUE und dann lesen lesen Eingang $ Btable_state $ length (und ich kann auch lesen, welche Spalten sichtbar sind), aber jetzt ist mein Problem: wann Wenn eine Tabelle neu gerendert wird, wird sie zuerst auf den Wert NULL gesetzt und überschreibt, was in der Eingabe $ Btable_state gespeichert ist. Wie kann ich es nur erfassen und beeinflussen, wenn es durch Änderungen an den Filtern geändert wird und nicht durch das erneute Rendern der Tabelle selbst?
EDIT2: Da meine Anwendung eine Verbindung zu meinen Google-Blättern benötigt, was nicht replizierbar wäre, kann sie am folgenden Beispiel von Github (vnijs/dt_state) ausprobiert werden. Wie die Nicht-Standardseitenlänge (zB 50) zu erhalten, wenn Spalten Neuordnen (aber die Aktion der selectizeInput ohne Verknüpfung, nur den letzten richtigen Zustand zu halten)
#ui.r
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("ui_view_vars"),
tags$a(id = "refresh", href = "#", class = "action-button",
list(icon("refresh"), "Clear state"),
onclick = "window.location.reload();")
),
mainPanel(
tabPanel("View", DT::dataTableOutput("dataviewer")
)
)
)
))
#server.r
library(shiny)
library(DT)
dat <- iris
## store state in global environment for now
if (!exists("r_state")) r_state <- list()
## Only used from a 'clean' start
r_state$dataviewer_search_columns <- list("","2.5...4","","","[\"setosa\"]")
shinyServer(function(input, output, session) {
output$ui_view_vars <- renderUI({
vars <- colnames(dat)
## using selectizeInput with drag_drop and DT
selectizeInput("view_vars", "Select variables to show:", choices = vars,
selected = vars, multiple = TRUE,
options = list(plugins = list('remove_button', 'drag_drop')))
})
## make nested list
mknl <- function(x) list(search = x)
observeEvent(input$dataviewer_search_columns, {
r_state$dataviewer_search_columns <<- input$dataviewer_search_columns
})
observeEvent(input$dataviewer_state, {
r_state$dataviewer_state <<- input$dataviewer_state
})
observeEvent(input$refresh, {
r_state <<- list()
})
output$dataviewer <- DT::renderDataTable({
req(input$view_vars)
search <- r_state$dataviewer_state$search$search
if (is.null(search)) search <- ""
DT::datatable(iris[,input$view_vars],
filter = list(position = "top", clear = TRUE),
rownames = FALSE,
selection = "none",
options = list(
stateSave = TRUE,
searchCols = lapply(r_state$dataviewer_search_columns, mknl),
search = list(search = search, regex = TRUE),
order = {if (is.null(r_state$dataviewer_state$order)) list()
else r_state$dataviewer_state$order},
processing = FALSE
),
callback = DT::JS("$(window).unload(function() { table.state.clear(); })")
)
})
output$tbl_col_search <- renderPrint(input$dataviewer_search_columns)
})
Wie viele Tabellen haben Sie 1? –
zwei Tabellen, Entschuldigung sollte erwähnt haben, sie sind nicht in Bezug auf den Inhalt verwandt und ich möchte nur auf einem behalten (aber nichts dagegen, wenn es auf beiden behält) – Slav
Wollen Sie die gleiche Anzahl pro Seite für beide? –