寻求可实现用户间答案传递的R语言在线问卷开发包
嗨,针对你的需求,我整理了几个适合的R包,既能搭建带选择题和开放式问题的在线问卷,还能实现用户间的答案传递功能:
适合的R包推荐
1. Shiny(核心基础包)
Shiny是R生态里做交互式Web应用的标配,完全能满足你的需求:
- 问卷搭建:用内置的UI组件轻松实现各种题型:
- 选择题:
radioButtons()(单选)、checkboxGroupInput()(多选) - 开放式问题:
textInput()(短文本)、textareaInput()(长文本)
- 选择题:
- 用户间答案传递:你可以通过几种方式实现:
- 用
reactiveValues()在应用内存中临时存储已提交的答案,新用户加载页面时就能读取这些数据; - 把答案持久化到本地数据库(比如SQLite,用
DBI包操作)或者文件(比如CSV),这样即使重启应用,数据也不会丢失,所有用户都能访问历史答案。
- 用
举个极简示例,实现一个能展示之前用户答案的问卷:
library(shiny) # 初始化存储答案的对象 saved_answers <- reactiveValues(data = data.frame()) ui <- fluidPage( titlePanel("共享答案问卷"), # 选择题 radioButtons("choice", "你的偏好是?", choices = c("选项A", "选项B", "选项C")), # 开放式问题 textInput("open", "补充说明:"), actionButton("submit", "提交答案"), hr(), h3("其他用户的答案:"), tableOutput("answer_table") ) server <- function(input, output, session) { # 提交按钮逻辑 observeEvent(input$submit, { # 新增当前用户的答案到存储 new_row <- data.frame( 偏好 = input$choice, 补充说明 = input$open, 提交时间 = Sys.time() ) saved_answers$data <- rbind(saved_answers$data, new_row) # 清空输入框 updateRadioButtons(session, "choice", selected = character(0)) updateTextInput(session, "open", value = "") }) # 展示所有用户的答案 output$answer_table <- renderTable({ saved_answers$data }) } shinyApp(ui, server)
2. shinysurveys(问卷专用简化包)
如果不想从零写Shiny代码,shinysurveys是专门为问卷场景设计的封装包,能快速定义问卷结构,同时保留Shiny的交互能力:
- 快速搭建问卷:用一个数据框定义所有问题(题型、选项、提示等),无需手动写每个UI组件;
- 答案传递:同样可以结合Shiny的
reactiveValues或数据库来实现共享答案,因为它本质还是基于Shiny的,所以兼容所有Shiny的后端逻辑。
示例代码片段(定义问卷结构):
library(shinysurveys) # 定义问卷数据框 survey_df <- data.frame( question = c("你的偏好是?", "补充说明:"), option = I(list(c("选项A", "选项B", "选项C"), NA)), input_type = c("radio", "text"), input_id = c("choice", "open"), dependence = NA, dependence_value = NA, required = c(TRUE, FALSE) ) # 后续可结合Shiny的逻辑实现答案共享,和前面的示例思路一致
额外提示
如果需要更复杂的用户管理(比如用户登录、区分不同用户的答案),可以搭配shinyauthr包实现身份验证,再结合数据库来精细化管理共享的答案数据。
内容的提问来源于stack exchange,提问作者Student1981
相关产品推荐
相关产品推荐

