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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:45