Использование Shiny, запрос и отображение данных - PullRequest
0 голосов
/ 26 июня 2019

Проблемы У меня возникла пара проблем с (a) Отображение данных в интерактивном режиме с помощью Rshiny (2) Запрос результатов из mongodb Query.Мои коды приведены ниже, кажется, что они работают как независимые части, но не объединяются хорошо.

Для Задачи (a) я ранее использовал значения Output $, и это, похоже, работает.Закомментировано в коде Для проблемы (b) я использовал пакет mongolite R для запроса данных и реактивный для передачи запроса.

library(data.table)
library(tidyverse)
library(shiny)
library(mongolite)

epi <- read.csv("./data/Genes.csv", header=T)
label = "gene"
epilist <- data.frame(epi$gene, label)
names(epilist) = c("value", "label")

df <- read.table("./data/CCLE_meta.csv", header=TRUE, sep=",", na.strings="NA", fill=TRUE)
dd <- data.frame((df$Tissue))
names(dd) = "Tissue"
cell1= dd %>% add_row(Tissue = "all")
label = "Tissue"
cell <- data.frame(cell1$Tissue, label)
names(cell) = c("value", "label")

ui <- fluidPage(

  titlePanel("Dependencies for EpiGenes"),

  sidebarLayout(
    sidebarPanel(
      selectizeInput("epiInput","gene", choices=NULL, selected=NULL),
      selectizeInput("cellInput","Tissue", choices=NULL, selected=NULL),
      textOutput("values")
    ),

    mainPanel(
      tabsetPanel(type = "tabs",
        tabPanel("Fusions", tableOutput("table")),
        tabPanel("CancerGD", tableOutput("table")),
        tabPanel("CCLEmeta", tableOutput("table")),
        tabPanel("EpiGenes", tableOutput("table"))
      )
    )
  )
)


server <- function(input, output, session) {
  updateSelectizeInput(session, 'epiInput',
                       choices = epilist$value,
                       server = TRUE)
  updateSelectizeInput(session, 'cellInput',
                       choices = cell$value,
                       server = TRUE)

  #output$values <- renderText({
  #  paste(input$epiInput, input$cellInput)
  #})


  ### Looking into Epi Genes

  con1 <- mongo(collection = "Genes", db = "discovery", url = "mongodb://127.0.0.1:27017")
  data.for.table1 <- reactive({
    query.foo <- paste0('{"gene" : epiInput}')
    con1$find(query = query.foo, limit = 100)
  })
  output$EpiGenes <- renderDataTable({
    data.for.table1()
  })

  ### Looking into Cell Line Metadata

  con0 <- mongo(collection = "CellLine", db = "discovery", url = "mongodb://127.0.0.1:27017")
  data.for.table0 <- reactive({
    query.foo <- paste0('{"Tissue" : input$cellInput}')
    con0$find(query = query.foo, limit = 100)
  })
  output$CCLEmeta <- renderDataTable({
    data.for.table0()
  })

  ### Looking into fusion genes
  con2 <- mongo(collection = "fusions", db = "discovery", url = "mongodb://127.0.0.1:27017")
  data.for.table2 <- reactive({
    query.foo <- paste0('{"gene" : input$epiInput}')
    con2$find(query = query.foo, limit = 100)
  })
  output$Fusions <- renderDataTable({
    data.for.table2()
  })

  ### Looking into CancerGD

  con3 <- mongo(collection = "CancerGD", db = "discovery", url = "mongodb://127.0.0.1:27017")
  data.for.table3 <- reactive({
    query.foo <- paste0('{"gene" : input$epiInput}')
    con3$find(query = query.foo, limit = 100)
  })
  output$CancerGD <- renderDataTable({
    data.for.table3()
  })

  # Automatically disconnect when connection is removed
  rm(con0)
  rm(con1)
  rm(con2)
  rm(con3)
  gc()

}
shinyApp(ui, server)

Первый ожидаемый результат - это приложение, позволяющее пользователям делать запросы из списка генов и тканей.Вторым ожидаемым результатом является отображение результатов запроса на соответствующей вкладке (из 4 коллекций из обнаружения базы данных).Текущий результат - приложение без возможности запроса.

1 Ответ

0 голосов
/ 27 июня 2019

Я смог внести некоторые изменения в код, и ошибка / зависание, которое я теперь получаю, составляет

"Импортировано 0 записей. Упрощение в фрейм данных ..."

Любое понимание ошибки будет полезно.

Улучшения кодов заключаются в следующем;

(a) Панель боковой панели

selectizeInput("epiInput","gene", choices=gg),
selectizeInput("cellInput","Tissue", choices=cc),

(b) Подключение к MongoDB

con2 <- mongo(collection="fusions", db="discovery", url="mongodb://localhost:27017", verbose = TRUE)
  fusResults <- reactive({
      region <- list(gene = input$epiInput)
      query.foo <- paste0('{ "gene" : "',region , '"}')
      fs <- con2$find(query = query.foo, limit = 100)
      return(fs)
  })

 output$fus_results <- renderDataTable({
    fusResults()
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...