У меня есть таблица данных из пакета DT, которая содержит несколько столбцов, один из которых содержит URL-адреса. Есть ли способ заставить эти URL-адреса отображаться в виде гиперссылок, по которым пользователь может щелкнуть внутри приложения Shiny? Кроме того, может ли быть так, что если URL-адрес невероятно длинный (например, случайный поиск Google, который является 4-й записью), отображаются только первые 25 символов, не нарушая функциональность гиперссылки?
Пример кода ниже.
require(DT)
require(shiny)
web_names <- c("google", "yahoo", "Stack Overflow", "Random Google Search")
url <- c( "https://www.google.com/", "https://www.yahoo.com/", "https://stackoverflow.com/", "https://www.google.com/search?q=random+google+search&oq=random+google+search&aqs=chrome..69i57j0l5.3264j0j7&sourceid=chrome&ie=UTF-8")
websites <- data.frame(web_names, url)
ui <- fluidPage(
DT::dataTableOutput("websitesTable")
)
server<-function(input,output,session) {
output$websitesTable <- DT::renderDataTable({datatable({websites})})
}
shinyApp(ui=ui, server=server)
ОБНОВЛЕНИЕ: Основываясь на предложенном сообщении от Райана Мортона, я попытался адаптировать код. Моя проблема теперь заключается в функции sprintf, содержащейся в созданной пользователем функции createLink. Кнопка ссылки появляется, но не переходит в нужное место.
#app.R#
library(shiny)
web_names <- c("google", "yahoo", "Stack Overflow", "Random Google Search")
url <- c( "https://www.google.com/", "https://www.yahoo.com/", "https://stackoverflow.com/", "https://www.google.com/search?q=random+google+search&oq=random+google+search&aqs=chrome..69i57j0l5.3264j0j7&sourceid=chrome&ie=UTF-8")
websites <- data.frame(web_names, url)
createLink <- function(val) {
sprintf('<a href="" target="_blank" class="btn btn-primary">Info</a>', val)
}
websites$url_link <- createLink(websites$url)
ui <- fluidPage(
titlePanel("Table with Links!"),
sidebarLayout(
sidebarPanel(
h4("Click the link in the table to go to the url listed.")
),
mainPanel(
dataTableOutput('table1')
)
)
)
server <- function(input, output) {
output$table1 <- renderDataTable({ datatable({websites})
return(websites)
}, escape = FALSE)
}
shinyApp(ui, server)