如何手动给 exams/questions 打分?
How to grade exams/questions manually?
我想做的事情:
我想在以下过程中使用 r-exams
:
- 向学生提供 pdf 格式的电子考试(使用
exams2pdf(..)
- 让学生上传 excel 包含他们答案的文件
- 使用(使用
eval_nops(...)
) 对答案评分
我的问题:
调用函数 eval_nops()
是在 r-exams
中手动对问题评分的首选方式吗?
如果不是,首选哪种方式?
我试过的:
我知道 exam2nops()
函数,并且我知道它会返回一个 .RDS
文件,其中存储了正确的答案。因此,我基本上拥有我需要的东西。但是,我发现该过程不是很简单,因为正确答案深埋在 RDS 文件中。
概述
你是对的,除了像 Moodle 或 Canvas 等标准学习管理系统 (LMS) 之外,没有现成的 administering/grading 考试系统。R/exams 确实提供不过,一些评分的基石,尤其是 exams_eval()
。这可以用 Google 表单等工具进行补充。下面我从关于 exams_eval()
的“确凿事实”开始,尽管这有点技术性。但是我也提供了一些关于这些方法的评论。
使用exams_eval()
让我们考虑一个具体的例子
eval <- exams_eval(partial = TRUE, negative = FALSE, rule = "false2")
表示您想要 multiple-choice 练习的部分学分,但每个项目的总分不得为负数。正确勾选的框产生 1/#correct 点,错误勾选的框产生 1/#false。唯一的例外是只有一个错误的项目(然后将取消 所有 点)然后使用 1/2。
生成的对象eval
是一个包含输入参数(partial
、negative
、rule
)和三个函数checkanswer()
、pointvec()
、pointsum()
。假设您有正确的答案模式
cor <- "10100"
正确和错误勾选的关联分数为:
eval$pointvec(cor)
## pos neg
## 0.5000000 -0.3333333
因此,对于以下答案模式,您将得到:
ans <- "11100"
eval$checkanswer(cor, ans)
## [1] 1 -1 1 0 0
eval$pointsum(cor, ans)
## [1] 0.6666667
后者仍然需要乘以分配给该练习的总分。对于数字答案,您只能得到 100% 或 0%:
eval$pointsum(1.23, 1.25, tolerance = 0.05)
## [1] 1
eval$pointsum(1.23, 1.25, tolerance = 0.01)
## [1] 0
同样,字符串答案要么正确要么错误:
eval$pointsum("foo", "foo")
## [1] 1
eval$pointsum("foo", "bar")
## [1] 0
练习元信息
要获取给定练习的相关信息,您可以从所有 exams2xyz()
接口的嵌套列表中访问元信息 return:
x <- exams2xyz(...)
例如,您可以将第 j
次练习的第 i
次随机复制的 metainfo
提取为:
x[[i]][[j]]$metainfo
这包含正确的 $solution
、$type
以及 $tolerance
等。当然,这有点长并且不便于交互输入,但应该很容易循环通过编程方式。这就是 nops_eval()
基于包含 x
.
中的信息的 .rds
文件所做的事情
在没有完整 LMS 的情况下管理考试
我通常的建议是尽量利用大学的服务(当然,如果有的话)。是的,bandwidth/stability 等可能会出现问题,但如果您是 运行 自己的系统(去过那里,做过那个),您可以拥有所有相同的东西。具体来说,这里提供了关于 Moodle 与 PDF 考试的讨论:
不过,如果我要在 LMS 之外提供我的考试,我会使用 HTML,而不是 PDF。在 HTML 中嵌入附加信息(数据、链接等)比在 PDF 中容易得多。另外HTML可以更方便地在移动设备上查看moch。
为了收集答案,一些 R/exams 用户使用 Google 表格,例如:
https://R-Forge.R-project.org/forum/forum.php?thread_id=34076&forum_id=4377&group_id=1337。其他人对此使用 learnr
或 webex
很感兴趣:
http://www.R-exams.org/general/distancelearning/#going-forward.
不过,关于隐私,如果其中任何一个比使用大学的 LMS 更好,我会感到非常惊讶。
我想做的事情:
我想在以下过程中使用 r-exams
:
- 向学生提供 pdf 格式的电子考试(使用
exams2pdf(..)
- 让学生上传 excel 包含他们答案的文件
- 使用(使用
eval_nops(...)
) 对答案评分
我的问题:
调用函数 eval_nops()
是在 r-exams
中手动对问题评分的首选方式吗?
如果不是,首选哪种方式?
我试过的:
我知道 exam2nops()
函数,并且我知道它会返回一个 .RDS
文件,其中存储了正确的答案。因此,我基本上拥有我需要的东西。但是,我发现该过程不是很简单,因为正确答案深埋在 RDS 文件中。
概述
你是对的,除了像 Moodle 或 Canvas 等标准学习管理系统 (LMS) 之外,没有现成的 administering/grading 考试系统。R/exams 确实提供不过,一些评分的基石,尤其是 exams_eval()
。这可以用 Google 表单等工具进行补充。下面我从关于 exams_eval()
的“确凿事实”开始,尽管这有点技术性。但是我也提供了一些关于这些方法的评论。
使用exams_eval()
让我们考虑一个具体的例子
eval <- exams_eval(partial = TRUE, negative = FALSE, rule = "false2")
表示您想要 multiple-choice 练习的部分学分,但每个项目的总分不得为负数。正确勾选的框产生 1/#correct 点,错误勾选的框产生 1/#false。唯一的例外是只有一个错误的项目(然后将取消 所有 点)然后使用 1/2。
生成的对象eval
是一个包含输入参数(partial
、negative
、rule
)和三个函数checkanswer()
、pointvec()
、pointsum()
。假设您有正确的答案模式
cor <- "10100"
正确和错误勾选的关联分数为:
eval$pointvec(cor)
## pos neg
## 0.5000000 -0.3333333
因此,对于以下答案模式,您将得到:
ans <- "11100"
eval$checkanswer(cor, ans)
## [1] 1 -1 1 0 0
eval$pointsum(cor, ans)
## [1] 0.6666667
后者仍然需要乘以分配给该练习的总分。对于数字答案,您只能得到 100% 或 0%:
eval$pointsum(1.23, 1.25, tolerance = 0.05)
## [1] 1
eval$pointsum(1.23, 1.25, tolerance = 0.01)
## [1] 0
同样,字符串答案要么正确要么错误:
eval$pointsum("foo", "foo")
## [1] 1
eval$pointsum("foo", "bar")
## [1] 0
练习元信息
要获取给定练习的相关信息,您可以从所有 exams2xyz()
接口的嵌套列表中访问元信息 return:
x <- exams2xyz(...)
例如,您可以将第 j
次练习的第 i
次随机复制的 metainfo
提取为:
x[[i]][[j]]$metainfo
这包含正确的 $solution
、$type
以及 $tolerance
等。当然,这有点长并且不便于交互输入,但应该很容易循环通过编程方式。这就是 nops_eval()
基于包含 x
.
.rds
文件所做的事情
在没有完整 LMS 的情况下管理考试
我通常的建议是尽量利用大学的服务(当然,如果有的话)。是的,bandwidth/stability 等可能会出现问题,但如果您是 运行 自己的系统(去过那里,做过那个),您可以拥有所有相同的东西。具体来说,这里提供了关于 Moodle 与 PDF 考试的讨论:
不过,如果我要在 LMS 之外提供我的考试,我会使用 HTML,而不是 PDF。在 HTML 中嵌入附加信息(数据、链接等)比在 PDF 中容易得多。另外HTML可以更方便地在移动设备上查看moch。
为了收集答案,一些 R/exams 用户使用 Google 表格,例如:
https://R-Forge.R-project.org/forum/forum.php?thread_id=34076&forum_id=4377&group_id=1337。其他人对此使用 learnr
或 webex
很感兴趣:
http://www.R-exams.org/general/distancelearning/#going-forward.
不过,关于隐私,如果其中任何一个比使用大学的 LMS 更好,我会感到非常惊讶。