【问题标题】:Rstudio Shiny reactive options list in renderDataTablerenderDataTable 中的 Rstudio Shiny 反应选项列表
【发布时间】:2014-09-05 21:50:31
【问题描述】:

我正在尝试将 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")
                       )
            )
  })

【问题讨论】:

    标签: r datatable shiny


    【解决方案1】:

    选项声明为:

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

    在R中是

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

    所以您需要将您的c 换成list。然而这里的逻辑是错误的。

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

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

    【讨论】:

    • 我将其更改为list(list(...)),但是是的,实际问题没有区别,我将更改我的问题以做更复杂的示例。
    • 它工作得很好,注意它在一开始就排序,它不适合你的原因是不正确的规范。它可以按您的意愿运行,即作为反应式吗?不,因为闪亮不会重新创建 data.table
    • 更改问题有点烦人。如果您有其他问题,请将其单独发布到此问题。
    • 现在编辑问题。我不介意创建一个新的,但它会与这个非常相似,所以这个最好关闭。
    • 再次fnRowCallBack 在表初始化时定义。 Shiny 不会重新创建表,因此在响应触发时不会定义新的回调。这个问题可能有助于解决stackoverflow.com/questions/13912363/…
    猜你喜欢
    • 2014-09-24
    • 2014-09-27
    • 2017-10-19
    • 2018-08-07
    • 2019-12-21
    • 2015-02-23
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多