如何使用降价循环在一个块中呈现多个“测验”对象?
How to render multiple `quiz` objects in one chunk using a loop in markdown?
我想在一个块中使用循环呈现库 learnr
的函数 quiz
的多个对象。 R
编译 html-markdown
文件没有问题,但渲染不正确。它正在呈现文本,而不是它应该呈现的问题。
这是我的可重现代码,目前无法正确呈现:
---
title: ""
output: learnr::tutorial
runtime: shiny_prerendered
description: ""
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(learnr)
```
```{r, q-part2, echo=FALSE, results='asis'}
words_lst <- structure(list(eng = c("bathroom", "bedroom", "dining room",
"door", "house", "kitchen", "garden", "neighbor", "office", "attic",
"living room"), nl = c("de badkamer", "de slaapkamer", "de eetkamer",
"de deur", "het huis", "de keuken", "de tuin", "de buurman",
"het kantoor", "de zolder", "de woonkamer")), row.names = c(NA,
-11L), class = "data.frame")
for(i in seq_along(words_lst)){
quiz(caption = paste0(i),
question_text(paste0("Translate: ", words_lst[i,1L]),
answer("C0rrect ", message = "Make sure you do not have a trailing space"),
answer(trimws(words_lst[i, 2L]), correct = TRUE),
incorrect = paste0("Gebruik: ", sub("\s.*", "", words_lst[i,2L])),
allow_retry = TRUE,
trim = TRUE,
placeholder = "schrijf het juist antwoord"
))
}
```
我找到了解决方案,事实证明在一个块中无法呈现两个或更多函数quiz
。
我的解决方案是循环生成多个question_text
,将它们存储在一个list
中,然后使用eval
调用所有问题作为quiz
的参数.这是解决方案:
```{r, q-part1, echo=FALSE, message=FALSE, results="asis"}
words_lst <- structure(list(eng = c("bathroom", "bedroom", "dining room",
"door", "house", "kitchen", "garden", "neighbor", "office", "attic",
"living room"), nl = c("de badkamer", "de slaapkamer", "de eetkamer",
"de deur", "het huis", "de keuken", "de tuin", "de buurman",
"het kantoor", "de zolder", "de woonkamer")), row.names = c(NA,
-11L), class = "data.frame")
for (j in 1:nrow(words_lst)) { list_w[[j]] <- question_text(
paste0("Translate: ", words_lst[j, 1L]),
answer("C0rrect ", message = "Make sure you do not have a trailing space"),
answer(trimws(words_lst[j, 2L]), correct = TRUE),
incorrect = paste0("Gebruik: ", sub("\s.*", "", words_lst[j, 2L])),
allow_retry = TRUE,
trim = TRUE,
placeholder = "schrijf het juist antwoord" ) }
eval(parse(text = paste0( "quiz(", paste0("list_w[[", 1:nrow(words_lst), "]]", collapse = ', '), ")" )))
```
我想在一个块中使用循环呈现库 learnr
的函数 quiz
的多个对象。 R
编译 html-markdown
文件没有问题,但渲染不正确。它正在呈现文本,而不是它应该呈现的问题。
这是我的可重现代码,目前无法正确呈现:
---
title: ""
output: learnr::tutorial
runtime: shiny_prerendered
description: ""
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(learnr)
```
```{r, q-part2, echo=FALSE, results='asis'}
words_lst <- structure(list(eng = c("bathroom", "bedroom", "dining room",
"door", "house", "kitchen", "garden", "neighbor", "office", "attic",
"living room"), nl = c("de badkamer", "de slaapkamer", "de eetkamer",
"de deur", "het huis", "de keuken", "de tuin", "de buurman",
"het kantoor", "de zolder", "de woonkamer")), row.names = c(NA,
-11L), class = "data.frame")
for(i in seq_along(words_lst)){
quiz(caption = paste0(i),
question_text(paste0("Translate: ", words_lst[i,1L]),
answer("C0rrect ", message = "Make sure you do not have a trailing space"),
answer(trimws(words_lst[i, 2L]), correct = TRUE),
incorrect = paste0("Gebruik: ", sub("\s.*", "", words_lst[i,2L])),
allow_retry = TRUE,
trim = TRUE,
placeholder = "schrijf het juist antwoord"
))
}
```
我找到了解决方案,事实证明在一个块中无法呈现两个或更多函数quiz
。
我的解决方案是循环生成多个question_text
,将它们存储在一个list
中,然后使用eval
调用所有问题作为quiz
的参数.这是解决方案:
```{r, q-part1, echo=FALSE, message=FALSE, results="asis"}
words_lst <- structure(list(eng = c("bathroom", "bedroom", "dining room",
"door", "house", "kitchen", "garden", "neighbor", "office", "attic",
"living room"), nl = c("de badkamer", "de slaapkamer", "de eetkamer",
"de deur", "het huis", "de keuken", "de tuin", "de buurman",
"het kantoor", "de zolder", "de woonkamer")), row.names = c(NA,
-11L), class = "data.frame")
for (j in 1:nrow(words_lst)) { list_w[[j]] <- question_text(
paste0("Translate: ", words_lst[j, 1L]),
answer("C0rrect ", message = "Make sure you do not have a trailing space"),
answer(trimws(words_lst[j, 2L]), correct = TRUE),
incorrect = paste0("Gebruik: ", sub("\s.*", "", words_lst[j, 2L])),
allow_retry = TRUE,
trim = TRUE,
placeholder = "schrijf het juist antwoord" ) }
eval(parse(text = paste0( "quiz(", paste0("list_w[[", 1:nrow(words_lst), "]]", collapse = ', '), ")" )))
```