2014-01-28 16 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