相关疑难解决方法(0)

R knitr Markdown:For循环中的输出图

我想创建一个自动编织器报告,它将为我的数据帧中的每个数字字段生成直方图.我的目标是在不必指定实际字段的情况下执行此操作(此数据集包含超过70个,我还想重用该脚本).

我尝试过几种不同的方法:

  • 将绘图保存到对象,p然后p在循环 后调用
    • 这只绘制了最终的情节
  • 创建一个绘图数组PLOTS <- NULL,并在循环中附加绘图PLOTS <- append(PLOTS, p)
    • 从循环中访问这些图并不起作用
  • 甚至尝试将每个.png文件保存到文件中,但不必处理保存然后重新访问每个文件的开销

我担心情节设备的复杂性正在逃避我.

如何将循环内的每个绘图输出到报告中?目前,我能做到的最好的是输出最终绘图,将其保存到对象并在循环外调用该对象.

knitr在RStudio中使用R markdown chunk :

```{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)  
}
```
Run Code Online (Sandbox Code Playgroud)

从这一点来说,我希望进一步定制这些图.

r ggplot2 rstudio knitr

46
推荐指数
3
解决办法
2万
查看次数

使用knitr调用块的动态数量

我有这样一个清单:

> lSlopes
$A
  Estimate 2.5 % 97.5 %
1     2.12 -0.56   4.80

$B
  Estimate 2.5 % 97.5 %
1     2.21 -0.68   5.10

$C
  Estimate 2.5 % 97.5 %
1     2.22 -2.21   6.65
Run Code Online (Sandbox Code Playgroud)

它有三个元素,但其长度可以改变(根据此处未显示的数据).我想在一个块中显示每个元素.

我的第一个想法是knit_child()在每一步编写一个包含循环调用的块,但我不知道如何获得正确的渲染knit_child().

我发现以下解决方案效果很好,但需要两个Rmd文件; 第一个调用第二个,第二个递归调用自身:

mainfile.Rmd:

```{r, echo=FALSE}
J <- length(lSlopes)
i <- 1
```

```{r child, child="stepfile.Rmd"}
```
Nice!
Run Code Online (Sandbox Code Playgroud)

stepfile.Rmd:

```{r, echo=FALSE}
lSlopes[[i]]
i <- i+1
```

```{r child, child="stepfile.Rmd", eval= i <= J}
```
Run Code Online (Sandbox Code Playgroud)

这准确地生成了我想要的渲染:

在此输入图像描述

我喜欢这个棘手的解决方案,但我想知道是否存在非递归解决方案?

r knitr r-markdown

6
推荐指数
1
解决办法
752
查看次数

标签 统计

knitr ×2

r ×2

ggplot2 ×1

r-markdown ×1

rstudio ×1