私は、ボタンを追加または削除すると、複数の反応要素が影響を受けるような光沢のあるアプリケーションを作成しています。私は以下にしようとしていることを大幅に単純化しました。基本的には、selectInput()とtextInput()ボックスを並べて、textInput()ボックスにselectInput()ボックスのユーザーが選択した結果が表示されるようにします。次に、追加ボタンをクリックして、ボタンをクリックすると、次の行の下に新しいselectInput()とtextInput()ボックスが並んで表示されます。上記のように、新しい行のtextInput()ボックスには、新しい行のselectInput()ボックスのユーザーが選択した結果が表示されます。R Shiny:追加/削除ボタンのコンテキストで複数の要素を反応させるにはどうすればよいですか?
問題は、新しいseletInput()ボックスの新しい値を参照できることです。 get()参照を使用することはできません。新しいボックスが追加されたり削除されたりすると、これらの値を参照できる反復的な方法が必要です。連続するselectInput()ボックスの結果への参照を正常に呼び出すにはどうすればよいですか?
suppressWarnings(library(shiny))
suppressWarnings(library(shinyFiles))
ui <- function(request) {
fluidPage(
fluidRow(
column(2,
uiOutput("ui1")
),
column(2,
uiOutput("ui2")
),
column(1,
actionButton(inputId = 'insertParamBtn', label = "Add Param")
),
column(1,
actionButton(inputId = 'removeParamBtn', label = "Remove Param")
)
),
tags$div(id = 'placeholder'),
hr(),
fluidRow(column(12, verbatimTextOutput("view", placeholder = T)))
)
}
server <- function(input, output, session) {
params <- reactiveValues(btn = 0)
output$ui1 <- renderUI({
selectInput("UI1", "First UI",
choices = thisList, selected = 1)
})
output$ui2 <- renderUI({
textInput("UI2", "Second UI", value = input$UI1, width = '150px')
})
observeEvent(input$insertParamBtn, {
params$btn <- params$btn + 1
insertUI(
selector = '#placeholder',
## wrap element in a div with id for ease of removal
ui = tags$div(
id = paste0('param', params$btn + 1),
tags$p(fluidRow(
column(2,
selectInput(paste0("UI1", params$btn + 1),
paste0("First UI ", params$btn + 1),
choices = thisList, selected = 1)
),
column(2,
textInput(paste0("UI2", params$btn + 1), #*#
paste0("Second UI ", params$btn + 1), #*#
value = get(paste0("input$UI1", params$btn + 1)), #*#
width = '150px') #*#
)
)
)
)
)
output$view <- renderPrint({ get(paste0("UI1", params$btn + 1)) })
})
observeEvent(input$removeParamBtn, {
removeUI(
## pass in appropriate div id
selector = paste0('#param', params$btn + 1)
)
params$btn <- params$btn - 1
})
}
shinyApp(ui = ui, server = server)
コードに問題があるようです。オブジェクト 'thislist'はどこにも定義されていませんが、アプリケーションで2回使用されます。 –
thisList < - as.list(c(1,2,3,4,5)、c(1,2,3,4,5)) –
申し訳ありませんが、まずその行をコピーするのを忘れてしまいました。ヘッドアップありがとう –