You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

shinySurveys中radioMatrixInput无法获取未完成响应的问题

解决shinySurveys中radioMatrixInput无法获取部分作答数据的问题

radioMatrixInput的默认逻辑是仅当所有问题行都完成选择后,才会将响应数据同步到Shiny的input对象中。要获取用户的部分作答数据,需要绕开这个默认限制,直接从页面DOM中提取选中的值并主动传递给服务器端。

实现方案

  1. 在UI中嵌入JavaScript代码,监听单选框的点击事件,实时收集已选中的选项
  2. 在服务器端监听自定义的输入对象,接收实时传递的部分作答数据

完整示例代码

library(shiny)
library(shinySurveys)

# 定义问卷问题集
questions <- data.frame(
  question = c("问题1", "问题2", "问题3"),
  option = I(list(c("选项A", "选项B"), c("选项A", "选项B"), c("选项A", "选项B"))),
  input_type = "radio",
  input_id = "matrix_radio",
  dependence = NA,
  dependence_value = NA,
  required = FALSE
)

ui <- fluidPage(
  radioMatrixInput(
    inputId = "matrix_radio",
    questions = questions,
    choices = c("选项A", "选项B")
  ),
  verbatimTextOutput("partial_response"),
  
  # 自定义JS逻辑:实时收集并传递部分作答数据
  tags$script(HTML("
    $(document).on('change', '#matrix_radio input[type=radio]', function() {
      let partialResponses = {};
      // 遍历每一行问题,提取已选中的选项
      $('#matrix_radio .shiny-survey-question-row').each(function() {
        let question = $(this).find('.shiny-survey-question-text').text().trim();
        let selectedVal = $(this).find('input[type=radio]:checked').val();
        if (selectedVal) {
          partialResponses[question] = selectedVal;
        }
      });
      // 将数据发送到Shiny服务器
      Shiny.setInputValue('partial_matrix_data', partialResponses, {priority: 'event'});
    });
  "))
)

server <- function(input, output, session) {
  # 监听自定义输入,实时获取部分作答数据
  observe({
    req(input$partial_matrix_data)
    output$partial_response <- renderPrint({
      cat("当前已完成的作答:\n")
      print(input$partial_matrix_data)
    })
  })
}

shinyApp(ui, server)

代码说明

  • JavaScript部分通过监听单选框的change事件,遍历radioMatrix的每一行问题,提取已选中的选项值,以问题文本为键、选中值为值构建响应对象
  • 使用Shiny.setInputValue将响应对象主动发送到服务器端,priority: 'event'确保数据实时更新
  • 服务器端通过observe监听自定义的input$partial_matrix_data,即可实时获取用户的部分作答数据,无需等待所有问题完成

内容的提问来源于stack exchange,提问作者cwillig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:05:22