Написать CSV на основе ввода пользователя - PullRequest
0 голосов
/ 16 октября 2018

Я хочу записать CSV-файл на основе выбора поля ввода в строках.После многократного выбора полей ввода пользователь может написать CSV-файл, как только он нажмет кнопку "Write Data".

library(shiny)
library(DT)


mymtcars = mtcars
mymtcars$id = 1:nrow(mtcars)
runApp(
  list(ui = pageWithSidebar(
    headerPanel('Examples of Table'),
    sidebarPanel(
      textInput("collection_txt",label="Foo")
    ,
       br(),
   p("Include actionButton to prevent write occuring before user finalises selection"),  
   actionButton("generateButton","Write Data")    
),
    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 = "Foo:" )
      if(input$generateButton == 0){return()}
      input$generateButton
      mtt = mymtcars[rowSelect(),]
      mtt

    showNotification("Done!")
    write.csv(mtt, file = "sol_Deep.csv" , row.names=F)
    })

    output$mytable = DT::renderDataTable({
    DT::datatable(cbind(Flag=shinyInput(checkboxInput,"srows_",nrow(mymtcars),value=NULL,width=1), 
                    mymtcars),   extensions = 'Buttons', options = list(orderClasses = TRUE,
                                   pageLength = 5, lengthChange = FALSE, dom = 'Bfrtip',
                                   buttons = c('copy', 'csv', 'excel'),
                                   drawCallback= JS(
                                     'function(settings) {
                                     Shiny.bindAll(this.api().table().node());}')
                                  ),escape=F)

      }
  )

    })
)

Код возвращает NA.Как я могу это исправить?

...