Выберите строку (и) из сводной таблицы данных и используйте значение ячейки для поднабора исходных данных и создания новой таблицы данных в 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, ]
и это работало на меня