2017-06-15 5 views
2

Ich habe eine Datentabelle aus dem DT-Paket, die mehrere Spalten enthält, von denen eine URLs enthält. Gibt es eine Möglichkeit, dass diese URLs als Hyperlinks angezeigt werden, auf die ein Nutzer in einer Shiny-App klicken kann? Könnte es außerdem sein, dass, wenn die URL unglaublich lang ist (wie die zufällige Google-Suche, die der vierte Eintrag ist), nur die ersten 25 Zeichen angezeigt werden, ohne die Funktionalität des Hyperlinks zu beeinträchtigen?Glänzend - URLs in Datentabelle anzeigen

Einige Beispielcode ist unten.

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) 

UPDATE: Basierend auf dem vorgeschlagenen Beitrag von Ryan Morton, habe ich versucht, den Code anzupassen. Mein Problem ist jetzt die sprintf-Funktion, die in der vom Benutzer erstellten createLink-Funktion enthalten ist. Die Link-Schaltfläche wird angezeigt, aber nicht an den gewünschten Speicherort.

#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) 
+0

Ist das ähnlich: https://stackoverflow.com/questions/28117556/clickable-links-in-shiny-datatable –

+0

@RyanMorton Das ist in der Nähe und eine Schaltfläche als Link zu haben würde mein Problem mit langen URLs lösen. Es sieht so aus, als ob die Verknüpfung mit der Funktion sprintf erstellt wird, die bei der ersten Recherche in der Funktionsdokumentation nur eine Möglichkeit darstellt, den in einer Verknüpfung zu verwendenden Text zu formatieren. Ich glaube, dass es die href-Funktion ist, die eine Verbindung herstellt, aber das ist, wo ich kämpfe und diese Antwort an die Verwendung von href anpasst, die eine vorhandene Webadresse, die momentan eine Zeichenkette ist, als Hyperlink verwendet. – User247365

Antwort

1

Slightly den mitgelieferten Code anpassen und es sollte die gewünschte Ausgabe ergeben:

createLink <- function(val) { 
    sprintf(paste0('<a href="', URLdecode(val),'" target="_blank">', substr(val, 1, 25) ,'</a>')) 
} 
websites$url <- createLink(websites$url) 

HTML funktioniert wie folgt: <a href="LINK", otherOptions,...> Linktext </a> So können Sie Ihren Link zusammen mit paste0() und substr() einfügen.

+0

Das funktioniert wunderbar! Gibt es eine Möglichkeit, anstatt die ersten 25 Zeichen anzuzeigen, einen Button zu erstellen wie den Post, den Ryan Morton in den Kommentaren gepostet hat? Ich bin jetzt gierig, da die Antwort, die du zur Verfügung gestellt hast, perfekt funktioniert, wie ich in meinem ursprünglichen Post gefragt habe :) – User247365

+0

Du hast jetzt beide Ansätze und ich denke dir jetzt wie 'ifelse()' funktioniert;) – BigDataScientist

Verwandte Themen