我想收集个人信息(姓名和年龄)作为用户输入随附的演示代码.初始个体数为1,当用户增加/减少个体数时,它会react 性地增加/减少相应的行以收集个体信息.我的问题是,在增加/减少个体数量时,如何避免删除当前的输入信息.例如,screenshot 1显示用户(me)输入的个人1的信息.当我将个体数的值更改为2时,我之前输入的信息被删除(screenshot 2),我必须重新输入个体1的信息.当我将个体数增加到2时,我预计会是screenshot 3(个体1的信息不会被删除).有人能帮我吗?谢谢
Update on 05/15/2022
由于我在过go 一周没有收到任何关于这个问题的新 comments /答案,我接受了jpdugo17的答案.对于那些有类似问题的人,请注意,公认答案中的numericInput
与actionButton
没有react (您可以将其删除或更改为textInput
).再次感谢@jpdugo17的帮助.
Example code
library(shiny)
ui <- fluidPage(
tabsetPanel(
tabPanel(
h4("Individual Information"),
fluidRow(column(4,numericInput("ninds",
label = "Number of individuals",
value = 1, min = 1, step = 0.5, width = "300px"))),
br(),
fluidRow(column(2,align = "center",strong("Individual #")),
column(5,align = "center",strong("Individual Name")),
column(5,align = "center",strong("Age"))),
fluidRow(
column(2,wellPanel(uiOutput("indNum"))),
column(5,wellPanel(uiOutput("Name"))),
column(5,wellPanel(uiOutput("Age"))))
)
)
)
server <- function(input, output) {
# create reactive variable paste0("individualNum", i) for further using
output$indNum <- renderUI({
num <- as.integer(input$ninds)
req(num)
lapply(1:num, function(i) {
numericInput(paste0("individualNum", i), value = i, label = "", max = i, min = i)
})
})
# create reactive variable paste0("name", i) for further using
output$Name <- renderUI({
num <- as.integer(input$ninds)
req(num)
lapply(1:num, function(i) {
textInput(paste0("name", i), label = "")
})
})
# create reactie variable paste0("age", i) for further using
output$Age <- renderUI({
num <- as.integer(input$ninds)
req(num)
lapply(1:num, function(i) {
numericInput(paste0("age", i), label = "", value = 0)
})
})
}
# Run the app ----
shinyApp(ui, server)