Ich habe eine Anwendung für die Echtzeit-Datenvisualisierung mit R shiny
Bibliothek erstellt. Ich mache periodische Daten neu laden von Datei mit reactivePoll
Funktion. Was ich nicht mag ist, dass wenn die Daten neu geladen werden, die ganze Anwendung aktualisiert wird.Aktualisieren Sie Daten in glänzenden Anwendung, ohne die gesamte Anwendung zu aktualisieren
So zum Beispiel, wenn ich DT
Tabellenausgabe mit Auswahl und ich verwende diese Auswahl input$table_rows_selected
es NULL
zurücksetzt, wenn Daten neu geladen, die überhaupt nicht benutzerfreundlich ist.
Ist es insgesamt möglich, die Datenausgabe zu ändern, ohne den Benutzer zu unterbrechen?
UPDATE.
Kann dies mit jedem anderen Paket für die Anzeige von Tabellen erreicht werden - googleVis
oder andere?
Arbeitsbeispiel.
library(shiny)
library(DT)
runApp(shinyApp(
ui = fluidPage(dataTableOutput('table')),
server = function(input, output, session) {
pollData <- reactivePoll(4000, session,
checkFunc = function(){ Sys.time() },
valueFunc = function(){ data.frame(id = sample(letters[1:3]), a = runif(3), b = runif(3), c = runif(3)) })
output$table <- renderDataTable({pollData()})
proxy <- dataTableProxy('table')
observeEvent(pollData(), {
selectRows(proxy, input$table_rows_selected)
})}
))
Ich habe dieses Beispiel aus @NicE Antwort entnommen und ID-Spalte. Der Punkt ist, dass @NicE-Antwort OK ist, wenn eine bestimmte Zeile ausgewählt werden muss, wenn diese Zeile durch die Zeilennummer identifiziert wird.
Angenommen, ich brauche eine Zeile, die ausgewählt wird, wenn diese Zeile durch einen ID-Wert identifiziert wird. Das heißt, wenn ich eine Zeile mit id gleich b auswähle, möchte ich beim nächsten Neuladen von Daten die Zeile mit demselben ID-Wert auswählen.
Dies ist sehr häufig mit 'DT' Paket. Sie müssen einige benutzerdefinierte 'JS' erstellen, um das zu erledigen. Alternativ können Sie xtable verwenden, da das "Blinken" nicht wahrnehmbar ist. Schau mal hier http://stackoverflow.com/questions/26976860/how-to-change-datatable-row-background-colour-based-on-the-condition-in-a-column –
Ist das Daten neu laden nur hinzufügen neue Zeilen oder Aktualisierung bereits bestehender Werte? Sie können 'dataTableProxy' verwenden, um die Tabelle zu ändern, ohne sie erneut zu rendern. Wenn Sie möchten, dass "table_rows_selected" nur in Ihrer neuen Tabelle verbleibt, können Sie sie auch nach dem Aktualisieren der Daten programmatisch setzen. – NicE
Es kann eine neue Tabelle mit wenigen Zeilen sein, die geändert wird, aber die meiste Zeit wird es Wert aktualisieren. @NicE kannst du erklären was meinst du mit "programmatisch setzen" teil? –