迭代地基于单击的DataTable单元构建向量

时间:2014-12-10 00:14:07

标签: r datatable shiny

我正在尝试为派对创建一个简单的卡拉OK队列应用程序。我有一个DataTable存储我的卡拉OK歌曲集。我想点击歌曲列表中的一个项目,并将其添加到第二个DataTable中,该DataTable将成为一个队列。我希望随后点击的歌曲被添加到队列表中。但是,我尝试对此进行编码导致队列列表不持久。它只在列表中有一个轨道。

如何使用闪烁的DataTable中的单击单元格迭代地向元素添加元素?

server.R

queue <- list()

shinyServer(function(input, output) { 


  output$myTable <- renderDataTable({df}, options = list(bSortClasses = TRUE), callback = "function(table) {
    table.on('click.dt', 'tr', function() {
    Shiny.onInputChange('rows',
    table.row(this).data());
    });}")  


  # if data table is clicked, add to the queue
  observe({

    if (!is.null(input$rows)) {

      queue[[length(queue) + 1]] <- input$rows[3]

      dfq <- data.frame('FileName'=unlist(queue))

      output$queue <- renderDataTable({dfq}, callback = "function(table) {
        table.on('click.dt', 'tr', function() {
        Shiny.onInputChange('play',
        table.row(this).data());
        });}")
    }

  })

  observe({
    if (!is.null(input$play)){
      # grab the row from the data.frame
      selection <- df[df[,3] == input$play, ]

      play.music(selection)
    }

  })
})

ui.R

library(shiny)

shinyUI(pageWithSidebar(

  headerPanel("Karaoke!"),

  sidebarPanel(
    selDataTableOutput("queue")
  ),

  mainPanel(
    selDataTableOutput("myTable")
  )
)
)

1 个答案:

答案 0 :(得分:0)

您可以将矢量存储到文件中。当您开始新的Shiny会话时,您定义一个空文件(例如cat(“”,nameFile.txt))。当您单击一个单元格时,您将新元素附加到该文件(例如cat(newElement,nameFile.txt,append = TRUE))并将该文件作为向量读取(例如,使用read.table)。