【问题标题】:r-exams Questions about the same data on 2 separate xxx.Rmd filesr-exams 关于 2 个不同 xxx.Rmd 文件的相同数据的问题
【发布时间】:2020-06-30 11:09:16
【问题描述】:

使用 R 考试,我正在开发一个包含几个问题的 pdf 考试(因此有几个 Rmd 文件),但这些问题是相互关联的,并且会使用在第一个问题文件中创建的数据集。问题不适合完形填空格式。

有没有办法编写练习,以便第二个练习可以访问第一个练习生成的数据?

【问题讨论】:

    标签: r r-exams


    【解决方案1】:

    最简单的解决方案是在不同练习中使用共享环境,最简单的情况是.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()

    【讨论】:

    • 同意这更容易。感谢您提供以前答案的补充链接。
    【解决方案2】:

    是否可以将需要的数据保存在一个Rmd文件中

    ```{r, echo=FALSE}
    saveRDS(df, "my_stored_data.rds")
    ```
    

    然后将其加载到另一个中

    ```{r, echo=FALSE}
    readRDS(df, "my_stored_data.rds")
    ```
    

    【讨论】:

    • 此解决方案运行良好。我只是想知道是否有避免从文件写入和读取的解决方案。
    • 看看其他答案。
    【解决方案3】:

    另一种选择可能是从 R 脚本编织 Rmd 文件,然后从 R 脚本编织它们。如果您这样做,Rmd 文件使用R 脚本的环境 (!) 而不是创建自己的。因此,您可以使用相同的对象(因此当然让一个 Rmd 脚​​本存储数据,而另一个将其用作输入。

    在此线程中:Create sections through a loop with knitr 我有一篇关于这样做的帖子。基本上是这样的:

    第一个 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")
    

    【讨论】:

    • 感谢您的额外提示。可能会怀疑这会增加练习编写的另一层复杂性。
    • 编辑了答案。当然,我不知道你的练习,但我有感觉,这实际上是一个优雅的解决方案。
    猜你喜欢
    • 2021-08-09
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多