0

タイトルは非常に紛らわしいかもしれませんが、以下で私の問題を詳細に説明しようとします. 私は本「光沢をマスターする」セクション 10、「動的 UI」をガイダンスとして使用します。Rで使われているライブラリは

library(shiny)
library(tidyverse)
library(purrr)

というラベルの付いたnumericInputがありNumber of modalities/ subspecialties requiredます。numericInputからの入力が変更された場合に、より多くのモダリティを持つことができる応答で
呼び出されるuiOutput があります。modality数が 2 に変更された場合、下の図を参照してください。1 つではなく 2 つのモダリティ ボックスがあります。

モダリティ モダリティ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]])))
  })

mod1 mod2

再現可能なコードを以下に示します。

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)
4

1 に答える 1