我正在尝试更改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")
)
)
})
答案 0 :(得分:3)
该选项声明为:
"aaSorting": [[2,'asc']]
其中R是
options = list(aaSorting = list(list(2, 'asc')))
因此您需要将c
换成list
。但这里的逻辑是错误的。
如果启用了排序,则DataTables将在初始化时执行第一次排序。您可以使用此变量定义执行排序的列以及排序方向。 aaSorting数组应包含最初要排序的每列的数组,其中包含列的索引和方向字符串('asc'或'desc')。
因此,此选项仅适用于表的初始化。我不认为Shiny一旦形成就重新初始化表,所以这不会起作用,只有在第一次初始化表时工作。您的更复杂的示例可能会起作用,而list(list(...))
可能就是问题。