DT过滤不返回行号

时间:2018-10-17 08:49:26

标签: r shiny dt

在下面的代码中,我将用户选择的行保存到CSV文件中。运行正常。如果我在filter='top', selection = 'multiple'函数中添加datatable(),则会出现问题,然后它将停止返回行值(行位置)。用户定义的函数rowSelect()返回行值。

请参阅下面的完整代码-

library(shiny)
library(RODBC)
library(DT)
library(shinyalert)


mydata = mtcars
mydata$id = 1:nrow(mydata)
d = data.frame(stringsAsFactors = F)

runApp(
  list(ui = pageWithSidebar(
    headerPanel('Examples of Table'),
    sidebarPanel(
      textInput("collection_txt",label="RowIndex")
      ,br(),useShinyalert(),
      actionButton("run", "Write Data"),
      br(),
      p("Writeback with every user input. CSV file gets saved on your working directory!")),

    mainPanel(
      DT::dataTableOutput("mytable")
    ))

    , server = function(input, output, session) {

      shinyInput <- function(FUN,id,num,...) {
      inputs <- character(num)
      for (i in seq_len(num)) {
        inputs[i] <- as.character(FUN(paste0(id,i),label=NULL,...))
      }
      inputs
    }

    rowSelect <- reactive({
      rows=names(input)[grepl(pattern = "srows_",names(input))]
      paste(unlist(lapply(rows,function(i){
        if(input[[i]]==T){
          return(substr(i,gregexpr(pattern = "_",i)[[1]]+1,nchar(i)))
        }
      })))
    })

    observe({
      updateTextInput(session, "collection_txt", value = rowSelect() ,label = "RowIndex:" )
    })

    df_subset <- reactive({
      d = data.frame(n = rowSelect(), stringsAsFactors = F)
      return(d)
    })

    observeEvent(input$run, {write.csv(mydata[as.numeric(df_subset()$n),], file = "Writeback.csv" , row.names=F)
    shinyalert(title = "Task Completed!", type = "success")})

    output$mytable = DT::renderDataTable({
    DT::datatable(cbind(Flag=paste0('<input type="checkbox" id="srows_', mydata$id, '" value="', mydata$id, '">',""), 
                    mydata),   extensions = 'Buttons', options = list(orderClasses = TRUE,
                                   pageLength = 5, lengthChange = FALSE, dom = 'Bfrtip',
                                   buttons = c('copy', 'csv', 'excel'),
                                   drawCallback= JS(
                                     'function(settings) {
                                  Shiny.unbindAll(this.api().table().node());
                                  Shiny.bindAll(this.api().table().node());}')
                                  ),escape=F)

      }
  )

    }), launch.browser = T
)

任何帮助将不胜感激!

0 个答案:

没有答案