以下内容可以禁用渲染数据表中第1列和第3列的过滤器:
output$datatbl <- DT::renderDataTable(
dt$df, rownames = FALSE,
filter = 'top',
options = list(autoWidth = TRUE,
columnDefs = list(list(targets = c(1,3), searchable = FALSE))))
但是,我有不同的数据集上传到我的应用程序,因此要禁用搜索的列将是不同的。我需要传递变量来更新targets
中options
的值。我尝试了以下内容(expr
内部eval(substitute()
是为了捕获在反应值列表dt $ datecolchoices中找到的列的索引:
output$datatbl <- DT::renderDataTable(
dt$df, rownames = FALSE,
filter = 'top',
options = list(autoWidth = TRUE,
columnDefs = list(list(targets = eval(substitute(which(names(dt$df) %in% dt$datecolchoices))), searchable = FALSE))))
但是,上面似乎没有像我预期的那样将var的值传递给targets
,因为没有为过滤器禁用列。我的代码有什么问题吗?谢谢!
答案 0 :(得分:3)
您可以预先按位置确定列名称,并将它们传递给targets参数,如下所示:
output$datatbl <- DT::renderDataTable({
disable_search_targets <- which(colnames(iris) %in% c('Petal.Length', 'Species'))
datatable(iris,
options = list(autoWidth = TRUE,
columnDefs = list(list(targets = disable_search_targets,
searchable = FALSE))))
})