首页 > 解决方案 > 如何将 ShinyR 功能与 UI 集成?

问题描述

我正在尝试开发我的第一个小型 shinyR 应用程序,但它的 UI 不会与其功能正确集成。运行app后浏览文件时,该功能不执行。请在我的代码下方找到。我是这个领域的新手,我将非常感谢您的支持。

library(seqinr)
library(shiny)
# User interface
ui <- fluidPage(
  titlePanel("Welcome to DotMatcher Plot App"),
  sidebarLayout(
    sidebarPanel (
      fileInput("protein1",
                label = "Choose a file",
                multiple = FALSE,
                accept =c("text", "fasta")),
      fileInput( "protein2",
                 label = NULL,
                 multiple=FALSE,
                 accept =c("text", "fasta"))
    ),
    # Outputs
    mainPanel(
      plotOutput(outputId = "plot")
    )
  )
)
)
# Server Function
server <- function(input, output) {
  movies_subset1 <- reactive({
    req(input$protein1)})
  movies_subset2 <- reactive({
    req(input$protein2)
  })
  gl<-pairwiseAlignment(pattern = movies_subset1, subject = movies_subset2)
  output$plot <- renderPlot({
    print (gl)

    })

}
# App 
shinyApp(ui = ui, server = server)

标签: rshinybioinformatics

解决方案


无论何时使用反应式表达式,都必须使用方括号来获取该表达式的值。我添加了一个打印语句,以便您可以看到差异。代码现在应该可以工作了。但总的来说,由于您不操纵输入,因此无需在反应式表达式中进行包装。

library(seqinr)
    library(shiny)
    # User interface
    ui <- fluidPage(
        titlePanel("Welcome to DotMatcher Plot App"),
        sidebarLayout(
            sidebarPanel (
                fileInput("protein1",
                          label = "Choose a file",
                          multiple = FALSE,
                          accept =c("text", "fasta")),
                fileInput( "protein2",
                           label = NULL,
                           multiple=FALSE,
                           accept =c("text", "fasta"))
            ),
            # Outputs
            mainPanel(
                plotOutput(outputId = "plot")
            )
        )
    )

    # Server Function
    server <- function(input, output) {
        seq1 <- reactive({
            req(input$protein1)})
        seq2 <- reactive({
            req(input$protein2)
        })

        output$plot <- renderPlot({

    print(seq1)
    print(seq1())

            dotPlot(seq1(), seq2(), wsize = 100, wstep = 100, nmatch = 100)

        })

    }
    # App 
    shinyApp(ui = ui, server = server)

推荐阅读