【问题标题】:R shiny gvisTable with columns selected by user in defined orderR闪亮的gvisTable,用户按定义的顺序选择列
【发布时间】:2014-01-28 11:15:57
【问题描述】:

我有一个R shiny 网页,我目前使用gvisTable 来显示从data.frame 中选择的列。行是由用户使用sidebarPanel 动态选择的,但现在这些列是在gvisTable 调用中硬编码的。

我希望允许用户从下拉菜单中动态选择列(请参阅来自非闪亮网页的类似系统的快照)。我想要的关键功能是允许对列进行重新排序。

任何想法如何通过闪亮的列的这种排序选择?

我不介意用其他东西代替gvisTable,如果它可以完成这项工作。

编辑:感谢您展示使用可排序答案的解决方案。它适用于我的新旧版本的闪亮。然而,这似乎不记得点击“刷新”时的顺序,这真是太好了。

那么,它可以将最后选择的订单保存为浏览器 cookie 或类似的方式吗?服务器已通过身份验证,有人告诉我可以将变量 order 放在一个列表中,其中用户 id 作为键。一个很好的例子。

【问题讨论】:

    标签: r shiny


    【解决方案1】:

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

    编辑:我不知道 cookie。我在更大的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 中有用户 ID 作为变量):

    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.4.0 和我的 VM 上的 0.8.0 服务器。在 0.4.0 服务器上,我得到一个 Could not find function "includeCSS",在 0.8.0 中,我得到一个 Error: cannot open the connection。有什么想法吗?
    • 我给了两个建议。你到底尝试了什么?
    • 我去掉了对 includeCSS 的依赖。试试 shiny::runGitHub('sortable','mostly-harmless')。如前所述,您需要根据您的需要调整 sortable。 ShinySky 的 select2 绑定可能是一个更简单的选择。
    • 这太棒了,它既适用于我的新服务器,也适用于我的旧服务器。它可以将最后选择的订单保存为cookie或其他东西吗?为其添加了赏金。
    • 谢谢,我看到它在您的应用程序中是如何完成的:每次用户更改列顺序时,信息都会发送回服务器并更改 Shiny 服务器的状态,从而使更改永久用于每个其他浏览器中的每个其他用户。是这样吗?
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2021-07-16
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2018-06-08
    相关资源
    最近更新 更多