gpt4 book ai didi

r - R Shiny 仪表板中的动态重复条件面板

转载 作者:行者123 更新时间:2023-12-04 10:37:08 24 4
gpt4 key购买 nike

我正在尝试创建一个动态条件面板。所以我的条件如下:

用户界面输入:

selectInput('inpt','Input Number', seq(1,50,1), selectize = FALSE)

我的条件面板 UI 输入是:
conditionalPanel(
"input.inpt == 2",
box(
selectInput("id1", "Select number",
seq(1, 24, 1), selected = 1),
selectInput("id2", "Select number",
seq(1, 24, 1), selected = 1),
width = 2,
status = "primary"
)
),

conditionalPanel(
"input.inpt == 3",
box(
selectInput("id1", "Select number",
seq(1, 24, 1), selected = 1),
selectInput("id2", "Select number",
seq(1, 24, 1), selected = 1),
selectInput("id3", "Select number",
seq(1, 24, 1), selected = 1),
width = 2,
status = "primary"
)

所以这段代码工作得很好!但问题是它是硬编码的。

因为你可以签到 选择输入 ,我总共有 50 个输入。

根据输入,我有完全相同数量的新 selectInput 面板。

示例:如果选择了 3,我将有 3 个带有 id1、id2、id3 的 selectInput(如上面的代码所示)。
如果选择了 18,我将有 18 个带有 id1、id2、...、id18 的 selectInput。
如果选择了“n”,我将拥有带有 id1、id2、...idn 的“n”selectInput。

我不想写这么多次这段代码。

P.S.:所有更改都在 box() 中进行。我不想创建多个框。

那么如何概括呢?如果我有“n”个输入,如何重复这种方法?

最佳答案

您可以使用 renderUI而不是 conditionalPanel :

output$selectors <- renderUI({
n <- input$inpt
selectors <- lapply(1:n, function(i){
selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
})
do.call(function(...){
box(..., width = 2, status = "primary")
}, selectors)
})

uiOutput("selectors")在你 Shiny 的用户界面中。

小例子:
library(shiny)
library(shinydashboard)

ui <- fluidPage(
br(),
selectInput("inpt", "Input Number", seq(1,50), selectize = FALSE),
br(),
uiOutput("selectors")
)

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

output[["selectors"]] <- renderUI({
n <- input[["inpt"]]
selectors <- lapply(1:n, function(i){
selectInput(paste0("id",i), "Select number", seq(1,24), selected = 1)
})
do.call(function(...){
box(..., width = 2, status = "primary")
}, selectors)
})

}

shinyApp(ui, server)

关于r - R Shiny 仪表板中的动态重复条件面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60117104/

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