Выберите строку (и) из сводной таблицы данных и используйте значение ячейки для поднабора исходных данных и создания новой таблицы данных в Shiny

Я создал сводную таблицу из набора данных радужной оболочки, и когда я выбираю любую строку из этого datatable Я хочу использовать выбранную строку для подмножества основных данных, а затем опубликовать эти данные в виде datatable,

    library(shiny)
    library(dplyr)
    library(DT)


    setwd("C:/Users/143812/Documents/Shiny")

    df <- iris
    vchoices <- colnames(df)
    ui <- fluidPage(h1("PLOT FOR NOW"),
                    sidebarLayout(sidebarPanel(
                      fluidPage(
                        column(10,selectInput(inputId = "group",label = "Group BY",choices = vchoices)),
                        column(10,selectInput(inputId = "operator",label = "OPERATOR",choices = c("sum","mean"),selected = "sum")),
                        column(10,uiOutput("operateUI"))
                      )

                    ),
                    mainPanel(dataTableOutput("summarytable"),dataTableOutput("drilldata")))
    )

    server <- function(input,output,session){
      df1 <- reactive({df %>% group_by_(input$group) %>% summarise(Result = get(input$operator)(get(input$operate)))})

      #input for integer and numeric columns
      a <- (sapply(df,class))
      lv <- a=="integer" | a=="numeric" 
      b <- a[lv]
      numchoice <- names(b)
      output$operateUI <- renderUI({
        selectInput(inputId = "operate",label = input$operator,choices = numchoice)
      })

      #publish summary table to select output from by name summary table          
      output$summarytable <- DT::renderDataTable(df1())

      #create data for drill report          
      drilldata <- reactive({
                            shiny::validate(need(length(input$summarytable_rows_selected) > 0, "Select Rows to drill down")
                                            )
                            selected_column <-  df1[as.integer(input$summarytable_rows_selected),]$get(input$group)

                            df[df$get(input$group) %in% selected_column, ]

      })
      output$drilldata <- DT::renderDataTable(drilldata())


      #function end  
    }

    shinyApp(ui,server)

Этот код дает мне ошибку: объект типа "замыкание" не может быть подмножеством. Я прошу пользователя выбрать столбец для группировки по группам и выполняемой операции, либо сумму, либо среднее значение, а также столбец, для которого должна быть выполнена операция. Этот метод, кажется, работает в этом коде с помощью mlegge, где значения предопределены и не запрашиваются пользователем. ссылка на вопрос

1 ответ

Решение

Ваше сообщение об ошибке, скорее всего, исходит из этой строки

selected_column <-  df1[as.integer(input$summarytable_rows_selected),]$get(input$group)

где вы забыли скобки функций () после df1. Для меня get() не работает, поэтому я использовал [[ вместо

попробуй с

selected_column <-  df1()[as.integer(input$summarytable_rows_selected),][[input$group]]

У меня тоже были проблемы с этой линией

df[df$get(input$group) %in% selected_column, ]

и изменил его на

df[df[[input$group]] %in% selected_column, ]

и это работало на меня

Другие вопросы по тегам