2017-02-17 10 views
0

Ich baue eine Website, um Benutzern den Zugriff auf einige experimentelle Daten zu ermöglichen. Ich arbeite in R MarkDown.shiny - Element in Ausgabetabelle in Link umwandeln

Ich bin neu in Web-Entwicklung und ich weiß nicht, Javascript, so habe ich meine Suche Werkzeug als Shiny App, mit den Suchergebnissen präsentiert in Form einer Tabelle mit dem Ergebnis, Namen und ein paar Details gebaut.

Ich möchte den Namen in einen Link zu einem .rmd-Dokument umwandeln, auf das der Benutzer klicken kann, um auf weitere Details zu diesem Ergebnis zuzugreifen.

data=as.matrix(cbind(names=letters[1:10], position=1:10, val=runif(10)),) 

ui <- fluidpage(
     sidebarPanel(
      textInput("name",label = "name", value = "") 
     ) 

     mainPanel(tableOutput("res")) 
     ) 

server <- function (input, output) { 
     searchedName=as.character(input$name) 
     if (searchedName != "") { 
      res.table=subset(data, data$names==searchedName) 
     } 
     output$res=renderTable({ 
       res=as.data.frame(cbind(res.table[,1],res.table[,2])) 
       colnames(res)=c("name","position") 
       return(res) 
       }, align="c", colnames = T) 
     } 

Ich habe versucht, HTML (paste0("< a href=page.rmd>", res$name, "< /a>, collapse="")) und mit tags$a(), aber weder als HTML erkannt einmal auf die Ausgabetabelle übergeben.

+0

die Antwort auf [diese Frage] (http://stackoverflow.com/questions/19019709/r-shiny-table-not-rendering-html) Sie sollte helfen, die 'paste0 mit ("", res $ name, "< /a>, collapse =" ")'. – NicE

Antwort

1

Wenn es in Ordnung ist für Sie renderDataTable statt renderTable zu verwenden, können Sie:

  • Ihren Namen in Links drehen mit paste0 oder sprintf

  • Verwendung renderDataTable mit escape=FALSE

Hinweis: Ich habe einige Änderungen am Code vorgenommen habe die Teilmenge in einem reactive aus renderDataTable.


library(shiny) 
library(dplyr) 
library(DT) 

data=as.matrix(cbind(names=letters[1:10], position=1:10, val=runif(10))) 

ui <- fluidPage(
    sidebarPanel(
    textInput("name",label = "name", value = "") 
), 

    mainPanel(

    dataTableOutput("res")) 
) 

server <- function (input, output) { 

    ## function to turn txt into link -------------- 
    ToLink <- function(txt,link) { 
    paste0('<a href=',link,">",txt,'</a>') 
    } 


    ## form table --------------------- 
    res.table <- reactive({ 
    req(input$name !="") # to make sure input$name in not empty 

    res <- data %>% 
     data.frame(stringsAsFactors = F) %>% 
     filter(names==input$name) %>% 
     select(names,position) 

    # turn the names into link/s, if more than one value, provide a vector of urls 
    res$names <- ToLink(res$names,"https://www.google.com") #Use ur url/s 

    return(res) 
    }) 

    ## render datatable ------------------------- 
    output$res=renderDataTable({ 

    res.table() 

    }, escape = FALSE # make sure escape=FALSE 
)} 

shinyApp(ui = ui, server = server) 
+0

Der Link von @NicE löste das Problem. Das Wissen über renderDataTable fügt jedoch eine Menge Informationen hinzu. – InverniE