Вы можете просто paste0
для этого.Если вы используете вектор в paste
, то элементы объединяются отдельно для каждого элемента в векторе.В этом примере я создал гиперссылку с lapply
для каждого идентификатора в каждой строке, которая содержит хотя бы одну строку идентификатора.
Функции strsplit
создают вектор строки идентификатора, разделенный на каждую запятую.Я добавил trimws
для удаления пробелов вокруг идентификаторов.
Кроме того, вам нужно поместить опции в функцию 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,';')