我是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]" , "")
,此代码有效。我只想使其具有交互性。
答案 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)