R Shiny动态生成numericInput时value缺失报错无法出图
问题修复方案
你的代码共有3处核心错误,对应修复逻辑如下:
- 动态生成
numericInput时缺失必填参数:numericInput要求必须传入value作为默认值,你在purrr::map循环构造输入框时仅传了输入id和标签,未传默认值,直接触发argument "value" is missing, with no default报错。 - 动态输入值批量读取逻辑错误:
input[[x]]语法仅支持传入单个字符串读取1个输入项,你传入多元素的id向量无法批量取值,需要遍历所有动态生成的输入id逐个取值后拼接为数值向量。 - 绘图输出id不匹配:UI层定义的绘图输出容器id为
plotted,server层却对output$plot赋值,Shiny无法匹配到对应的渲染位置,图表无法显示。
修复后完整可运行代码
library(shiny) library(shinyWidgets) library(purrr) ui <- fluidPage( titlePanel("Title"), fluidRow( column( width = 10, offset = 1, tags$h3("Filler"), panel( numericInput("n_params","How many fields?", min = 2, max = 100, value = 3), uiOutput("param_fields"), numericInput("n_sims","How many simulations?", min = 0, max = 100000, value = 10000), actionButton("sampling", "Sample from this distribution!") ), tags$h3("Plotted results!"), plotOutput("plotted") ) ) ) server <- function(input, output) { # 动态生成指定数量的数值输入框 dynamic_list_of_numeric_fields <- reactive({ n_params <- req(input$n_params) purrr::map(1:n_params, ~numericInput( inputId = paste0("alpha",.), label = withMathJax(paste0("\\(\\alpha_{", . ,"}\\)")), value = 1 # 补全必填的默认值参数 )) }) output$param_fields <- renderUI({ div(req(dynamic_list_of_numeric_fields())) }) # 点击按钮触发绘图计算 plots <- eventReactive(input$sampling, { n_params <- req(input$n_params) param_ids <- paste0("alpha", 1:n_params) # 遍历所有输入id逐个取值,拼接为数值向量 param_vals <- map_dbl(param_ids, ~req(input[[.x]])) hist(param_vals) }) # 修正输出id和UI层的plotted对应 output$plotted <- renderPlot({ plots() }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者socialscientist
相关产品推荐
相关产品推荐

