我有一个R闪亮的网页,我目前用它gvisTable
来显示data.frame中的一系列列.这些行由用户使用动态选择sidebarPanel
,但是现在这些列在gvisTable
调用中被硬编码.
我想允许用户从下拉菜单中动态选择列(请参阅非闪亮网页中类似系统的快照).我想要的关键功能是允许使用列.
任何想法如何通过闪亮的列排序选择?
我不介意使用别的东西,而不是gvisTable
如果它做的工作.
编辑:感谢您使用可排序的答案显示解决方案.它适用于我的旧版和新版闪亮版.然而,这似乎并没有记住点击"刷新"的顺序,这将是非常好的.
那么,它可以将最后选择的订单保存为浏览器cookie还是类似的方式?服务器已通过身份验证,我被告知可以将变量顺序放在以用户ID为密钥的列表中.这方面的一个例子很棒.
在Shiny中你必须使用多个selectInput.但是,您可以通过ZJ安装ShinySky(https://github.com/AnalytixWare/ShinySky)并使用他的select2绑定来进行排序.或者,您可以在https://github.com/mostly-harmless/sortable修改可排序绑定.
编辑:我不知道cookies.我在一个更大的应用程序中使用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:
savedOrder <- reactiveValues()
当用户更改顺序时(假设您将用户标识作为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)) }