You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:04:55