renderDataTable中的Rstudio Shiny被动选项列表

时间:2014-07-15 15:48:02

标签: r datatable shiny

我正在尝试更改Shiny中renderDataTable调用的选项,以取决于输入变量的值,在本例中为复选框。

第一个复选框成功更改了表的内容,如果选中则再添加一列。 第二个复选框不会更改表的选项。请参阅下面的代码,我正在加载数据表和其他扩展的更新版本,但这似乎没有任何影响。 第三个复选框也不会改变表格中条目的格式,这是我最终想要做的。

有什么想法吗?

# server.R
library("ggplot2")
shinyServer(function(input, output, session) {
     bold = reactive ({
         bold = ''
         bold = paste0(bold,'function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {')
          bold = ifelse(input$checkbox3,paste0(bold),paste0(bold,'if (parseFloat(aData[0]) >= 0.1) { $("td:eq(0)", nRow).css("font-weight", "bold"); }'))
          bold = paste0(bold,'}')
          return(bold)
     })
    output$mytable = renderDataTable({
              diamonds[,1:ifelse(input$checkbox1,6,5)]
          }, options = list(fnRowCallback = I(bold()),aaSorting=list(list(2, ifelse(input$checkbox2,"asc","desc"))))
    )
  }
)


# ui.R
shinyUI({
      pageWithSidebar(
              h1('Diamonds DataTable with TableTools'),
              tagList(
                        singleton(tags$head(tags$script(src='jquery.dataTables.min.js',type='text/javascript'))),
                        singleton(tags$head(tags$script(src='TableTools.min.js',type='text/javascript'))),
                        singleton(tags$head(tags$script(src='dataTables.colReorder.min.js',type='text/javascript'))),
                        singleton(tags$head(tags$script(src='colvis.js',type='text/javascript'))),
                        singleton(tags$head(tags$script(src='ZeroClipboard.min.js',type='text/javascript'))),
                        singleton(tags$head(tags$link(href='TableTools.min.css',rel='stylesheet',type='text/css'))),
                        singleton(tags$head(tags$link(href='ColVis.css',rel='stylesheet',type='text/css')))
                        , tags$head(
                                    tags$style(HTML("
                        .cvclear{
                         text-align:right}")
                                                       )
                                  )
                      ),
              tabPanel("foo",
                checkboxInput("checkbox1", "add one more column", FALSE),
                checkboxInput("checkbox2", "sort [desc] or [asc]", FALSE),
                checkboxInput("checkbox3", "no bold", FALSE),
                dataTableOutput("mytable")
                       )
            )
  })

1 个答案:

答案 0 :(得分:3)

该选项声明为:

"aaSorting": [[2,'asc']]

其中R是

options = list(aaSorting = list(list(2, 'asc')))

因此您需要将c换成list。但这里的逻辑是错误的。

  

如果启用了排序,则DataTables将在初始化时执行第一次排序。您可以使用此变量定义执行排序的列以及排序方向。 aaSorting数组应包含最初要排序的每列的数组,其中包含列的索引和方向字符串('asc'或'desc')。

因此,此选项仅适用于表的初始化。我不认为Shiny一旦形成就重新初始化表,所以这不会起作用,只有在第一次初始化表时工作。您的更复杂的示例可能会起作用,而list(list(...))可能就是问题。