gpt4 book ai didi

r - 在 Shiny 的两个 tabPanel 中绘制相同的输出

转载 作者:行者123 更新时间:2023-12-01 01:35:18 48 4
gpt4 key购买 nike

我正在尝试在 Shiny 的 tabBox 内的两个单独的选项卡面板中绘制相同的直方图。我可以在其中一个选项卡中绘制数据,但是当我为另一个选项卡添加代码时,它似乎破坏了应用程序。下面是我正在尝试做的一个例子:

    library(shiny)
library(dplyr)

data(mtcars)

body <- dashboardBody(
fluidRow(
tabBox(
title = "miles per gallon",

id = "tabset1", height = "250px",
tabPanel("Tab1", plotOutput("plot1")),
tabPanel("Tab2", plotOutput("plot1"), "test") # the app 'breaks' when I add in the **plotOutput("plot1")** here... however it works when I remove it
)
)
)

shinyApp(
ui = dashboardPage(
dashboardHeader(title = "Test"),
dashboardSidebar(),
body
),
server = function(input, output) {


output$plot1 <- renderPlot({hist(mtcars$mpg)})

}
)

在这个特定的例子中,我可以像这样在服务器中添加另一行

 output$plot2 <- renderPlot({hist(mtcars$mpg)})

然后调用plot2,但我的实际应用比上面的例子要复杂一些,所以我想在两个选项卡中绘制plot1。

最佳答案

当您创建一个 Shiny 的应用程序时,您正在创建一个 HTML 站点,并且输出位于带有 id 的 div 容器中。所以你在不知道的情况下尝试的是创建两个具有相同 id 的 div 容器。这行不通。有关讨论,请参见此处:Can multiple different HTML elements have the same ID if they're different elements?

你可以做的是将服务器代码包装在一个lapply()函数中并生成两个id:

lapply(1:2, function(nr){
output[[paste0("plot", nr)]] <- renderPlot({hist(mtcars$mpg)})
})

然后调用 plotOutput("plot1")plotOutput("plot2")。还有其他可能只使用一个输出与 conditionalPanels() 组合,但我认为这种方式应该更适合你。

关于r - 在 Shiny 的两个 tabPanel 中绘制相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205137/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com