我正在尝试将learnr
包中的教程 Rmd 嵌入到一个完整的闪亮应用程序中。但是,学习者使用shiny_prerendered
运行时,我不能在我的应用程序中调用它。如何在闪亮的应用程序中运行交互式教程?
我现在有三个文件:ui.R、server.R 和 tutorial.Rmd。
我的教程看起来像这样(一个`删除用于格式化)
---
title: "my tutorial"
tutorial:
id: "com.example.tutorials.a-tutorial"
version: 1.0
output: learnr::tutorial
runtime: shiny_prerendered
---
``{r setup, include=FALSE}
library(learnr)
knitr::opts_chunk$set(echo = FALSE)
``
### Exercise Example
An R code question
``{r add-function, exercise=TRUE, exercise.lines = 5}
add <- function() {
}
``
### Quiz
R Quiz Question
``{r quiz}
quiz(
question("Question 1",
answer("wrong"),
answer("also wrong"),
answer("right", correct = TRUE),
answer("wrong again")
)
)
``
当我尝试像这样渲染这个文件的输出时ui.R
:
ui <- tagList(
fluidPage(theme = shinytheme("cosmo")),
navbarPage(
"appTitle",
tabPanel("Embedding Tutorials?",
includeMarkdown("tutorial.Rmd")
),
)
)
它(正确地,我相信)将其显示为常规的旧 Rmd 文件,而不是交互式教程。
我也尝试过使用rmarkdown::render("tutorial.Rmd")
它来渲染 Rmd ( /Users/me/app/tutorial.html
) 生成的 html 文件的文件路径。
当我尝试使用 渲染任何教程run_tutorial("hello", package="learnr")
时,它(再次正确地)给出错误
ERROR: Can't call
runApp() from within
runApp() . If your application code contains
runApp(), please remove it.
我已经发现我可以使用以下question()
函数创建问题块learnr
:
ui <- tagList(
fluidPage(theme = shinytheme("cosmo")),
navbarPage(
"appTitle",
tabPanel("Tutorial",
quiz(
question("Quiz question",
answer("1"),
answer("2"),
answer("3", correct = TRUE),
answer("4"),
allow_retry = TRUE
)
),
)
)
但这不允许创建可在应用程序中运行的 R 代码块的功能。
我想要的是一个完全交互式的学习者教程,可以从ui.R
一个闪亮的应用程序的文件中呈现。这可能吗?