2014-01-28 53 views
6

我有一個R shiny網頁,我當前使用gvisTable來顯示data.frame中的一列選擇。這些行由用戶動態選擇sidebarPanel,但現在這些列在gvisTable調用中被硬編碼。R閃亮的gvisTable,用戶按照定義的順序選擇了列

我想允許用戶從下拉菜單中動態選擇列(請參閱非閃亮網頁中類似系統的快照)。我想要的主要功能是允許使用列。

enter image description here

任何想法如何通過列此有序選擇閃亮?

我不介意使用別的東西,而不是gvisTable,如果它工作。

編輯:感謝您使用可排序的答案顯示解決方案。它適用於我的舊版和新版閃亮。然而,這似乎並沒有記得點擊「刷新」的順序,這將是非常好的。

那麼,它可以保存最後選擇的訂單作爲瀏覽器cookie或類似的方式嗎?服務器已通過身份驗證,並且我被告知可以將變量順序放在列表中,其中用戶標識爲鍵。一個例子會很棒。

回答

5

在Shiny中你將不得不使用多個selectInput。但是,您可以通過ZJ安裝ShinySky(https://github.com/AnalytixWare/ShinySky)並使用允許排序的select2綁定。或者,您可以在https://github.com/mostly-harmless/sortable修改可排序的綁定。

編輯:我不知道餅乾。我使用更大的排序app。在那裏我有一個操作按鈕來保存用戶選擇的順序。請參閱數據>變換>重新排序列。在應用程序數據存儲在一個reactiveValue。要保存數據訂單,我使用values[[input$datasets]] <- values[[input$datasets]][,input$tr_reorder_cols],其中input$datasets是活動數據集,input$tr_reorder_cols是用戶選擇的變量排序,values是包含數據的reactiveValue。

源的應用程序是在Github上:https://github.com/mostly-harmless/radiant

作爲替代方案,你也可以保存在reactiveValue變量的順序。有關詳細信息,請參閱Shiny文檔。

編輯:

在global.R限定reactiveValue:當用戶改變的順序(在此假設你有可用的用戶ID與R可變)

savedOrder <- reactiveValues() 

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

此外,您可以在刷新的情況下將id值傳遞給returnOrder:

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

感謝您的指針。我在兩臺服務器上嘗試了它,生產服務器是我的虛擬機上一個老式的0.4.0和0.8.0服務器。在0.4.0服務器上,我得到一個'無法找到函數「includeCSS」',並且在0.8.0中出現'錯誤:無法打開連接'。有任何想法嗎? – 719016

+1

我給了兩個建議。你究竟做了什麼? – Vincent

+0

我試過https://github.com/mostly-harmless/sortable中的一個 – 719016