加载数据R有光泽

时间:2016-05-17 15:42:36

标签: r shiny

如果之前有人问过,我道歉。 我正在尝试运行一个基本的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)
    })
})

GenesHg19.RData看起来像这样

enter image description here

2 个答案:

答案 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 ()
    })
  })
)
相关问题