r - 闪亮:在多个选项卡中重复使用相同的图不起作用
问题描述
我正在尝试创建一个有两个选项卡的闪亮仪表板。
第一个选项卡(称为:)dashboard
显示两个图表,另一个(称为:)widgets
旨在显示第一个选项卡(称为:)的第一个图表,其mpg
下方是 rpivottable。
问题是,当我将图形/可透视表添加到第二个选项卡时,所有图形都消失了。
我认为,当我删除第二个选项卡的内容时,仪表板就会开始显示第一个选项卡的内容。知道为什么会发生以及如何解决吗?
示例代码:
library(shiny)
library(shinydashboard)
library(rhandsontable)
library(writexl)
library(readxl)
library(stringr)
library(ggplot2)
library(rpivotTable)
ui <- dashboardPage(skin = 'green',
dashboardHeader( title = "Test", titleWidth = 280),
dashboardSidebar(width = 280,
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Pivot", tabName = "widgets", icon = icon("th"))
)),
dashboardBody(
tabItems(
# First tab content
tabItem(tabName = "dashboard",
fluidRow(
column(5, 'Mpg Table') ),
br(),
fluidRow(
rHandsontableOutput ('mpg')),
br(),
fluidRow(
column(5,'mtcars Summary')),
br(),
fluidRow(
column(3),column(6, tableOutput ('mtcars')),column(3))
),
# Second tab content
tabItem(tabName = "widgets",
fluidRow(
column(5,'Mpg table')),
br(),
fluidRow(
rHandsontableOutput ('mpg')),
br(),
fluidRow(
rpivotTableOutput('pivot')
)
)
)
)
)
server <- shinyServer(function(input, output) {
#mpg
output$mpg <- renderRHandsontable ({ rhandsontable({
mpg[1,] })
})
#mtcars
output$mtcars <-renderTable ({
head(mtcars)})
# pivot table
output$pivot <- renderRpivotTable({ rpivotTable(mtcars)})
})
shinyApp(ui, server)
解决方案
您不能重复使用相同的 id 来绑定多个输出(看这里)。因此,一种选择是mpg
在两个选项卡中为表提供一个唯一的 id,并在服务器中两次呈现表输出:output$mpg1 <- output$mpg2 <- renderRHandsontable ({})
。
工作示例:
library(shiny)
library(shinydashboard)
library(rhandsontable)
library(writexl)
library(readxl)
library(stringr)
library(ggplot2)
library(rpivotTable)
ui <- dashboardPage(skin = 'green',
dashboardHeader(title = "Test", titleWidth = 280),
dashboardSidebar(width = 280,
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Pivot", tabName = "widgets", icon = icon("th"))
)),
dashboardBody(
tabItems(
# First tab content
tabItem(tabName = "dashboard",
fluidRow(
column(5, 'Mpg Table') ),
br(),
fluidRow(
rHandsontableOutput ('mpg1')),
br(),
fluidRow(
column(5, 'mtcars Summary')),
br(),
fluidRow(
column(3),
column(6, tableOutput ('mtcars')),column(3))
),
# Second tab content
tabItem(tabName = "widgets",
fluidRow(
column(5,'Mpg table')),
br(),
fluidRow(
rHandsontableOutput ('mpg2')),
br(),
fluidRow(
rpivotTableOutput('pivot'))
)
)
)
)
server <- shinyServer(function(input, output) {
#mpg
output$mpg1 <-output$mpg2<- renderRHandsontable ({
rhandsontable({
mpg[1,]})
})
#mtcars
output$mtcars <-renderTable ({
head(mtcars)})
# pivot table
output$pivot <- renderRpivotTable({rpivotTable(mtcars)})
})
shinyApp(ui, server)
推荐阅读
- java - 如何在数组中使用 sc.nextLine()?我怎样才能消除这个错误?
- swift - 如何在 ObservableObject 中使用 alamofire 调用多个 api:SwiftUI
- spring - Spring Security:如何为同一角色的两个不同用户拥有不同的权限/特权?
- angular - 如何添加 Angular 启用 Cookie 弹出消息框
- android - 如何修复应用栏隐藏我的部分内容
- aem - AEM 继承的组件对话框字段排序
- perforce - Perforce:删除带有空更改列表的 p4 客户端
- numpy - 使用 NaN 图形时遇到问题
- autohotkey - 带有 AltGr 的 Autohotkey 快捷键导致锁定 Ctrl 键
- c# - 我如何管理来自 Client.PostAsync 的异常
?