获取选定行的值而不是数字

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

我知道我可以通过

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)
r shiny dt
2个回答
4
投票

类似这样的:

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
投票

我认为你做不到。您可以做的是在创建数据表之前编写一个反应式,其中对数据框的所有修改都会发生。一个例子:

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)
© www.soinside.com 2019 - 2024. All rights reserved.