在Shiny中渲染UI元素的适当占位符是什么?我希望部分UI基于global.R中确定的条件进行渲染,因此不是renderUI
。我认为使用空列表或标签列表可能会起作用,但它似乎无法完成这项工作。
这是一个例子,当init
为TRUE时,应该渲染第一个框,当init
为FALSE时,只应渲染第二个框。第二部分并没有正常运作。
library(shiny)
library(shinydashboard)
## Globally set
init <- FALSE # sometimes TRUE
ui <- tagList(
fluidPage(
tabBox(
## What is the appropriate placeholder here?
if (init) {
tabPanel(
title='Bad box',
box(selectInput('id', 'Appear if TRUE', 1:10))
)
} else
list(),
tabPanel(
title='Good box',
box(selectInput('id1', 'Always Apper', letters))
)
)
)
)
server <- function(session, input, output) { }
shinyApp(ui, server)
答案 0 :(得分:1)
这样的事情会起作用吗?我创建了一个包含两个框的列表,然后在do.call
中对其进行子集,以根据init
值添加一个或两个框。
library(shiny)
library(shinydashboard)
## Globally set
init <- FALSE # sometimes TRUE
box_element <- list(
tabPanel(
title='Bad box',
box(selectInput('id', 'Appear if TRUE', 1:10))),
tabPanel(
title='Good box',
box(selectInput('id1', 'Always Apper', letters))
))
ui <- tagList(
fluidPage(
do.call(tabBox,box_element[(2-init):2])
)
)
server <- function(session, input, output) { }
shinyApp(ui, server)
答案 1 :(得分:0)
包shinyjs具有根据特定条件显示/隐藏元素的功能,并且该条件可以是无效值。当您想在服务器而不是UI中隐藏/显示时,它完全用于此类情况。这是一个简单的例子,只要数字输入中的数字是奇数,它就会显示文本输入。你当然可以将这个条件改为你想要的任何东西。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
numericInput("num", "Show a text input when the number is odd", 0),
hidden(textInput("text", "Text"))
)
server <- function(session, input, output) {
observe({
toggle(id = "text", condition = (input$num %% 2 == 1))
})
}
shinyApp(ui, server)