2017-02-17 27 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