【发布时间】:2012-08-10 23:51:00
【问题描述】:
我想创建一个自动 knitr 报告,该报告将为我的数据框中的每个数字字段生成直方图。我的目标是在不指定实际字段的情况下执行此操作(此数据集包含 70 多个,我还想重用脚本)。
我尝试了几种不同的方法:
- 将绘图保存到对象
p,然后在循环后调用p- 这只是绘制最终图
- 创建一个绘图数组
PLOTS <- NULL,并将绘图附加到循环PLOTS <- append(PLOTS, p)- 在循环之外访问这些图根本不起作用
- 甚至尝试将每个文件保存到
.png文件,但宁愿不必处理保存然后重新访问每个文件的开销
我担心情节装置的复杂性在逃避我。
问题
如何使以下块将循环中的每个图输出到报告中?目前,我能做到的最好的结果是通过将其保存到一个对象并在循环外调用该对象来生成最终绘图的输出。
在 RStudio 中使用 knitr 的 R 降价块:
```{r plotNumeric, echo=TRUE, fig.height=3}
suppressPackageStartupMessages(library(ggplot2))
FIELDS <- names(df)[sapply(df, class)=="numeric"]
for (field in FIELDS){
qplot(df[,field], main=field)
}
```
从这一点开始,我希望进一步自定义剧情。
【问题讨论】:
-
是的。我必须承认我是新手……
-
我已将 knitr 标签添加到您的问题和标题中,以明确您正在使用的内容。
-
您是不是忘记将
qplot包裹在print中?如果qplot在循环之外,knitr将为您执行此操作,但是(至少我安装的版本)在循环内没有检测到这一点(这与 R 命令行的行为一致)。 -
@cbeleites 您可能应该对此做出回答,以便 OP 可以接受。
-
有类似的问题。尝试将分析和 ggplot 图循环到 .Rmd 文件中。但是在循环运行后没有数字或分析输出打印。任何想法为什么?