列中每个固定文本的超链接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列中每个固定文本的超链接相关的知识,希望对你有一定的参考价值。
在下面的示例中,我必须为第3列中的每个“ID”字符串添加超链接。但是,下面的代码在列的每一行上以sapply
循环,grepl返回TRUE
或FALSE
。我该如何解决?
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
函数中,并确保您没有使用shiny
的dataTableOutput
和renderDataTable
函数,我更喜欢在这些函数之前放置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 电子邮件
如何使特定列中的 DISPLAYED DATA(int) 成为 GRIDVIEW 中的超链接?
ListView 上的 LongPress 与 Android 上的超链接