renderDataTable()在Shiny App中不输出表

时间:2019-01-25 11:20:08

标签: r shiny


我正在尝试编写一个闪亮的应用程序,该应用程序在称为“ SYMBOL”的excel文件的列中搜索模式,并输出匹配的行。问题是代码不输出任何内容就能继续运行。没有错误。数据框也正在创建。 我做错了什么? 请找到下面的代码,并且可以在此链接https://drive.google.com/file/d/1VX9RXIyRaGr9Ox-h-ZNGkbYsAasPeKBp/view?usp=sharing中找到excel文件。
先谢谢了。

  library(shiny)
  library(xlsx)
  library(DT)
  library(tidyverse)

  # Escape special chars for regex matching
  escapeSpecialChars <- function(p) {
    sChars <- "/(){}[]\\.*^$|+?"
    q <- unlist(strsplit(p,""))
    for(i in 1:length(q)){
      if (length(q[i] %>% contains(sChars, ignore.case = TRUE))){
        q[i] <- paste0("[", q[i], "]")
      }
    }
    q <- paste0(q, collapse = "")
    return(q)
  } 


  # Read GO file
  GO_Symbol <-
    read.xlsx2(
      'GO_Symbol.xlsx',
      1,
      check.names = FALSE
    )


  # UI logic
  ui <- fluidPage(
    titlePanel(""),

    sidebarLayout(
      sidebarPanel(
        textAreaInput(
          "Symbol",
          "Paste your Genes below",
          "",
          width = "200px",
          height = "400px"
        ),
        hr(),
        actionButton("gobutton", "Submit")
      ),

      mainPanel(
        DT::dataTableOutput("dataFrameOutput")
      )
    )
  )

  # Define server logic
  server <- function(input, output) {
    data <- eventReactive(
      input$gobutton,
      {
        if (is.null(input$Symbol)) {
          return()
        }

        df <- data.frame(matrix(ncol = ncol(GO_Symbol), nrow = 0))
        colnames(df) <- colnames(GO_Symbol)
        ts <- unlist(strsplit(input$Symbol, "\n"))
        for (i in 1:length(ts)) {
          p <- escapeSpecialChars(ts[i])
          idx <-
            grep(p, GO_Symbol$SYMBOL, ignore.case = TRUE)
          if (length(idx)) {
            df <- rbind(df, GO_Symbol[idx, ])
          }
          else {
            df <- df %>% add_row(SYMBOL = ts[i])
          }
        }
      })

    output$dataFrameOutput <- DT::renderDataTable({
      data()
    })
  }

  # Run the app
  shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

好,您似乎需要添加

return(df)

在eventReactive括号中(在for循环之后)