首页 > 解决方案 > 有没有办法为 plotyoutput 创建循环

问题描述

我有一个动态条件,我需要动态创建流体行

cname <- c("A","B")
lapply(cname, function(name){paste0("column(6,",paste0("plotlyOutput(","'",name,"'","))"))})

[[1]]
[1] "column(6,plotlyOutput('A'))"

[[2]]
[1] "column(6,plotlyOutput('B'))"

预期产出

我需要将此处创建的 Fluidrows 合并为开头

fluidRow(column(6,plotlyOutput("A")),
column(6,plotlyOutput("B")))

标签: rshiny

解决方案


也许您正在寻找purrr::exec与运算符配对以!!!将列表拼接为参数。

示例应用程序:

library(shiny)
library(plotly)
library(tidyverse)



cname <- c("A", "B")

plotly_outputs <- map(cname, ~ column(width = 6, plotlyOutput(outputId = .)))

library(shiny)

ui <- fluidPage(
  exec("fluidPage", !!!plotly_outputs)
)

server <- function(input, output, session) {
  walk(cname, ~ {
    output[[.]] <<- renderPlotly({
      plt <- mtcars %>% ggplot(aes(x = mpg, y = hp)) +
        geom_point()
      ggplotly(plt)
    })
  })
}

shinyApp(ui, server)

推荐阅读