R:Rhansontable不显示过滤后的反应成分

时间:2019-02-11 11:07:05

标签: r shiny rhandsontable

我有一个Shiny应用程序,它显示可编辑的rhandsontable,并在绘图中显示表格输出。只要我向rhandsontable发送一个“完整的”反应性数据帧,一切都很好,但是当我想用selectInput值对显示的内容进行子集化时,该应用程序将显示以下错误消息:

  
    

http://127.0.0.1:5362

         

警告:矩阵中的错误:“数据”必须是向量类型,为“ NULL”

         

堆栈跟踪(从最里面开始):         60:矩阵         59:         58:通话         57:hot_to_r         56:observerFunc [P:/ Mango Engagement / 00-CLAIMS / 00-shiny-SPRINT3 / 20190211-shiny-broken-reactive-values-editable-table-plot.R#57]          1:runApp

         

错误:[on_request_read]连接被同级重置

  

关于如何进行操作的任何想法?在下面的脚本中,您可以通过注释/取消注释react_df()的定义来重现该问题。

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

#### based on the SO code found here: https://stackoverflow.com/a/52607643/6327771

df <- data.frame(country = c(rep('US', 5), rep('UK', 5)),
           date = rep(as.Date(c('2018-01-01', '2018-02-01', '2018-03-01', '2018-04-01', '2018-05-01')), 2),
           val = rep(sample(6:8, size = 5, replace = T), 2))



ui <- fluidPage(
  selectInput("country", "Choose the Country",
              choices = df %>% unique() %>%  pull(country),
              selected = 'US',
              multiple = FALSE),
  rHandsontableOutput('table'), # editable table with bar heights
  plotOutput('plot')#, # bar plot that takes values from the drop-down menu and the editable table 
)


server <- function(input,output,session)({

#### REACTIVE INPUT: SUBSETTED VERSUS COMPLETE DATA ####  
## subsetted version of react_df() 

#  react_df <- reactive({
#    df %>%
#      filter(country == input$country)
#  })

## complete version of react_df()   
  react_df <- reactive({df})

  values <- reactiveValues(data = NULL)


  observe({
    values$data <-react_df()
  })


  #observe the  table
  observe({
    if(!is.null(input$table))
      values$data <- hot_to_r(input$table)
  })

  # output the table 
  output$table <- renderRHandsontable({
    req(values$data)
    rhandsontable(values$data)
  })


# update the plot  
  output$plot <- renderPlot({
    req(values$data)
    ggplot(values$data, aes(date, val)) +
      geom_line() +
      geom_point()

  })

})

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

正如@ A.Suliman指出的,此问题是引起的,但适用于旧的R包。使用更新的程序包运行的相同代码未返回任何错误。感谢您的帮助!