我有一个R shiny网页,我目前使用gvisTable
来显示data.frame中的一系列列。用户使用sidebarPanel
动态选择行,但现在gvisTable
调用内的列已经过硬编码。
我想允许用户从下拉菜单中动态选择列(请参阅非闪亮网页中类似系统的快照)。我想要的关键功能是允许使用列。
如何在闪亮的光线中传递这些有序列的选择?
我不介意使用别的东西而不是gvisTable
如果它能完成这项工作。
编辑:感谢您使用可排序的答案显示解决方案。它适用于我的旧版和新版闪亮版。然而,这似乎并不记得点击“刷新”的顺序,这将是非常好的。
那么,它可以将最后选择的订单保存为浏览器cookie还是类似的方式?服务器已通过身份验证,我被告知可以将变量顺序放在以用户ID为密钥的列表中。这方面的一个例子很棒。
答案 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))
}