2017-06-17 97 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

謝謝,它的工作原理! –