Die Zeilen in einer Tabelle können sich dynamisch ändern, aber vorhandene Zeilenauswahlen durch einen Benutzer sollten beibehalten werden. Ausgewählte Zeilen werden nach ihrem Zeilenindex gespeichert. Wenn also ein neues datatable()
gerendert wird, wie behalten Sie die ausgewählten Zeilen bei?Wie Sie eine DT-Datatable-Zeilenauswahl in einer R Shiny-App fixieren
Antwort
Die Lösung besteht aus zwei Teilen. Zuerst kann der selection
Parameter in datatable()
eine Liste des Formulars list(mode='multiple', selected=c(1,3))
nehmen Der zweite Teil ist zu bestimmen, welche ausgewählte Zeilen in der neuen Tabelle bleiben. Eine Lösung für den zweiten Teil besteht darin, eine Kopie der Datentabelle als Sitzungsvariable zu speichern. Wenn eine neue Datentabelle generiert wird, wird die alte Tabelle mit der neuen verglichen. Ein neuer Satz ausgewählter Zeilenindizes wird basierend auf den gemeinsamen Zeilen in der alten und der neuen Tabelle berechnet. Die Zeilenindizes in der neuen Tabelle werden unter Verwendung eines which(newkeys %in% oldkeys)
Idioms gefunden.
Hier ist ein Beispiel:
library(shiny)
ui <- fluidPage(
checkboxInput('yellow.only', 'Yellow Only'),
uiOutput('fruit.selection'),
DT::dataTableOutput("dt.fruit.selection")
)
server <- function(input, output) {
fruit.options <- reactive({
all.fruits <- c(grape='Grape', banana='Banana', papaya='Papaya', raspberry='Raspberry')
yellow.fruits <- c(FALSE, TRUE, TRUE, FALSE)
all.fruits[yellow.fruits | !input$yellow.only]
})
fruit.options.df <- reactive({
data.frame(fruits=fruit.options(), some.other.col=nchar(fruit.options()))
})
output$fruit.selection <- renderUI({ selectInput('fruit', 'Fruit', choices=fruit.options(), selected=input$fruit, multiple=TRUE, selectize=FALSE, size=length(fruit.options())) })
output$dt.fruit.selection <- DT::renderDataTable({
if (!exists('fruit.options.cache') || identical(fruit.options.cache, fruit.options.df())) {
rows.selected <- isolate(input$dt.fruit.selection_rows_selected)
} else {
rows.selected <- which(fruit.options.df()$fruit %in% fruit.options.cache$fruits[isolate(input$dt.fruit.selection_rows_selected)])
}
fruit.options.cache <<- fruit.options.df()
DT::datatable(fruit.options.cache, rownames=FALSE, selection=list(mode="multiple", selected=rows.selected))
})
}
# Run the application
shinyApp(ui = ui, server = server)
Dies auch aus RStudio mit shiny::runGist("https://gist.github.com/dkulp2/7ebb1c936d08f3434127e58d7798af28")
ausgeführt werden kann
- 1. Shiny R, Plot, ShinyApp
- 2. Kann Fortran.exe in einer ShinyApp ausgeführt werden?
- 3. shinyApp Befehl in glänzendem Paket?
- 4. aws.s3 Paketprobleme bei der Bereitstellung einer shinyapp
- 5. Fixieren einer Spaltenposition in angularjs
- 6. Wie bekomme ich iterative Ausgabe von einer "for" -Schleife in R shinyapp?
- 7. Wie zu vermeiden, shinyapp reloading
- 8. Wie foreach loop fixieren
- 9. Probleme mit einer Navigationsleiste, wie kann ich sie nicht fixieren?
- 10. R shinyapp Auswählen eines vorab gespeicherten Datensatzes über das Kontrollkästchen
- 11. So öffnen Sie .XLS-Dateien mit shinyApp
- 12. ShinyApp Google Login
- 13. Interaktive Dateieingabe und reaktives Lesen in shinyapp
- 14. Fixieren der Datumsachse einer Zeitreihe in VBA
- 15. ggplot2 R, Viele Werte in der Achse (Line-Plot) fixieren
- 16. Wordpress: fixieren Sie die Fußzeile
- 17. Hintergrundfarbe fixieren
- 18. Wie fixieren Sie Zeilennummern in der Go-Testausgabe?
- 19. Git Konflikte beim Fixieren einer einzelnen Zeile
- 20. R/ShinyApp nicht plot_ly in Browser zeigt aber nur zeigen Graph in Anzeigebereich
- 21. HTML: Iframe-Höhe fixieren
- 22. Dichteplot mit Datenpunkten in ggplot/Shinyapp
- 23. fixieren Sie die Ausrichtung des Bildes + iphone
- 24. ShinyApp: Verbindung zurückgesetzt von Peer
- 25. Einfrieren/Fixieren der oberen Kopfzeile einer Tabelle
- 26. Fixieren von IEnumerables in C#
- 27. Fehler in shinyapp kann nicht gefunden werden
- 28. Erstellen einer ShinyApp zum Zeichnen von Streudiagrammen mit ggplot
- 29. Erstellen Sie eine Formel in einer data.table-Umgebung in R
- 30. Datensatz-Ausgabe in Shinyapp in R mit DT-Paket zeigt nicht die vollständigen Daten