r语言 - 如何在 Shiny 中交互式地从 data.frame 中子集列?



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

  1. 为复制粘贴的基因 ID 列表创建一个文本框;
  2. 或者,上传包含所有基因ID列表的文件;

mainPanel()中,我将通过提交的基因 ID 获取数据帧的子集。在 R 中,这可以通过以下方式实现:

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

在闪亮的用户界面中。R我有:

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

服务器。R我有:

output$queryTable = renderTable ({
if(is.null(values$data$mat)) return(NULL)
df[c("XLOC_005722", "XLOC_001942", "XLOC_001107"), ]  #hardcoded
})

这是硬编码的。

刚开始闪亮,但不确定应该如何在闪亮中实现这一点。

我认为这符合您的要求。添加全局。R 很有用,因此可以在 UI 的 selectizeInput 中使用数据帧的列名。

全球。R

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

用户界面。R

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

服务器。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)
}
})
})

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

最新更新