【问题标题】:How to dynamically assign the name of a reactive object?如何动态分配反应对象的名称?
【发布时间】:2020-01-06 15:33:43
【问题描述】:

我有一个应用程序可以生成几个表,它们的 id 仅相差一个后缀数字。虽然我目前复制并粘贴大部分代码来创建所有这些面板,但如下所示:

  #  Panel 1
  panel1Data <- reactive({panelData(1, input$hsyear1, input$panel1range)})

  output$panel1plot <- renderPlot({panelPlot(panel1Data(), 1)})

  #  Panel 2
  panel2Data <- reactive({panelData(2, input$hsyear2, input$panel2range)})

  output$panel2plot <- renderPlot({panelPlot(panel2Data(), 2)})

我想使用lapply 或任何其他函数来使其更具动态性,这样我就可以使我的代码更容易阅读。我该怎么做呢?

【问题讨论】:

  • 您很可能希望使用reactiveValues() 列表,而不是一堆单独的reactiveVal 对象。但是,如果您提供了可用于测试的最小 reproducible example,则更容易确认。
  • 同意@MrFlick。您可以使用字符变量将名称动态分配给 reactiveValues 列表。此外,这似乎是一个利用闪亮模块的好机会。

标签: r shiny lapply rlang


【解决方案1】:

您没有提供可重现的示例,因此我无法测试。我会这样做:

panelsData <- lapply(1:2, function(i){
  hsyear <- paste0("hsyear", i)
  panelrange <- sprintf("panel%drange", i)
  reactive({
    panelData(i, input[[hsyear]], input[[panelrange]])
  })
})

lapply(1:2, function(i){
  id <- sprintf("panel%dplot", i)
  output[[id]] <- renderPlot({
    panelPlot(panelsData[[i]](), i)
  })
})

如果这不起作用,请提供一个可重现的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2018-03-24
    • 2014-03-07
    • 2016-08-03
    • 1970-01-01
    • 2021-03-13
    • 2023-03-27
    相关资源
    最近更新 更多