Анализ данных на основе переменных загруженного файла ИЛИ набора данных по умолчанию в R Shiny - PullRequest
0 голосов
/ 08 февраля 2019

Я хотел бы создать приложение Shiny, в котором пользователь может загружать свои собственные файлы rda / rds или использовать наборы данных по умолчанию.Варианты выбора входа будут меняться в зависимости от того, хотят ли они использовать свои исходные данные или данные по умолчанию.

Например, в моем коде я хочу, чтобы варианты для mtbSelection менялись в зависимости от значений на conditionalPanel.

У меня проблемы с пониманием того, как загрузить файл .rda / .rds в функцию сервера, и я не уверен, почему updateSelectInput не работает.Любая помощь будет оценена!

library(shiny)
library(shinythemes)

ui <- fluidPage(
  theme = shinytheme("paper"),
  checkboxInput("default_data", "Would you like to use default datasets?", value = TRUE),

  conditionalPanel(condition = "input.default_data == true",
                   selectizeInput(inputId = "mtb2", label = "Please choose a metabolomic dataset",
                                  choices = "mtb2",
                                  options = list(placeholder = 'Select a default metabolomic file below',onInitialize = I('function() { this.setValue(""); }'))
                   ),
                   selectizeInput(inputId = "geneExp2", label = "Please choose a transcriptome dataset",
                                  choices = "geneExp2",
                                  options = list(placeholder = 'Select a default transcriptome file below',onInitialize = I('function() { this.setValue(""); }'))
                   )
  ),
  conditionalPanel(condition = "input.default_data == false",
                   fileInput(inputId = "file_mtb", label = "Please upload a metabolomic dataset",
                             multiple = FALSE, accept = c('.RData', '.rda', '.rds'), placeholder = "  No file selected"
                   ),
                   fileInput(inputId = "file_ge", label = "Please upload a transcriptome dataset",
                             multiple = FALSE, accept = c('.RData', '.rda', '.rds'), placeholder = "  No file selected"
                   )


  ),

  selectInput("mtbSelection", strong("Select a metabolite of interest"), choices = "",
              multiple = FALSE)

)

server <- function(input, output, session) {

  UploadMtbData <- reactive({
    infile <- input$file_mtb
    if (is.null(infile)){
      return()
    } else {
      return(readRDS(infile$datapath))
    }
  })

  observe({
    if (is.null(input$file_mtb)) #makes sure that the uploaded file is not null
      return()

    obj<-switch(input$file_mtb,
                 mtb2,
                 infile)

    var.opts <- colnames(obj)

    updateSelectInput(session, "mtbSelction", choices = var.opts)
  })



}

shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 08 февраля 2019

Обновление: я обновил оператор if.И очень важно, что updateSelectInput не работал из-за опечатки!Вот код для генерации фиктивных данных, которые я использовал:

data(cars)
saveRDS(cars,'cars.rds')

Я предлагаю следующий код сервера (остальные могут остаться без изменений):

server <- function(input, output, session) {

# reactive data
  mtbData <- reactive({
    # read default or user data
    if(input$default_data == TRUE || is.null(input$file_mtb)){
      # load your data here
    } else {
      # get input
      infile <- input$file_mtb
      # read and return
      readRDS(infile$datapath) 
    }
  })

  # update observer
  observe({
    # update
    updateSelectInput(session, "mtbSelection", choices = colnames(mtbData()))
  })

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...