2

我是 R 新手,所以提前感谢您的耐心等待。

我想使用 learnr 包在 R 中创建一个多项选择测验(测验内容与 r 代码无关)。我在电子表格中包含所有问题、响应选项和正确答案。由于我的项目库有超过 100 个项目,我将举一个更简单的例子

Stem<-c("stem1", "stem2", "stem3")
OptionA <- c("a1", "a2", "a3")
OptionB<- c("b1", "b2", "b3")
OptionC<- c("c1", "c2", "c3")
Correct<- c("c1", "b2", "a3")

items<-cbind(Stem, OptionA, OptionB, OptionC, Correct)

目前,我知道如何从电子表格中提取数据的唯一方法是这样的:


learnr::question(items$Stem[1],
  answer(items$OptionA[1]),
  answer(items$OptionB[1]),
  answer(items$OptonC[1], correct = TRUE),
  answer(items$OptionD[1])
)

但是,这仍然需要我为每个项目编写那段代码并手动分配正确的答案。有谁知道更简单的方法,无论是学习者还是其他软件包?

4

1 回答 1

2

您可以简单地遍历数据或电子表格的行,并使用函数来设置问题并将它们保存在列表中。我的方法使用purrr::map了一个简单的 for 循环,但我们也可以做到这一点。试试这个:

---
title: "Tutorial"
output: learnr::tutorial
runtime: shiny_prerendered
---

```{r setup, include=FALSE}
library(learnr)
library(dplyr)
library(purrr)
knitr::opts_chunk$set(echo = FALSE)
```


```{r}
Stem<-c("stem1", "stem2", "stem3")
OptionA <- c("a1", "a2", "a3")
OptionB<- c("b1", "b2", "b3")
OptionC<- c("c1", "c2", "c3")
Correct<- c("c1", "b2", "a3")

items<-data.frame(Stem, OptionA, OptionB, OptionC, Correct)
```

## Topic 1

### Quiz

```{r quiz}
make_q <- function(x) {
  question(x$Stem,
           answer(x$OptionA, correct = x$Correct == x$OptionA),
           answer(x$OptionB, correct = x$Correct == x$OptionB),
           answer(x$OptionC, correct = x$Correct == x$OptionC))
}
questions <- items %>% 
  split(.$Stem) %>% 
  purrr::map(make_q)
```

```{r}
quiz(
  questions[[1]],
  questions[[2]],
  questions[[3]])
```
于 2020-07-15T18:39:56.353 回答