如何在R-exams生成Canvas测验时实现试题版本全量无重复并简化操作
问题:如何在exams2canvas中生成无重复角色试题并自动分组?
需求与示例代码
我希望在课堂活动中为学生随机分配专属“角色”,让他们提前做出角色对应的选择,以下是简单示例的Rmd代码:
```{r, echo=TRUE, results="hide"} i<-sample(1:5,1) ids <- c("A","B","C","D","E") price <- c("0.4","1","0.8","2","5")
Question
你前往超市r ids[i],发现牛油果每个售价USD r price[i]。你会购买多少个?
Meta-information
extype: num
exsolution: 0
## 遇到的问题 当设置`n=5`生成Canvas测验时,`i`的抽样是有放回的,导致题库中出现重复ID,同时会缺失部分ID。我清楚问题出在每次调用.Rmd文件都会独立抽取`i`,但不知道如何解决。如果设置`n=10000`依赖大数定律来凑,不仅冗余,后续统计相同角色学生的平均答案也会很麻烦。 想请教:能否在`exams2canvas`函数中完成随机化,传入1到5的`i`值,让每个版本恰好生成一次? ## 已实现的解决步骤 我编写了一个辅助函数来生成所有变体文件: ```r write.versions <- function(file,dir=".",i.range) { for (i in i.range) { filei<-paste(dir,"/",tools::file_path_sans_ext(file),"-",i,".Rmd",sep="") write(paste("```{r, echo=TRUE, results=\"hide\"}\n i<-",i,"\n```",sep=""), file=filei) write(readLines(file),file=filei,append=TRUE) } }
这个函数接收文件名(如test.Rmd)作为输入,生成所有变体文件(需要删除原代码中的i<-sample(1:5,1)行)。之后结合list(paste("test","-",1:5,".Rmd",sep=""))就能将其纳入exams2系列函数。后来发现用expar函数能更优雅地完成这一步。
现在我可以通过以下代码生成每个变体恰好一次的测验:
exams2canvas(list(paste("test-",1:5,".Rmd",sep="")),nsamp=5)
因为nsamp参数在可用时会采用无放回抽样。生成的测验可以上传至Canvas,但之后必须手动将所有试题归入同一试题组才能实现随机分配,这一步操作繁琐。
当前疑问
有没有方法可以省去手动将试题归入同一组的步骤?
内容的提问来源于stack exchange,提问作者nimmmiaumit
相关产品推荐
相关产品推荐

