列中每个固定文本的超链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列中每个固定文本的超链接相关的知识,希望对你有一定的参考价值。

在下面的示例中,我必须为第3列中的每个“ID”字符串添加超链接。但是,下面的代码在列的每一行上以sapply循环,grepl返回TRUEFALSE。我该如何解决?

 shinyApp(
        shinyUI(
            fluidPage(
                dataTableOutput('PM_output')
            )
        ),
        shinyServer(function(input, output, session) 
            require(DT)
            dat <- read.table(text="Col1     Col2                  Col3
              Google   '5 lines description'   'ID273, ID288, ID299'
              Yahoo    '5 lines description'   'ID3, ID28, ID2'", header=T, strings=F)
            dat$Col3 <- sapply(grepl('ID',dat$Col3), function(x) 
                toString(tags$a(href=paste0("http://id=", x), x)))

            output$PM_output <- renderDataTable(expr = datatable(dat, escape=FALSE),
              options = list(autoWidth = T))
        )
    )

编辑:如果Col3是这样的:

    Col3
    'Name=ID273, ID288, ID299;'
    'Name=ID273;'

我怎么能像只有'ID..'部分是一个超链接的方式修复代码?

答案

你可以只为paste0这个。如果在paste中使用向量,则元素将为向量中的每个项目单独连接。在示例中,我为每行中包含至少1个ID字符串的每个ID创建了带lapply的超链接。

strsplit函数创建ID字符串的向量,在每个逗号分开。我添加了trimws来删除ID周围的空格。

此外,您需要将选项放在datatable函数中,并确保您没有使用shinydataTableOutputrenderDataTable函数,我更喜欢在这些函数之前放置DT::

工作实例

library(DT)
library(shiny)

shinyApp(
  shinyUI(
    fluidPage(
      DT::dataTableOutput('PM_output')
    )
  ),
  shinyServer(function(input, output, session) 
    dat <- read.table(text="Col1     Col2                  Col3
              Google   '5 lines description'   'ID273, ID288, ID299'
              Yahoo    '5 lines description'   'ID3, ID28, ID2'", header=T, strings=F)
    dat$Col3[grepl('ID',dat$Col3)] = lapply(dat$Col3[grepl('ID',dat$Col3)], function(x)paste0("<a href=\"http://id=", trimws(unlist(strsplit(x, ',',fixed=T))), "\">", trimws(unlist(strsplit(x, ',',fixed=T))),"</a>"))

    output$PM_output <- DT::renderDataTable(
      datatable(dat, escape=FALSE, options = list(autoWidth = T)))
  )
)

编辑

如果我理解正确,第1行的请求输出是:

"Name=<a href=\"http://id=ID273\">ID273</a>,<a href=\"http://id=ID288\">ID288</a>,<a href=\"http://id=ID299\">ID299</a>;"

您可以使用以下命令创建:

dat <- read.table(text="Col1     Col2                  Col3
              Google   '5 lines description'   'Name=ID273, ID288, ID299;'
                  Yahoo    '5 lines description'   'Name=ID3, ID28, ID2;'", header=T, strings=F)
dat$Col3=lapply(gsub("Name=|;", "", dat$Col3[grepl('ID',dat$Col3)]), function(x)paste0("<a href=\"http://id=", trimws(unlist(strsplit(x, ',',fixed=T))), "\">", trimws(unlist(strsplit(x, ',',fixed=T))),"</a>", collapse=','))
dat$Col3=paste0('Name=',dat$Col3,';')

以上是关于列中每个固定文本的超链接的主要内容,如果未能解决你的问题,请参考以下文章

将 Excel 范围内的超链接传输到 Outlook 电子邮件

如何使用 Pandas 在列中添加值的超链接?

如何使特定列中的 DISPLAYED DATA(int) 成为 GRIDVIEW 中的超链接?

ListView 上的 LongPress 与 Android 上的超链接

我的超链接标签 ID 在 Svelte 的浏览器中一直显示为文本

获取gridview中选中记录的超链接字段值