首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有可排序列顺序的反应式数据帧

具有可排序列顺序的反应式数据帧
EN

Stack Overflow用户
提问于 2017-08-18 22:45:04
回答 2查看 325关注 0票数 2

在这个闪亮的应用中,用户可以选择一个数据集,这个数据集被显示出来,用户可以对列的顺序进行排序(感谢shinyjqui):

代码语言:javascript
复制
library(shiny)
library(shinyjqui)
library(googleVis)

ui <- shinyUI(fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput("dataset", "Select a dataset", 
                  choices = c("iris", "mtcars")), 
      uiOutput("sortable")
    ),
    #
    mainPanel(
      htmlOutput("gvtable")
    )
  )
))

server <- shinyServer(function(input, output) {

  Dat <- reactive({
    switch(input$dataset, 
           iris = iris, 
           mtcars = mtcars)
  })

  output$sortable <- renderUI({
    jqui_sortabled(
      do.call(function(...) tags$ul(id="list", ...), 
              lapply(colnames(Dat()), function(col) tags$li(col))) 
    )
  })

  output$gvtable <- renderGvis({
    validate(need(input$list_order, message=FALSE))
    if(all(input$list_order[["html"]] %in% names(Dat()))){
      colOrder <- input$list_order[["html"]]
    }else{
      colOrder <- names(Dat())
    }
    gvisTable(Dat()[, colOrder], 
              options = list(
                gvis.editor="Edit me!", 
                page="enable")
    )
  })

})

runApp(list(ui=ui, server=server))

当我运行应用程序时,这很好用:显示iris数据集,我可以处理列的顺序(侧边栏中的列列表是可排序的):

但是当我选择另一个数据集时,列的列表是不可排序的。为什么以及如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-18 22:53:09

这是通过对可排序列表使用不同的id来实现的:

代码语言:javascript
复制
  randomID <- eventReactive(Dat(), {
    paste0("list", rpois(1, 1000))
  })

  output$sortable <- renderUI({
    jqui_sortabled(
      do.call(function(...) tags$ul(id=randomID(), ...), 
              lapply(colnames(Dat()), function(col) tags$li(col))) 
    )
  })

  output$gvtable <- renderGvis({
    validate(need(input[[paste0(randomID(), "_order")]], message=FALSE))
    columns <- input[[paste0(randomID(), "_order")]][["html"]]
    if(all(columns %in% names(Dat()))){
      colOrder <- columns
    }else{
      colOrder <- names(Dat())
    }
    gvisTable(Dat()[, colOrder], 
              options = list(
                gvis.editor="Edit me!", 
                page="enable")
    )
  })
票数 1
EN

Stack Overflow用户

发布于 2017-08-25 11:18:00

这是由于Github上的开发版本中修复了shinyjqui v0.2.0的一个错误。你可以在新版本提交给CRAN之前尝试一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45759414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档