如何编写可在Moodle中正常展示的RMarkdown数值+图表单选习题?
问题描述
- 在RStudio中使用knitr编写RMarkdown习题,包含两类题目:
- 数值题:要求输入相关系数,正确答案为代码中的
corr1 - 单选题:要求选择对应数据的图表,正确答案为
grafico1.png
- 数值题:要求输入相关系数,正确答案为代码中的
- 现有代码导入Moodle后,图表选项无可选单选按钮,无法正常交互
修正后的完整RMarkdown代码
library(ggplot2) library(exams) # 确保加载exams包以生成Moodle兼容题型 # 生成数据与图表的核心代码(保留原逻辑) Concentration = c(7.1,82.9) r.sq = 0 while (r.sq <0.85) { x = runif(33, min(Concentration),max(Concentration)) b = runif(1,-3,3)+rnorm(33,0,0.25) a = ifelse(max(b)<0, -min(b)*max(x),0) data = data.frame(Concentration = round(x,2), Reaction_time = round(a+b*x,2)) z = lm(data$Reaction_time~data$Concentration) summa = summary(z) r.sq = summa$r.squared } corr = round(cor(data$Concentration,data$Reaction_time),2) corr1 = corr r.sq = 0 while (r.sq <0.85 | abs(corr1)<abs(corr)) { x = runif(33, min(Concentration),max(Concentration)) b = runif(1,-3,3)+rnorm(33,0,0.25) a = ifelse(max(b)<0, -min(b)*max(x),0) data1 = data.frame(Concentration = round(x,2), Reaction_time = round(a+b*x,2)) z = lm(data1$Reaction_time~data1$Concentration) corr1 = round(cor(data1$Concentration,data1$Reaction_time),2) summa = summary(z) r.sq = summa$r.squared } corr2 = corr r.sq = 0 while (r.sq <0.85 | abs(corr2)<abs(corr)) { x = runif(33, min(Concentration),max(Concentration)) b = runif(1,-3,3)+rnorm(33,0,0.25) a = ifelse(max(b)<0, -min(b)*max(x),0) data2 = data.frame(Concentration = round(x,2), Reaction_time = round(a+b*x,2)) z = lm(data2$Reaction_time~data2$Concentration) corr2 = round(cor(data2$Concentration,data2$Reaction_time),2) summa = summary(z) r.sq = summa$r.squared } corr3 = corr r.sq = 0 while (r.sq <0.85 | abs(corr3)<abs(corr)) { x = runif(33, min(Concentration),max(Concentration)) b = runif(1,-3,3)+rnorm(33,0,0.25) a = ifelse(max(b)<0, -min(b)*max(x),0) data3 = data.frame(Concentration = round(x,2), Reaction_time = round(a+b*x,2)) z = lm(data3$Reaction_time~data3$Concentration) corr3 = round(cor(data3$Concentration,data3$Reaction_time),2) summa = summary(z) r.sq = summa$r.squared } write.csv(data,'concentration_vs_rxtime_q2.csv', row.names = FALSE) p1 = ggplot(data, aes(x=Concentration, y=Reaction_time)) + geom_point() p2 = ggplot(data1, aes(x=Concentration, y=Reaction_time)) + geom_point() p3 = ggplot(data2, aes(x=Concentration, y=Reaction_time)) + geom_point() p4 = ggplot(data3, aes(x=Concentration, y=Reaction_time)) + geom_point() png('grafico1.png', width=380, height=248, units='px', pointsize=12) p1 dev.off() png('grafico2.png', width=380, height=248, units='px', pointsize=12) p2 dev.off() png('grafico3.png', width=380, height=248, units='px', pointsize=12) p3 dev.off() png('grafico4.png', width=380, height=248, units='px', pointsize=12) p4 dev.off()
Determine the correlation coefficient: ##ANSWER1## Choose the right plot for the data: -  -  -  -  Meta-information ================ extype: cloze exclozetype: num|schoice exsolution: `r corr1`|1000 exname: mod10_q1
关键修正说明
- 将单选题的编号列表(1.、2.)改为破折号开头的无序列表:exams包生成Moodle兼容题型时,
schoice类型的选项必须用无序列表(-或*开头)才能被识别为可选择项,进而生成单选按钮 - 确保
exclozetype设置为num|schoice,对应数值题和单选题的组合题型 exsolution中1000表示四个选项里第一个为正确答案,与grafico1.png对应
内容的提问来源于stack exchange,提问作者Eugenio Guerrero Ruiz
相关产品推荐
相关产品推荐

