如何在Shiny中以数据框架交互式地对列进行子集化?

时间:2017-07-18 15:03:03

标签: r dataframe shiny subset

我想在闪亮的数据库查询中创建交互。 \

  1. 为复制粘贴的基因ID列表创建一个文本框;
  2. 或者,上传包含所有基因ID列表的文件;
  3. a中,我将通过提交的基因ID获取数据帧的子集。在R中,这可以实现为:

    mainPanel()

    在闪亮的 ui.R 中,我有:

    df[c("gene1", "gene2", "gene3", "gene4"),]
    

    server.R 我有:

    tabPanel("Browsing Gene(s)", tableOutput("queryTableCopy"), footer), 
    

    是硬编码的。

    刚刚开始有光泽,但不确定这应该如何实现闪亮。

1 个答案:

答案 0 :(得分:0)

我认为这可以满足您的需求。添加global.R很有用,因此您可以在UI中的selectizeInput中使用数据框的列名。

global.R

df_genes = data.frame(gene1=rep(1,10),gene2=rep(2,10),gene3=rep(3,10))

ui.R

shinyUI(fluidPage(

  sidebarLayout(
    sidebarPanel(
      selectizeInput("genes", "Select genes:", choices = colnames(df_genes),selected=colnames(df_genes),multiple=TRUE)
    ),
    mainPanel(
              DT::dataTableOutput("queryTable")
    )
  )
))

server.R

library(shiny)

shinyServer(function(input, output, session) {

  output$queryTable = DT::renderDataTable({
    if(length(input$genes)>0)
    {
      df = df_genes %>% select(input$genes)
      print(df)
      return(DT::datatable(df))
    }
    else
    {
      return(NULL)
    }
  })

})

我希望这有帮助!如果您有任何问题,请告诉我。