R uiOutput以显示来自另一个uiOutput的输入值的标签
标题可能很混乱,但我将在下面详细解释我的问题。我使用《掌握光泽》一书第10节“动态用户界面”作为指导。R中使用的库是R uiOutput以显示来自另一个uiOutput的输入值的标签,r,shiny,dynamic-ui,uioutput,R,Shiny,Dynamic Ui,Uioutput,标题可能很混乱,但我将在下面详细解释我的问题。我使用《掌握光泽》一书第10节“动态用户界面”作为指导。R中使用的库是 library(shiny) library(tidyverse) library(purrr) 我有一个数字输入,标记为所需的模式/子专业数量 我有一个名为模态的uiOutput作为响应,如果数字输入的输入发生变化,它可以有更多模态。如下图所示,如果数字变为2,则将有2个模式框,而不是1个 下面列出了上述操作的代码 # UI numericInput("No_m
library(shiny)
library(tidyverse)
library(purrr)
我有一个数字输入,标记为所需的模式/子专业数量
我有一个名为模态的uiOutput作为响应,如果数字输入的输入发生变化,它可以有更多模态。如下图所示,如果数字变为2,则将有2个模式框,而不是1个 下面列出了上述操作的代码
# UI
numericInput("No_modalities", label = "Number of modalities/
subspecialties required",
value = 1, min = 1, max = 100, step = 1)
uiOutput("modality")
# Server
modality_names <- reactive(paste0("Modality ", seq_len(input$No_modalities)))
output$modality <- renderUI({
map(modality_names(), ~ textInput(.x, label = paste(.x," Name"),
value = isolate(input[[.x]])))
})
可复制代码如下所示
library(shiny)
library(tidyverse)
library(purrr)
ui <- fluidPage(
fluidRow(
numericInput("No_modalities", label = "Number of modalities/
subspecialties required",
value = 1, min = 1, max = 100, step = 1)),
fluidRow(
uiOutput("modality")
),
fluidRow(
uiOutput("ui_modality_minutes")
)
)
server <- function(input, output, session) {
modality_names <- reactive(paste0("Modality ", seq_len(input$No_modalities)))
modality_minutes <- reactive(paste0("Modality minutes ",
seq_len(input$No_modalities)))
output$modality <- renderUI({
map(modality_names(), ~ textInput(.x, label = paste(.x," Name"),
value = isolate(input[[.x]])))
})
output$ui_modality_minutes <- renderUI({
map(modality_minutes(), ~ numericInput(.x,
label = map(modality_names(),~input[[.x]]),
value = isolate(input[[.x]])))
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(tidyverse)
图书馆(purrr)
ui您的最后一个map
函数需要是map2
,以同时处理inputId
和标签的生成。为了获得标签的字符向量,我将map\u chr
嵌套到map2
函数中:
library(purrr)
library(shiny)
ui <- fluidPage(
numericInput("No_modalities", label = "Number of modalities/
subspecialties required",
value = 1, min = 1, max = 100, step = 1),
uiOutput("modality"),
uiOutput("ui_modality_minutes")
)
server <- function(input, output, session) {
modality_names <- reactive(paste0("Modality ", seq_len(input$No_modalities)))
output$modality <- renderUI({
map(modality_names(), ~ textInput(.x, label = paste(.x," Name"),
value = isolate(input[[.x]])))
})
modality_minutes <- reactive(paste0("Modality minutes ",
seq_len(input$No_modalities)))
output$ui_modality_minutes <- renderUI({
map2(modality_minutes(), map_chr(modality_names(),~input[[.x]]%||% ""), ~ numericInput(.x,
label = .y,
value = isolate(input[[.x]])))
})
}
shinyApp(ui, server)
库(purrr)
图书馆(闪亮)
ui您的最后一个map
函数需要是map2
,以同时处理inputId
和标签的生成。为了获得标签的字符向量,我将map\u chr
嵌套到map2
函数中:
library(purrr)
library(shiny)
ui <- fluidPage(
numericInput("No_modalities", label = "Number of modalities/
subspecialties required",
value = 1, min = 1, max = 100, step = 1),
uiOutput("modality"),
uiOutput("ui_modality_minutes")
)
server <- function(input, output, session) {
modality_names <- reactive(paste0("Modality ", seq_len(input$No_modalities)))
output$modality <- renderUI({
map(modality_names(), ~ textInput(.x, label = paste(.x," Name"),
value = isolate(input[[.x]])))
})
modality_minutes <- reactive(paste0("Modality minutes ",
seq_len(input$No_modalities)))
output$ui_modality_minutes <- renderUI({
map2(modality_minutes(), map_chr(modality_names(),~input[[.x]]%||% ""), ~ numericInput(.x,
label = .y,
value = isolate(input[[.x]])))
})
}
shinyApp(ui, server)
库(purrr)
图书馆(闪亮)
非常感谢!我已经对它进行了测试,它是有效的,我还研究了如何消除错误,就是添加%| |%”。请参阅:map_chr(模态名称(),~input[.x]%| |%“”)。你能编辑你的答案以包含这段代码吗?这是一个聪明的解决方案,我已经编辑过:)非常感谢!我已经对它进行了测试,它是有效的,我还研究了如何消除错误,就是添加%| |%”。请参阅:map_chr(模态名称(),~input[.x]%| |%“”)。你能编辑你的答案以包含这段代码吗?这是一个聪明的解决方案,我已经编辑过:)