闪亮的observeEvent复制输出

Posted

技术标签:

【中文标题】闪亮的observeEvent复制输出【英文标题】:Shiny observeEvent duplicating output 【发布时间】:2018-05-02 02:21:48 【问题描述】:

我正在尝试将 fullcalendar htmlwidget 构建到我闪亮的应用程序中。但是,当我尝试过滤掉底层数据帧(带有事件)并使用 observeEvent 再次输出日历时,日历会在主面板中堆积 - example 。我怎样才能让旧的过滤器版本消失而只保留最新的过滤器版本?

server.R

library(fullcalendar)
library(shiny)


server <- function(input, output) 

  df<-data.frame(title = paste("Event", 1:3),
                 start = c("2017-03-01", "2017-11-15", "2017-11-16"),
                 end = c("2017-03-02", "2017-11-17", "2017-11-16"))

  observeEvent(input$typeInput, 
    df$title<-as.character(df$title)
    df<-df[df$title %in% input$typeInput,]
    f<- fullcalendar(data=df)
    output$calendar<-htmlwidgets::shinyRenderWidget(f, fullcalendarOutput,
    env=parent.frame(), quoted = TRUE)

    #output$calendar<-fullcalendar::renderFullcalendar(f)
  )

ui.R

library(shiny)
library(fullcalendar)

ui <- fluidPage(
  shinyjs::useShinyjs(),

   titlePanel("Test"),

   sidebarLayout(
      sidebarPanel(
        radioButtons("typeInput", "Product type",
                     choices = c("Event 3", "Event 2"),
                     selected = "Event 3")),

      mainPanel(
        fullcalendarOutput("calendar")
      )
   )
)

编辑: 我调查了更多(闪亮形式的网络检查),似乎每个按钮更改都会创建一个新的 html 小部件子项(screenshot)。我认为每次观察到的更改都会重新创建小部件(因为重新运行观察事件),但事实并非如此。这是默认行为还是可能与某些 .js/.css 文件有关?我可以删除小部件并在观察事件部分重新创建它吗?

【问题讨论】:

【参考方案1】:

您想使用reactive 而不是observeEvent。此外,您不需要或不想将输出变量的分配放置在观察或反应函数中。

library(fullcalendar) 
library(shiny) 
server <- function(input, output)  
df <- reactive(
  data.frame(title = paste("Event", 1:3), start = c("2017-03-01", "2017-11-15", "2017-11-16"), end = c("2017-03-02", "2017-11-17", "2017-11-16"))
) 

f <- reactive(
  df <- df()
  df$title<-as.character(df$title) 
  df<-df[df$title %in% input$typeInput,] 
  fullcalendar(data=df)
)
 output$calendar<-htmlwidgets::shinyRenderWidget(f(), fullcalendarOutput, env=parent.frame(), quoted = TRUE) 

output$calendar<-fullcalendar::renderFullcalendar(f()) 
 

【讨论】:

我是用手机写的,所以我现在无法测试代码 您好,谢谢!但是,我尝试了与您建议的格式相同的反应式,但行为是相同的。

以上是关于闪亮的observeEvent复制输出的主要内容,如果未能解决你的问题,请参考以下文章

在 R 闪亮中,如何使“observeEvent”不会被“updateSelectizeInput”的更改触发

应用启动时闪亮的 observeEvent 触发器

R闪亮:observeEvent和eventReactive的不同行为

闪亮的 observeEvent 表达式运行不止一次

使用 purrr::pwalk 从 tibble 创建多个闪亮的 observeEvents

无法使用 observeEvent 和 eventReactive 更新闪亮应用程序中的输入