我正在构建一个具有光泽的交互式应用程序。我正在使用功能pickerinput来选择一些过滤以应用于必须由用户上传的数据框。无论如何,是否有将数据框的一列的唯一值传递给该函数的参数“ choices”?
要上传的数据框:
SNP | 3 | G
这是我编写的代码:
library(shiny)
library(DT) # for data tables
library(dplyr)
library(shinyWidgets)
ui <- fluidPage(
sidebarPanel(
pickerInput("X", "X",
choices = unique(df$X) ),
mainPanel(
dataTableOutput("contents")
)
))
server <- function(input, output) {
output$contents <- renderDT({
req(input$file1)
df <- read.delim(input$file1$datapath,
header = TRUE,
sep = '\t')
df <- df %>%
filter( X == input$X)
return(df)
})
}
shinyApp(ui, server)
因此,在上表之后,用户将拥有一个选择框,其选择将是“ X”列的行名称,即:SNP,del,ins。
我已经运行了这段代码,但自己写了选择(choices = c('SNP','del','ins')),但是我不知道如何使程序从上载的表中获取选择
非常感谢
答案 0 :(得分:1)
updatePickerInput
提供了一种实现此目的的方法:
library(shiny)
library(DT)
library(dplyr)
library(shinyWidgets)
fileData <-
c(
"X\tY\tZ",
"SNP\t1\tA",
"del\t6\tT",
"SNP\t5\tG",
"del\t3\tG",
"ins\t5\tA",
"del\t8\tT",
"SNP\t3\tG"
)
if(!file.exists("test_file.tsv")){
writeLines(fileData, "test_file.tsv")
}
ui <-
fluidPage(sidebarPanel(
fileInput(
"file1",
"Choose TSV File",
accept = c("text/tab-separated-values,text/plain", ".tsv")
),
pickerInput("X", "X", choices = NULL)
),
mainPanel(dataTableOutput("contents")))
server <- function(input, output, session) {
DF <- reactive({
req(input$file1)
DF <- read.delim(input$file1$datapath,
header = TRUE,
sep = '\t')
})
observeEvent(DF(), {
req(DF())
updatePickerInput(session, inputId = "X", choices = unique(DF()$X))
})
filtered_DF <- reactive({
req(input$X)
DF() %>% filter(X == input$X)
})
output$contents <- renderDT({
filtered_DF()
})
}
shinyApp(ui, server)