如果之前有人问过,我道歉。 我正在尝试运行一个基本的R闪亮应用程序,我将关键字作为文本输入,在该关键字上搜索数据框,然后打印结果(数据框中的某些项目)
我不知道我哪里出错了。当我运行下面的代码时,根本没有任何事情发生!没有提交/操作按钮,因为我在textInput中使用默认值。
# ui.R
shinyUI(fluidPage(
h1("Gene Finder",align="left"),
fluidRow(
column(3,
wellPanel(textInput("text", label = h4("Enter Identifier"), value = "BRCA1"))
),
column(6,verbatimTextOutput("genename"))
)
)
)
Server.R
# Server.R
setwd("/shiny-apps/sample-apps/test-1")
load("/shiny-apps/sample-apps/test-1/GenesHg19.RData")
findIdentifier <- function(genename) {
if(length(grep("ENSG",genename))==0) {
genename <- as.character(GenesHg19$external_gene_id[which(GenesHg19$external_gene_id==genename)])
} else {
genename <- as.character(GenesHg19$ensembl_gene_id[which(GenesHg19$ensembl_gene_id==genename)])
}
return(genename)
}
shinyServer(function(input,output) {
tada <- reactive({ findIdentifier(genename=as.character(input$text)) })
output$genename <- renderPrint({
paste("Other known identifiers of",input$text,"are",tada)
})
})
答案 0 :(得分:0)
这里的问题是shinyServer()本身不是一个反应函数,因此不会注意到用户的输入。为了使genename
更新用户的输入,有必要在调用renderPrint()时包装genename
变量的赋值,因为renderPrint()是反应函数,会注意到用户的输入。
在推出Shiny应用程序之后,值得回顾一下R控制台;控制台显示Shiny窗口可能无提示失败时出现的任何错误。例如,您已经注意到warmoverflow提到的拼写错误,因为R会说它查找变量'gename'而没有找到它。
希望这会有所帮助!!
答案 1 :(得分:0)
以下是工作示例,虽然您能解释一下findIdentifier函数的用途吗?
GenesHg19$ensembl_gene_id[which(GenesHg19$ensembl_gene_id==genename)]
将始终返回0长度向量或N x genename的向量,因此renderPrint将返回&#34;其他已知的genename标识符为&#34;或N次&#34;其他已知的基因名称标识符为基因名称&#34;
library(shiny)
# setwd("/shiny-apps/sample-apps/test-1") # redundant, shiny server automatically sets the app folder to be working directory
load("GenesHg19.RData")
shinyApp(
ui = shinyUI(fluidPage(
h1("Gene Finder",align="left"),
fluidRow(
column(3,
wellPanel(textInput("text", label = h4("Enter Identifier"), value = "BRCA1"))
),
column(6,verbatimTextOutput("genename"))
)
)
),
server = shinyServer(function(input,output,session) {
findIdentifier <- function(genename) {
if(grepl(x=genename, pattern = 'ENSG')) {
genename <- as.character(GenesHg19$ensembl_gene_id[which(GenesHg19$ensembl_gene_id==genename)])
} else {
genename <- as.character(GenesHg19$external_gene_id[which(GenesHg19$external_gene_id==genename)])
}
return(genename)
}
tada <- reactive({ findIdentifier(genename=as.character(input$text)) })
output$genename <- renderPrint({
paste("Other known identifiers of",input$text,"are",tada()) # reactive variable is function therefore has to be followed by ()
})
})
)