我正在利用future 的promise 更有效地调用我的数据.然而,我发现我的过滤器(通过selecticizeGroupServer调用)不符合future 的promise .

请参阅附件中的最小可复制示例.当我从数据react 式表达式中删除"future\u promise"函数时,过滤器按预期工作.但是,当我使用"future\u promise"时,过滤器模块出现故障.

你能帮我找出我做错了什么吗?

library(shiny)
library(future)
library(promises)
library(shinyWidgets)

plan(multisession)

ui <- fluidPage(

    titlePanel("Example App"),

    sidebarLayout(
        sidebarPanel(),
        mainPanel(
          selectizeGroupUI(
            id = "filters",
            inline = FALSE,
            params = list(
              `mpg` = list(inputId = "mpg", title = "mpg", placeholder = "All"),
              `cyl` = list(inputId = "cyl", title = "cyl", placeholder = "All"),
              `disp` = list(inputId = "disp", title = "disp", placeholder = "All")
            )
          )
        )
    )
)

server <- function(input, output) {

  data <- reactive({
    
    future_promise({

      mtcars

    })

  })

  filter_mod <- reactive({})
  
  observe({
    
    filter_mod <<- callModule(
      module = selectizeGroupServer,
      id = "filters",
      inline = FALSE,
      data = data,
      vars = c("mpg", "cyl", "disp")
    )
    
  })
  
}

# Run the application 
shinyApp(ui = ui, server = server)

推荐答案

我们可以使用初始化的reactiveVal而不是reactive来避免将promise 传递给selectizeGroupServer.

请判断以下内容:

library(shiny)
library(future)
library(promises)
library(shinyWidgets)

plan(multisession)

ui <- fluidPage(
  titlePanel("Example App"),
  sidebarLayout(
    sidebarPanel("The choices will appear after 5 seconds:"),
    mainPanel(
      selectizeGroupUI(
        id = "filters",
        inline = FALSE,
        params = list(
          `mpg` = list(inputId = "mpg", title = "mpg", placeholder = "All"),
          `cyl` = list(inputId = "cyl", title = "cyl", placeholder = "All"),
          `disp` = list(inputId = "disp", title = "disp", placeholder = "All")
        )
      )
    )
  )
)

server <- function(input, output, session) {
  data <- reactiveVal(NULL)
  
  future_promise({
    Sys.sleep(5) # long running task
    mtcars
  }) %...>% data() # assign to reactiveVal "data" once the future_promise is resolved
  
  filter_mod <- callModule(
    module = selectizeGroupServer,
    id = "filters",
    inline = FALSE,
    data = data,
    vars = c("mpg", "cyl", "disp")
  )
}

shinyApp(ui = ui, server = server)

R相关问答推荐

手工PCA上的载体与输出双图不匹配

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

如何在四进制仪表板值框中显示值(使用shiny 的服务器计算)

在R中列表的结尾添加数字载体

在R中使用数据集名称

如何在R中对深度嵌套的tibbles中的非空连续行求和?

R中的时间序列(Ts)函数计数不正确

将多列合并为单独的名称—值对

无法正确设置动态创建的Quarto标注的格式

线性模型斜率在减少原始数据时提供NA

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

函数可以跨多个列搜索多个字符串并创建二进制输出变量

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

如何对r中包含特定(未知)文本的行求和?

如何在PrePlot()中将多个元素设置为斜体

当由base::限定时,`[.factor`引发NextMethod错误

如何使用包metaviz更改标签的小数位数?

附加中缀操作符

组合名称具有模式的列表的元素