使用Rentrez和Shiny下载蛋白质序列

时间:2018-09-23 20:56:08

标签: r shiny

我是R和Shiny的新手。到目前为止,我已经能够制作一个脚本,使用rentrez软件包从ncbi获取蛋白质序列。但是我无法使其在闪亮的应用程序中工作。

我在用户界面中有以下输入内容

 sidebarPanel(
                    uiOutput("maps.protein.input")
                  ),

并在应用文件中:

output$maps.protein.input <- renderUI({
selectInput("prot.accession", "Accession:", as.list(pep.accession))

这部分效果很好,它将pep.accession列表读入selectInput

现在我要使用rentrez来下载蛋白质序列

protein_seq <- reactive({

                    raw_seq <- entrez_fetch(db="protein", id= paste(input$prot.accession), rettype = "fasta")
                    raw_seq <- str_sub(raw_seq, start = str_locate(pattern = "\n", protein_seq)[,1] +1 )
                    str_replace_all(raw_seq, "[\r\n]" , "")

 }) 

在R脚本中,我使用:

protein_seq <- entrez_fetch(db="protein", id="XP_011524437.1", rettype = "fasta")
protein_seq <- str_sub(protein_seq, start = str_locate(pattern = "\n", protein_seq)[,1] +1 )
protein_seq <- str_replace_all(protein_seq, "[\r\n]" , "")

,此代码有效。我只想使其具有交互性。

1 个答案:

答案 0 :(得分:0)

这是一个解决方案。我不知道XP_011524437.1是什么,所以在selectInput中使用了pep.accession。您可以在您的应用中进行更改。我还纠正了str_sub中的逻辑,并添加了req()语句。

library(shiny)
library(rentrez)

ui <- fluidPage(
  sidebarPanel(
    uiOutput("maps.protein.input")
  ),
  mainPanel(
    textOutput("result1")
  )
)

server <- function(input, output, session) {
  output$maps.protein.input <- renderUI({
    selectInput("prot.accession", "Accession:", "XP_011524437.1")
  })

  protein_seq <- reactive({
    req(input$prot.accession)
    raw_seq <- entrez_fetch(db = "protein", id = input$prot.accession, rettype = "fasta")
    raw_seq <- stringr::str_sub(raw_seq, start = str_locate(pattern = "\n", raw_seq)[,1] +1 )
    stringr::str_replace_all(raw_seq, "[\r\n]" , "")
    return(raw_seq)
  })

  output$result1 <- renderText({
    paste0("Protein sequence: ", as.character(protein_seq()))
  })
}

shinyApp(ui, server)