R闪亮的gvisTable,用户按照定义的顺序选择列

时间:2014-01-28 11:15:57

标签: r shiny

我有一个R shiny网页,我目前使用gvisTable来显示data.frame中的一系列列。用户使用sidebarPanel动态选择行,但现在gvisTable调用内的列已经过硬编码。

我想允许用户从下拉菜单中动态选择列(请参阅非闪亮网页中类似系统的快照)。我想要的关键功能是允许使用列。

enter image description here

如何在闪亮的光线中传递这些有序列的选择?

我不介意使用别的东西而不是gvisTable如果它能完成这项工作。

编辑:感谢您使用可排序的答案显示解决方案。它适用于我的旧版和新版闪亮版。然而,这似乎并不记得点击“刷新”的顺序,这将是非常好的。

那么,它可以将最后选择的订单保存为浏览器cookie还是类似的方式?服务器已通过身份验证,我被告知可以将变量顺序放在以用户ID为密钥的列表中。这方面的一个例子很棒。

1 个答案:

答案 0 :(得分:5)

在Shiny中你必须使用多个selectInput' s。但是,您可以通过ZJ(https://github.com/AnalytixWare/ShinySky)安装ShinySky并使用他的select2绑定来允许排序。或者,您可以在https://github.com/mostly-harmless/sortable修改可排序绑定。

编辑:我不了解cookies。我在较大的app中使用sortable。我有一个动作按钮来保存用户选择的顺序。参见数据&gt;变换&gt;重新排序列。在app中,数据存储在reactiveValue中。要保存数据顺序,我使用values[[input$datasets]] <- values[[input$datasets]][,input$tr_reorder_cols]其中input$datasets是活动数据集,input$tr_reorder_cols是用户选择的变量排序,values是包含数据的reactiveValue。< / p>

该应用的来源是在Github:https://github.com/mostly-harmless/radiant

作为替代方案,您还可以在reactiveValue中保存变量的顺序。有关详细信息,请参阅Shiny文档。

编辑:

在global.R中定义reactiveValue:

savedOrder <- reactiveValues()

当用户更改订单时(假设您将用户ID作为R中的变量提供):

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))
}