R调用qualtRics包导入Qualtrics问卷时提取zip文件报错
qualtRics连续拉取同一份问卷两种格式报错解决方案
问题原因
两次调用qualtRics::fetch_survey()拉取同一份问卷时,默认使用问卷ID作为下载压缩包的文件名,存储到相同的output/目录下会触发文件锁冲突、覆盖不完整问题;此外短时间内对同一份问卷重复发起导出请求,也可能导致Qualtrics接口返回的压缩包本身损坏,无法正常解压。
可直接使用的解决方案
- 方案1:为两次拉取任务指定不同的导出文件名,避免本地文件冲突
给两次fetch_survey调用新增filename参数,指定不同的存储文件名即可解决冲突,修改后代码参考:#Grab list of surveys. survey_list <- qualtRics::all_surveys() #Define row number from the survey list, to call on later. survey_num <- which(survey_list$name == "SurveyName") #Load the questions from the survey into a data set. questions <- qualtRics::survey_questions(survey_list$id[survey_num]) #Load the survey data with choices as numbers. survey_data <- qualtRics::fetch_survey(survey_list$id[survey_num], save_dir = "output/", filename = "survey_numeric.zip", label = FALSE, convert = FALSE, force_request = TRUE) #Load the survey data with choices as text. survey_data_text <- qualtRics::fetch_survey(survey_list$id[survey_num], save_dir = "output/", filename = "survey_text.zip", label = TRUE, convert = FALSE, force_request = TRUE) #Create a column map. survey_col_map <- qualtRics::extract_colmap(survey_data_text) - 方案2:仅拉取一次数据,直接生成双格式结果(更推荐)
qualtRics::extract_colmap()本身可以从带文本标签的返回结果中提取到数值编码与文本选项的一一对应关系,不需要重复拉取两次数据集,可从根源避免请求冲突,简化后代码如下:#Grab list of surveys. survey_list <- qualtRics::all_surveys() #Define row number from the survey list, to call on later. survey_num <- which(survey_list$name == "SurveyName") #Load the questions from the survey into a data set. questions <- qualtRics::survey_questions(survey_list$id[survey_num]) #仅拉取一次带文本标签的数据集 survey_data_text <- qualtRics::fetch_survey(survey_list$id[survey_num], save_dir = "output/", label = TRUE, convert = FALSE, force_request = TRUE) #提取列映射表,包含所有选项的数值编码和文本对应关系 survey_col_map <- qualtRics::extract_colmap(survey_data_text) #如果需要使用数值格式的数据集,直接通过映射表转换即可,无需额外拉取 - 方案3:两次请求之间增加等待间隔
若确实需要两次独立拉取,可在两次fetch_survey()调用之间添加3-5秒的等待时间,避免短时间高频请求导致接口返回不完整的压缩包:# 拉取数值格式数据集 survey_data <- qualtRics::fetch_survey(...) # 增加等待间隔 Sys.sleep(3) # 拉取文本格式数据集 survey_data_text <- qualtRics::fetch_survey(...)
内容的提问来源于stack exchange,提问作者nickdelta
相关产品推荐
相关产品推荐

