Как отобразить rhandsontable в Shiny, который зависит от выбора selectInput - PullRequest
0 голосов
/ 14 февраля 2020

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

Затем я хочу отобразить сводную таблицу, которая содержит сводку введенных значений.

Когда я запускаю приведенный ниже код, я получаю следующую ошибку:

Ошибка в .getReactiveEnvironment () $ currentContext (): Операция не разрешена без активного реактивного контекста. (Вы пытались сделать что-то, что можно сделать только из реактивного выражения или наблюдателя.)

library(shiny)
library(rhandsontable)
library(dplyr)


ui <- fluidPage(
  mainPanel(
    selectInput("section", "Section", choices = c("A","B","C"), multiple = TRUE),
    rHandsontableOutput('table')
  )
)

server = function(input, output, session) {

  SectionList <- input$section

  Section <- eventReactive(input$section, {
    section_table <- data.frame(Section = SectionList, input1 = 0, input2 = 0)
    return(section_table)
  })

  output$table <- renderRHandsontable({
    if(!is.null(input$table)){
      DF = hot_to_r(input$table)
    } else {
      DF = data.frame(Section = "A", input1 = 0, input2 = 0)
    }
    rhandsontable(DF) %>%
      hot_col(col = "input1") %>%
      hot_col(col = "input2")
  })

  results_summary <- eventReactive(input$table, {
    DF = output$table
    summary <- DF %>% group_by(Section) %>%
      summarise(input1 = mean(input1),
                input2 = mean(input2))
  })

  output$results <- renderTable({
    results_summary()
  })

}
shinyApp(ui, server)

1 Ответ

1 голос
/ 14 февраля 2020

Я не до конца понял, что вы хотите сделать, но ошибка возникает из-за строки:

SectionList <- input$section

эта строка должна go к реактивная среда. Если вы измените это на, например,

Section <- eventReactive(input$section, { SectionList <- input$section section_table <- data.frame(Section = SectionList, input1 = 0, input2 = 0) return(section_table) })

, ошибка исчезнет. Надеюсь, это поможет!

...