如何动态分配反应对象的名称?
How to dynamically assign the name of a reactive object?
我有一个应用程序可以生成多个表,这些表的 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
或任何其他函数来使其更具动态性,这样我的代码就可以更轻松一些。我该怎么做?
您没有提供可重现的示例,因此我无法进行测试。我会做这样的事情:
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)
})
})
如果不起作用,请提供可重现的示例。
我有一个应用程序可以生成多个表,这些表的 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
或任何其他函数来使其更具动态性,这样我的代码就可以更轻松一些。我该怎么做?
您没有提供可重现的示例,因此我无法进行测试。我会做这样的事情:
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)
})
})
如果不起作用,请提供可重现的示例。