r - DT:: Datatable 在闪亮的应用程序中显示两次
问题描述
我有一个shiny
应用程序,dataTable
当用户从侧边栏中的菜单中选择Sector
A时,会显示 a 。radioButtons
问题是它显示了两次。我也在浏览器模式下检查过。为什么会发生这种情况我在这里显示整个应用程序,因为它可能是由if
应用程序的逻辑引起的。renderTable()
工作正常,所以我想有一个问题DT
#ui.r
library(shiny)
library(shinythemes)
library(DT)
ui <- fluidPage(
theme=shinytheme("slate") ,
# App title ----
titlePanel("Tabsets"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar panel for inputs ----
sidebarPanel(
uiOutput("rad")
),
# Main panel for displaying outputs ----
mainPanel(
uiOutput("tabers"),
DT::dataTableOutput("table")
)
)
)
#server.r
library(shiny)
library(DT)
server = function(input, output) {
output$rad<-renderUI({
radioButtons("radio", label = "",
choices = list("Home"=1,"About" = 2, "Sector A" = 3, "Sector B" = 4,"Sector C" = 5),
selected = 1)
#selected = character(0))
})
output$tabers<-renderUI({
if(is.null(input$radio)) {
tabsetPanel(
id="tabF",
type = "tabs",
tabPanel("Global"),
tabPanel("Performance")
)
}
else if(input$radio==3){
tabsetPanel(
id="tabC",
type = "tabs",
tabPanel("Constituents",
output$table <- renderDataTable({
mtcars
})
),
tabPanel("Clusters" ),
tabPanel("Index")
)
}
else if(input$radio==4){
tabsetPanel(
id="tabD",
type = "tabs",
tabPanel("Constituents"
),
tabPanel("Clusters" ),
tabPanel("Index")
)
}
else if(input$radio==5){
tabsetPanel(
id="tabE",
type = "tabs",
tabPanel("Constituents"
),
tabPanel("Clusters" ),
tabPanel("Index")
)
}
else if(input$radio==2){
}
# Left last else in here but should not get called as is
else if(input$radio==1){
tabsetPanel(
id="tabA",
type = "tabs",
tabPanel("Global"),
tabPanel("Performance" )
)
}
})
}
解决方案
看起来renderTable
做同样的事情。出于某种原因,输出renderDataTable({mtcars})
显示两次,第一次到uiOutput
,第二次到dataTableOutput()
(都在 中mainPanel
)。注释该行dataTableOutput("table")
可修复该行为,因为它仅显示一次表格。有趣的是,像这样删除分配:
else if(input$radio==3){
tabsetPanel(
id="tabC",
type = "tabs",
tabPanel("Constituents",
renderDataTable({
mtcars
})
),
tabPanel("Clusters" ),
tabPanel("Index")
)
}
也渲染一次表格。所以它看起来像 inside renderUI
,renderDataTable
只是创建输出而不需要dataTableOutput
在 UI 中。
这似乎允许(无论好坏)轻松地在不同的选项卡中呈现不同的表格,而无需在 UI 中提供相应的输出条目。
else if(input$radio==3){
tabsetPanel(
id="tabC",
type = "tabs",
tabPanel("Constituents",
renderDataTable({
mtcars
})
),
tabPanel("Clusters" ),
tabPanel("Index")
)
}
else if(input$radio==4){
tabsetPanel(
id="tabD",
type = "tabs",
tabPanel("Constituents",
renderDataTable({
iris
})
),
tabPanel("Clusters" ),
tabPanel("Index")
)
}
推荐阅读
- css - 使用 CSS 依次为多个 DIV 设置正向和反向动画
- r - 将 RGB 颜色转换为 DMC 牙线颜色
- python - 如何用熊猫转置完整文件
- c# - 为什么找不到我的 ResourceDictionary xaml 文件?
- time-complexity - 运行时间复杂度为 n+ (n-1) + (n-2) 。. . . (2) + (1)
- python - 如何在python中同时以读写方式打开腌制文件?
- javascript - D3在文本中动态加粗单词
- r - 未使用的参数
- python - 在 jupyter 中解压缩 .gz 扩展文件
- date - Xamarin - 图像保存到画廊没有日期