2017-02-17 52 views
0

我正在構建一個網站,以允許用戶訪問一些實驗數據。我在R MarkDown工作。閃亮 - 將輸出表中的元素轉換爲鏈接

我是網絡開發新手,我不知道Javascript,所以我建立了我的搜索工具作爲Shiny應用程序,搜索結果以表格的形式以結果名稱和一些細節呈現。

我想將名稱變成一個鏈接到一個.rmd文檔,用戶可以通過點擊訪問關於該結果的更多細節。

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) 
     } 

我已經試過HTML (paste0("< a href=page.rmd>", res$name, "< /a>, collapse=""))和使用tags$a(),但也被認爲是一次傳遞到輸出表HTML。

+0

答案爲[這個問題](http://stackoverflow.com/questions/19019709/r-shiny-table-not-rendering-html)應該幫助你用'paste0( 「」,res $ name,「< /a>,collapse =」「)'。 – NicE

回答

1

如果這是確定你使用0​​,而不是renderTable,您可以:

  • 把你的名字變成使用paste0sprintf鏈接

  • 使用renderDataTableescape=FALSE

注意:我在代碼中做了一些更改在renderDataTable之外的reactive中有子集。


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

@NicE給出的鏈接解決了這個問題。然而,瞭解renderDataTable會增加很多信息。 – InverniE