使用DT获取选定的行值而不是闪亮的数字

时间:2017-08-07 08:03:26

标签: r datatable shiny

这里的小问题:我知道我可以通过input$dfname_rows_selected访问所选行,它会返回所选行的行数,但是如何读取行名称而不是数字?在我的情况下,它们不是按我之后使用的顺序生成的,因此我需要获取内部值以使其工作。

编辑:添加了示例

ui <- shinyUI(fluidPage(

  DT::dataTableOutput("table"),
  actionButton("btn", "press me")

))

server <- function(input, output) {
  observeEvent(input$btn, {
    print(input$table_rows_selected)
  })

  output$table <- DT::renderDataTable({

    mtcars %>%
      datatable(selection = "multiple")

  })

}
shinyApp(ui = ui, server = server)

2 个答案:

答案 0 :(得分:2)

这样的事情:

library(shiny)
library(DT)

ui <- basicPage(
  mainPanel(DT::dataTableOutput('mytable')),
  textOutput("selected")
)

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

  mydata <- reactive({mtcars})

  output$mytable = DT::renderDataTable(    
    datatable(mydata())
  ) 

  selectedRow <- eventReactive(input$mytable_rows_selected,{
    row.names(mtcars)[c(input$mytable_rows_selected)]
  })

  output$selected <- renderText({ 
    selectedRow()
  })
}
runApp(list(ui = ui, server = server))

答案 1 :(得分:1)

我认为你不能。在创建数据表之前,您可以做的是编写一个被动反应,对数据框进行所有修改。一个例子:

library(shiny)
library(DT)

ui <- shinyUI(fluidPage(
  DT::dataTableOutput("table"),
  textOutput("selectedcar")
)
)

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

  # the reactive where we filter/sort/modify the data
  reactive_df <- reactive({
    mtcars[order(mtcars$cyl),]
    })

  # This datatable uses the reactive directly, so no more modifications
  output$table <- DT::renderDataTable({
    DT::datatable(reactive_df())
    })

  # now we can get the row/rowname as follows:
  output$selectedcar <- renderText({
    paste0(rownames(reactive_df())[input$table_rows_selected], collapse = ", ")
  }) 
} 


shinyApp(ui, server)

希望这有帮助!