如何将变量传递给renderDataTable选项中的目标(闪亮)

时间:2017-06-17 19:47:12

标签: r shiny

以下内容可以禁用渲染数据表中第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))))

但是,我有不同的数据集上传到我的应用程序,因此要禁用搜索的列将是不同的。我需要传递变量来更新targetsoptions的值。我尝试了以下内容(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,因为没有为过滤器禁用列。我的代码有什么问题吗?谢谢!

1 个答案:

答案 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))))
})