考试包中是否支持ggplot2?

时间:2017-10-29 10:37:13

标签: r ggplot2 r-markdown r-exams

我一直在尝试在r markdown中为包含ggplot2图表的考试包创建考试题目。

这是一个代表:

```{r}
library(ggplot2)
library(tibble)
x <- data_frame(x = rnorm(100, 50, 25), y = x + rnorm(100, 0, 15))
```

Question
========
```{r}
ggplot(x) + geom_point(aes(x = x, y = y))
```

What is true about the plot?

Answerlist
----------
* The relationship is strong
* The relationship is weak

Solution
========
The relationship is strong.

Answerlist
----------
* True
* False

Meta-information
================
exname: scatterplot
extype: schoice
exsolution: 10
exshuffle: 2

如果我编织文档,html页面会预览图表。

enter image description here

但是如果我使用exams2html()函数,则不会显示ggplot。

enter image description here

我尝试过不同的方法来打印图表(比如将图表存储在变量中,然后打印,或使用内联代码等),但没有真正起作用。我在r-exams.org网站或其他任何地方都找不到任何解决方案。 所以,我的问题是:我错过了什么,或者考试包中没有ggplot2支持吗?

1 个答案:

答案 0 :(得分:3)

这与ggplot2无关。这是knitr中的一些默认值加上我的疏忽。

tl; dr:现在,在R-Forge(https://R-Forge.R-project.org/R/?group_id=1337)的exams版开发中避免了这个问题。安装此版本后,该示例应该可以正常工作:install.packages("exams", repos="http://R-Forge.R-project.org")

详情:代码块

```{r}
ggplot(x) + geom_point(aes(x = x, y = y))
```

正确处理为grahics文件(正如您在问题中所示)。但是,生成的图形文件存储在子目录figure/中,exams2xyz()函数不会搜索该子目录以寻找潜在的补充。并且因为实际的HTML文件设置在与所有临时.Rmd和.md文件不同的目录中,所以找不到该图。

简单的解决方案是将当前目录用于所有补充而不是子目录。另外,我会关闭标题:

```{r, fig.path = "", fig.cap = ""}
ggplot(x) + geom_point(aes(x = x, y = y))
```

通过此修改,exams2html()exams2pdf()都可以正常工作。请注意,编织文件(.md和图形)是在临时文件夹中生成的,HTML是在另一个临时文件夹中生成的,因此不会使您的工作空间变得混乱。

如果您想要强制包含图形而不浮动且PDF输出中没有标题,则需要在代码块之前包含\行。有关工作示例,请参阅R / exams模板库中的http://www.R-exams.org/templates/scatterplot/(使用基本图形,但非常相似)。

我的疏忽:我在fig.path=""文件的考试包中通过knitr::opts_chunk$set()设置了.Rnw,但忘了为{{1}做同样的事情}文件。这已在devel版本中得到补救。因此,您可以在练习中使用.Rmd,也可以在CRAN发行版中使用fig.path=""