我正在尝试编写一个闪亮的应用程序,该应用程序在称为“ 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)
答案 0 :(得分:0)
好,您似乎需要添加
return(df)
在eventReactive括号中(在for循环之后)