2014-01-28 3 views
6

Ich habe eine R shiny Webseite, wo ich derzeit gvisTable verwenden, um eine Auswahl von Spalten aus einem data.frame anzuzeigen. Die Zeilen werden vom Benutzer dynamisch mit sidebarPanel ausgewählt, aber im Moment sind die Spalten innerhalb des Aufrufs gvisTable fest codiert.R glänzend gvisTable mit Spalten von Benutzer in einer bestimmten Reihenfolge

Ich möchte dem Benutzer erlauben, die Spalten dynamisch aus einem Dropdown-Menü auszuwählen (siehe Snapshot eines ähnlichen Systems von einer nicht glänzenden Webseite). Das Schlüsselfeature, das ich möchte, ist es, das Umsortieren der Spalten zu ermöglichen.

enter image description here

Irgendwelche Ideen, wie diese sortierte Auswahl von Spalten in glänzend bestehen?

Ich habe nichts dagegen, etwas anderes anstelle von gvisTable zu verwenden, wenn es den Job erledigt.

EDIT: Danke für das Zeigen einer Lösung mit der sortierbaren Antwort. Es funktioniert sowohl für meine alten als auch für neue Versionen von shiny. Das scheint sich bei "Refresh" nicht an die Reihenfolge zu erinnern, die wirklich schön wäre.

Kann also die zuletzt gewählte Bestellung als Browser-Cookie oder ähnliches gespeichert werden? Der Server ist authentifiziert, und mir wurde gesagt, dass ich die variable Reihenfolge in eine Liste mit der Benutzer-ID als Schlüssel einfügen könnte. Ein Beispiel dafür wäre großartig.

Antwort

5

In Shiny müssten Sie mehrere selectInputs verwenden. Sie können jedoch ShinySky von ZJ installieren (https://github.com/AnalytixWare/ShinySky) und seine select2-Bindung verwenden, die das Sortieren ermöglicht. Alternativ können Sie die sortierbare Bindung unter https://github.com/mostly-harmless/sortable ändern.

Edit: Ich weiß nicht über Cookies. Ich benutze sortierbar in einem größeren app. Dort habe ich eine Aktionsschaltfläche, um die vom Benutzer gewählte Reihenfolge zu speichern. Siehe Daten> Transformieren> Spalten neu anordnen. In der App werden Daten in einem reactiveValue gespeichert. Zum Speichern der Datenreihenfolge verwende ich values[[input$datasets]] <- values[[input$datasets]][,input$tr_reorder_cols], wobei input$datasets der aktive Datensatz ist, input$tr_reorder_cols die vom Benutzer ausgewählte Variablenreihenfolge ist und values der reactiveValue ist, der die Daten enthält.

Die Quelle für die App ist auf Github: https://github.com/mostly-harmless/radiant

Als Alternative können Sie auch die Reihenfolge der Variablen in einem reactiveValue retten können. Einzelheiten finden Sie in der Dokumentation Shiny.

Edit:

In global.R eine reactiveValue definieren:

savedOrder <- reactiveValues() 

Wenn ein Benutzer die Reihenfolge ändert (dies voraus, dass Sie Benutzer-ID als eine Variable in R haben):

if(!is.null(input$sortable)) { 
    savedOrder[[userid]] <- input$sortable 
} 

Sie könnten auch den ID-Wert an returnOrder im Falle einer Aktualisierung übergeben:

if(!is.null(savedOrder[[userid]])) { 
    returnOrder("sortable",savedOrder[[userid]]) 
} else { 
    returnOrder("sortable",colnames(dat)) 
} 
+0

Danke für den Zeiger. Ich habe es auf zwei Servern versucht, dem Produktionsserver, der ein alter glänzender 0.4.0 und ein 0.8.0 Server auf meiner VM ist. Auf dem 0.4.0 Server bekomme ich eine 'Konnte nicht finden Funktion" includeCSS "', und in der 0.8.0 bekomme ich einen 'Fehler: kann die Verbindung nicht öffnen'. Irgendwelche Ideen? – 719016

+1

Ich gab zwei Vorschläge. Was genau hast du probiert? – Vincent

+0

Ich habe versucht, die in https://github.com/mostly-harmless/sortable – 719016

Verwandte Themen