如何在Shiny DataTable中按超链接标签排序?
解决方案
要让带超链接的Link列按标签(即Significance列的文本内容)排序,只需在DT的配置中指定该列的排序数据源为Significance列即可,具体实现如下:
- 在
datatable的options参数中添加columnDefs配置,指定Link列的排序依据为Significance列的数值。 - DT的列索引从0开始计数,因此
Link列对应索引2,Significance列对应索引1。
修改后的完整代码:
library(shiny) library(DT) ui <- bootstrapPage( DTOutput("tabla") ) server <- function(input, output) { output$tabla <- renderDT({ datos <- as.data.frame(matrix(ncol=3, nrow=10)) names(datos) <- c("Allele_ID", "Significance", "Link") datos$Allele_ID <- c("1310278", "18560", "1770470", "1770471", "1770458", "1310279", "1310279", "17978", "1770451", "227743") datos$Significance <- c("Pathogenic", "Likely Pathogenic", "Pathogenic", "Uncertain Significance", "Likely Benign", "Likely Benign", "Benign", "Uncertain Significance", "Pathogenic", "Likely Benign") datos$Link <- paste0('<a href="http://www.ncbi.nlm.nih.gov/clinvar/?term=', datos$Allele_ID, '[alleleid]" target="_blank">', datos$Significance, "</a>") DT::datatable(datos, rownames = FALSE, style = 'bootstrap', filter = list(position = 'top', clear = FALSE), escape = FALSE, options = list( dom = "<\"datatables-scroll\"t>", ordering = TRUE, # 关键配置:指定Link列(索引2)用Significance列(索引1)的值排序 columnDefs = list(list(targets = 2, orderData = 1)) ) ) }) } shinyApp(ui = ui, server = server)
关键说明
columnDefs中的配置项:
targets = 2:指定要设置排序规则的列是第3列(Link列)。orderData = 1:告诉DT在排序该列时,使用第2列(Significance列)的内容作为排序依据,这样点击Link列的排序按钮时,就会按照超链接的标签文本排序,而非HTML字符串本身。
内容的提问来源于stack exchange,提问作者Iria Roca
相关产品推荐
相关产品推荐

