Можно ли использовать уникальные значения столбца данных, который еще не загружен, в качестве «вариантов выбора» в функции pickerInput из глянцевого виджета? - PullRequest
0 голосов
/ 20 мая 2019

Я создаю интерактивное приложение с блестящей.Я использую функцию pickerinput, чтобы выбрать некоторую фильтрацию для применения к кадру данных, который должен быть загружен пользователем.Есть ли способ передать уникальные значения столбца кадра данных в аргумент 'выборы' этой функции?

Фрейм данных для загрузки:

X |Y |Z

SNP |1 |A

del |6 |T

SNP |5 |G

del |3 |G

ins |5 |A

del |8 |T

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')), но я понятия не имею, как заставить программу получить выбор иззагруженный стол.

Большое спасибо

1 Ответ

1 голос
/ 20 мая 2019

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)
...