r-exams 关于 2 个单独 xxx.Rmd 文件中相同数据的问题
r-exams Questions about the same data on 2 separate xxx.Rmd files
使用 R 考试,我正在开发一个包含多个问题(因此有多个 Rmd 文件)的 pdf 考试,但这些问题是相互关联的,并且将使用在第一个问题文件中创建的数据集。问题不适合完形填空格式。
有没有办法编写练习,使第二个练习可以访问第一个练习生成的数据?
是否可以选择将您需要的数据保存在一个 Rmd
文件中
```{r, echo=FALSE}
saveRDS(df, "my_stored_data.rds")
```
然后加载到另一个
```{r, echo=FALSE}
readRDS(df, "my_stored_data.rds")
```
另一个选择 可能是从 R
脚本编织 Rmd
文件,然后从这个 R
脚本编织它们。如果这样做,Rmd
文件 使用 R
脚本 (!) 的环境,而不是创建它们自己的环境。因此,您可以使用相同的对象(因此当然让一个 Rmd
脚本存储数据,而另一个将其用作输入。
在此线程中:
我有一个 post 是关于这样做的。基本上是这样的:
第一个Rmd文件:
---
title: "Script 1"
output: html_document
---
```{r setup, include=FALSE}
a_data_frame_created_in_script_1 <- mtcars
```
另存为rmd_test.Rmd
第二个:
---
title: "Script 1"
output: html_document
---
```{r setup}
a_data_frame_created_in_script_1
```
另存为rmd_test_2.Rmd
。
然后你有一个执行此操作的 R 脚本:
rmarkdown::render("rmd_test.Rmd", output_file = "rmd_test.html")
rmarkdown::render("rmd_test_2.Rmd", output_file = "rmd_test_2.html")
最简单的解决方案是在不同的练习中使用共享环境,最简单的情况是 .GlobalEnv
。然后你可以简单地做
exams2pdf(c("ex1.Rmd", "ex2.Rmd"), envir = .GlobalEnv)
然后两个练习都将在全局环境中创建它们的变量,并可以从那里重新使用现有变量。除了 .GlobalEnv
,您还可以创建 myenv <- new.env()
并使用 envir = myenv
.
对于 Rnw(相对于 Rmd)练习,没有必要设置此选项,因为 Sweave()
Rnw 练习总是在当前环境中处理。
请注意,这些方法仅适用于那些 exams2xyz()
接口,其中每个练习的第 n 次随机抽取可以确保在第 n 次考试中一起结束。这是 PDF 输出的情况,但不是许多学习管理系统输出(Moodle、Canvas 等)。参见:Sharing a random CSV data set across exercises with exams2moodle()
使用 R 考试,我正在开发一个包含多个问题(因此有多个 Rmd 文件)的 pdf 考试,但这些问题是相互关联的,并且将使用在第一个问题文件中创建的数据集。问题不适合完形填空格式。
有没有办法编写练习,使第二个练习可以访问第一个练习生成的数据?
是否可以选择将您需要的数据保存在一个 Rmd
文件中
```{r, echo=FALSE}
saveRDS(df, "my_stored_data.rds")
```
然后加载到另一个
```{r, echo=FALSE}
readRDS(df, "my_stored_data.rds")
```
另一个选择 可能是从 R
脚本编织 Rmd
文件,然后从这个 R
脚本编织它们。如果这样做,Rmd
文件 使用 R
脚本 (!) 的环境,而不是创建它们自己的环境。因此,您可以使用相同的对象(因此当然让一个 Rmd
脚本存储数据,而另一个将其用作输入。
在此线程中:
第一个Rmd文件:
---
title: "Script 1"
output: html_document
---
```{r setup, include=FALSE}
a_data_frame_created_in_script_1 <- mtcars
```
另存为rmd_test.Rmd
第二个:
---
title: "Script 1"
output: html_document
---
```{r setup}
a_data_frame_created_in_script_1
```
另存为rmd_test_2.Rmd
。
然后你有一个执行此操作的 R 脚本:
rmarkdown::render("rmd_test.Rmd", output_file = "rmd_test.html")
rmarkdown::render("rmd_test_2.Rmd", output_file = "rmd_test_2.html")
最简单的解决方案是在不同的练习中使用共享环境,最简单的情况是 .GlobalEnv
。然后你可以简单地做
exams2pdf(c("ex1.Rmd", "ex2.Rmd"), envir = .GlobalEnv)
然后两个练习都将在全局环境中创建它们的变量,并可以从那里重新使用现有变量。除了 .GlobalEnv
,您还可以创建 myenv <- new.env()
并使用 envir = myenv
.
对于 Rnw(相对于 Rmd)练习,没有必要设置此选项,因为 Sweave()
Rnw 练习总是在当前环境中处理。
请注意,这些方法仅适用于那些 exams2xyz()
接口,其中每个练习的第 n 次随机抽取可以确保在第 n 次考试中一起结束。这是 PDF 输出的情况,但不是许多学习管理系统输出(Moodle、Canvas 等)。参见:Sharing a random CSV data set across exercises with exams2moodle()