繁体   English   中英

R 在编辑 tabitems 后无法在 Shiny DashBoard 上渲染

[英]R fails render on Shiny DashBoard after editing tabitems

library(shiny)
library(tidyverse)
library(leaflet)
library(shinydashboard)
library(RColorBrewer)
library(viridis)
library(shinyWidgets)


ui <- dashboardPage(
    dashboardHeader(title = "Basic dashboard"),
    dashboardSidebar(
        sidebarMenu(
            menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")

                ),
            menuItem("Widgets", tabName = "widgets", icon = icon("th"))
        )
    ),
    dashboardBody(
        # Boxes need to be put in a row (or column)
        tabItems(
            # First tab content
            tabItem(tabName = "dashboard",
                    fluidRow(
                        box(plotOutput("plot1", height = 250)),
                        box(
                            title = "Controls",
                            sliderInput("slider", "Number of observations:", 1, 100, 50)
                        )
                    )
            ),
            # Second tab content
            tabItem(tabName = "widgets",
                    h2("Widgets tab content")
            )
        )
    )
)
server <- function(input, output) {
    set.seed(122)
    histdata <- rnorm(500)
    output$plot1 <- renderPlot({
        data <- histdata[seq_len(input$slider)]
        hist(data)
    })
}
shinyApp(ui, server)

上面的示例,output 在单独单击选项卡仪表板和小部件时呈现。 在仪表板选项卡中,我在正文中有我的 slider 输入。 现在,当我将 slider 更改为将其放在侧边栏时:

library(shiny)
library(tidyverse)
library(leaflet)
library(shinydashboard)
library(RColorBrewer)
library(viridis)
library(shinyWidgets)

ui = dashboardPage(
    dashboardHeader(title =  "Dashboard"),
    dashboardSidebar(
        sidebarMenu(
            id = "sidebarmenu",
            menuItem("menuItem1", 
                     tabName = "tab1",
                     sliderInput("slider", "Number of observations:", 1, 100, 50)
            )
            ,
            menuItem("menuItem2", tabName = "tab2")
        )
    ),
    dashboardBody(
        tabItems(
            tabItem(tabName = "tab1",
                    tableOutput("myTable"),
            ),
            tabItem(tabName = "tab2",
                    h2("Placeholder Cloud"),
                    plotOutput("myPlot"))
        )
    )
)

server <- function(input, output, session) {

    tableData = reactiveVal(data.frame(x = 1:10, y = LETTERS[1:10]))
    plotData = reactiveVal()

    observeEvent(input$sidebarmenu, {

        if(input$sidebarmenu == "tab2"){
            #Code for tab 2
            req(is.null(plotData()))
            print("Tab 2 code is run")
            plotData(runif(100))

        }

    })

    output$myTable = renderTable({
        tableData()
    })

    set.seed(122)
    histdata <- rnorm(500)
    output$myPlot = renderPlot({
        data <- histdata[seq_len(input$slider)]
        hist(data)
    })
}

shinyApp(ui, server)

这里的问题:1)文本占位符云,最初仅在单击选项卡 menuItem2 时呈现,现在与直方图一起呈现,该直方图应该仅在我单击 menuItem1 时呈现

2) 单击 menuItem2 不会执行任何操作。 单击时我希望 tab2 显示一个散点图,如下面的代码块所示。

即,我想“将下面的第三个代码块”集成到上面的第二个代码块中,所以当我运行第二个代码块时,当我单击 tab1 时,slider 的输入出现并呈现直方图。 当我点击tab2时,散点图将被渲染

library(shiny)
library(tidyverse)
library(leaflet)
library(shinydashboard)
library(RColorBrewer)
library(viridis)
library(shinyWidgets)

ui = dashboardPage(
    dashboardHeader(title =  "Dashboard"),
    dashboardSidebar(
        sidebarMenu(
            id = "sidebarmenu",
            menuItem("menuItem1", 
                     tabName = "tab1")
                ,
            menuItem("menuItem2", tabName = "tab2")
        )
    ),
    dashboardBody(
        tabItems(
            tabItem(tabName = "tab1",
                    tableOutput("myTable")),
            tabItem(tabName = "tab2",
                    h2("Placeholder Cloud"),
                    plotOutput("myPlot"))
        )
    )
)

server <- function(input, output, session) {

    tableData = reactiveVal(data.frame(x = 1:10, y = LETTERS[1:10]))
    plotData = reactiveVal()

    observeEvent(input$sidebarmenu, {

        if(input$sidebarmenu == "tab2"){
            #Code for tab 2
            req(is.null(plotData()))
            print("Tab 2 code is run")
            plotData(runif(100))

        }

    })

    output$myTable = renderTable({
        tableData()
    })

    output$myPlot = renderPlot({
        plot(plotData())
    })
}

shinyApp(ui, server)

任何帮助表示赞赏。我是 Shiny 的新手。

对于您的第二部分,您说“单击 menuItem2 不会做任何事情。”...但是您对 menuItem2 没有任何操作,请参阅

menuItem("menuItem2", tabName = "tab2")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM