Rshiny извлекает данные из нескольких строк выбранных таблиц данных в пользовательском интерфейсе для использования на стороне сервера - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть базовый c пример ниже, чтобы показать функциональность. Я хочу использовать значения из определенных столбцов выбранных строк для выполнения расчетов. Я могу получить и использовать эти значения, если я выберу ОДИНОЧНУЮ строку. Но я не выяснил, как извлечь эти значения удобным для строк MULTIPLE.

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

Идеи?

UI

shinyUI(tagList(
  useShinyalert(),
  useShinyjs(),


  navbarPage(title = "Tree Visualizer",
             tabsetPanel(
               id = "mainTabset",
               tabPanel(
                 title = "Explore Tree",
                 class = "inputs",
                 column(
                   12,



                   selectInput(
                     inputId = "tree_type",
                     label = "Would you like to view a single sample, or cluster multiple samples?",
                     choices = c(
                       Choose = '',
                       Single = 'single',
                       Multiple = 'multiple'
                     ),
                     selectize = FALSE
                   ),

                   conditionalPanel(
                     condition = "input.tree_type == 'single'",
                     DT::dataTableOutput("tbl1"),
                     actionButton(
                       "button1",
                       "SUBMIT",
                       style = "background-color:#221B70;
                       color:#E0EB15;
                       border-color:#E61029;
                       border-style:double;
                       border-width:4px;
                       border-radius:50%;
                       font-size:19px;"
                     ),
                     verbatimTextOutput('x4')
                     ),

                   conditionalPanel(
                     condition = "input.tree_type == 'multiple'",
                     DT::dataTableOutput("tbl2"),
                     actionButton(
                       "button2",
                       "SUBMIT",
                       style = "background-color:#221B70;
                       color:#E0EB15;
                       border-color:#E61029;
                       border-style:double;
                       border-width:4px;
                       border-radius:50%;
                       font-size:19px;"
                     ),
                     verbatimTextOutput('x5')

                     )

                   )

                   )
                     ))
                 ))

SERVER

shinyServer(function(input, output, session) {
  session$onSessionEnded(stopApp)

  output$tbl1 <- DT::renderDataTable({
    mtcars
  }, selection = 'single',
  class = "display nowrap compact",
  filter = "top",
  extensions = 'Scroller')
  output$tbl2 <-
    DT::renderDataTable({
      mtcars
    }, selection = 'multiple',
    class = "display nowrap compact",
    filter = "top",
    extensions = 'Scroller')


  #button1
  observeEvent(input$button1, {
    output$x4 = renderPrint({
      row_count <- input$tbl1_rows_selected
      data <- mtcars[row_count, ]
      id1 <- rownames(data[1,])
      id2 <- data[, 1]
      id3 <- data[, 7]


      cat('\n\nSelected rows:\n\n')
      cat(id1, id2, id3)
    })


  })

  #button2
  observeEvent(input$button2, {
    output$x5 = renderPrint({
      validate(need(
        length(input$tbl2_rows_selected) > 1,
        "Please choose two or more samples."
      ))
      cat('\n\nSelected rows:\n\n')
      cat(input$tbl2_rows_selected, sep = ', ')
      #create dataframe of selected row properties
      #for example if rows 4, 3, and 6 are selected:
      #car name, mpg, qsec
      #Hornet 4 Drive, 21.4, 19.44
      #Datsun 710, 22.8, 18.61
      #Valiant, 18.1, 20.22
    })
  })


})

GLOBAL

suppressWarnings({
  suppressPackageStartupMessages({
    library(shiny)
    library(shinyjs)
    library(tidyverse)
    library(shinyalert)
    library(DT)

  })
})

1 Ответ

0 голосов
/ 03 апреля 2020

Это было намного проще, чем я себе представлял.

#button2
  observeEvent(input$button2, {
    output$x5 = renderPrint({
      validate(need(
        length(input$tbl2_rows_selected) > 1,
        "Please choose two or more samples."
      ))
      cat('\n\nSelected rows:\n\n')
      row_data <- mtcars[input$tbl2_rows_selected,c(1,7)]
      cat(rownames(row_data[1,0]),row_data[1,1],row_data[1,2])

    })
  })
...