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

问题描述 投票:0回答:1

我想知道是否/如何使用 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)
r shiny
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.