如何根据R Shiny中renderDataTable中的输入动态重新排序行?

时间:2015-10-29 08:20:13

标签: r datatables shiny

我在这里问,因为我在其他地方搜索过,无法找到答案。

我想知道是否/如何使用R Shiny的输入重新排序数据表的行。下面的示例实际上会在输入更改时重新生成表,但我希望在输入发生更改时,会发生与单击相关排序按钮相同的操作。有没有办法实现这个目标?

提前致谢!

library(shiny)

ui = shinyUI(pageWithSidebar(
  headerPanel('Examples of DataTables'),
  sidebarPanel(

    radioButtons('var', 'Variable to sort by',
                 c(mpg='mpg',
                   cyl='cyl'),
                 'cyl')
  ),
  mainPanel(
    dataTableOutput("mytable")
  )
)
)

server = shinyServer(function(input, output) {

  output$mytable = renderDataTable({
    mtcars[order(mtcars[,input$var]),]
  }, options = list(orderClasses = TRUE, LengthMenu = c(5, 25, 50), pageLength = 25))

})

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:0)

您的服务器需要reactive功能,否则它不会做出反应。我还将=更改为<-,这更像R

中的惯例
library(shiny)

ui <-  shinyUI(pageWithSidebar(
  headerPanel('Examples of DataTables'),
  sidebarPanel(

    radioButtons('var', 'Variable to sort by',
                 c(mpg='mpg',
                   cyl='cyl'),
                 'cyl')
  ),
  mainPanel(
    dataTableOutput("mytable")
  )
)
)

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

  sortTable <- reactive({
    mtcars[do.call(order, mtcars[as.character(input$var)]),]
  })

  output$mytable <- renderDataTable({
    sortTable()
  }, options = list(orderClasses = TRUE, LengthMenu = c(5, 25, 50), pageLength = 25))

})

shinyApp(ui,server)