2017-06-17 52 views
0

下可以在所呈现的数据表列1和列3禁用过滤:如何变量传递给在选择目标renderDataTable(闪亮)

output$datatbl <- DT::renderDataTable(
dt$df, rownames = FALSE, 
filter = 'top', 
options = list(autoWidth = TRUE, 
       columnDefs = list(list(targets = c(1,3), searchable = FALSE)))) 

不过,我有不同的数据集上传到我的应用程序,因此要禁用的搜索列将有所不同。我需要传递变量以更新optionstargets的值。我尝试以下(内eval(substitute()expr是捕捉它们的反应值列表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)))) 

然而,似乎以上不及格的价值正如我所期望的那样,这个变量为targets,因为过滤器的列未被禁用。我的代码有什么问题吗?谢谢!

+0

我想这是因为'的eval(替代())'不能在功能环境调用。我想知道如何在这里嵌入一个函数来改变选项中'targets'的值。谢谢! –

回答

3

可以预先确定的位置的列名,并将其传递到目标的说法是这样的:

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)))) 
}) 
+0

谢谢,它的工作原理! –