タイトルは非常に紛らわしいかもしれませんが、以下で私の問題を詳細に説明しようとします. 私は本「光沢をマスターする」セクション 10、「動的 UI」をガイダンスとして使用します。Rで使われているライブラリは
library(shiny)
library(tidyverse)
library(purrr)
というラベルの付いたnumericInputがありNumber of modalities/ subspecialties required
ます。numericInputからの入力が変更された場合に、より多くのモダリティを持つことができる応答で
呼び出されるuiOutput があります。modality
数が 2 に変更された場合、下の図を参照してください。1 つではなく 2 つのモダリティ ボックスがあります。
上記が機能するコードを以下に示します
# 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]])))
})
ここで、別の uiOutput に Modality Name 内の入力としてラベルを持たせたいと考えています。これが私が問題にどのようにアプローチしたかです。という別の uiOutput を作成しましui_modality_minutes
たが、ラベルには からの入力のラベルを使用したいと考えていますmodality_names()
。私の目的をよりよく理解するために、下の写真をご覧ください。input1model 1
を最初のラベルにし、input2model 2
を 2 番目のラベルにしたいのですが、私のコードではモデル 1 とモデル 2 を別々ではなく一緒に追加します。
# UI
uiOutput("ui_modality_minutes")
# Server
modality_minutes <- reactive(paste0("Modality minutes ",
seq_len(input$No_modalities)))
output$ui_modality_minutes <- renderUI({
map(modality_minutes(), ~ numericInput(.x,
label = map(modality_names(),~input[[.x]]),
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)