это - r notebook




R knitr Markdown: выходные графики в пределах цикла (3)

Я хотел бы создать автоматизированный отчет о сборе, который будет генерировать гистограммы для каждого числового поля в моем кадре данных. Моя цель - сделать это, не указывая фактические поля (этот набор данных содержит более 70, и я также хотел бы повторно использовать сценарий).

Я пробовал несколько разных подходов:

  • сохранение графика в объект, p , а затем вызов p после цикла
    • Это только отображает окончательный сюжет
  • Создание массива графиков, PLOTS <- NULL и добавление графиков в цикл PLOTS <- append(PLOTS, p)
    • Доступ к этим сюжетам из цикла не работал вообще
  • Даже попробовал сохранить каждый файл .png но скорее бы не имел дело с накладными расходами на сохранение и последующим повторным доступом к каждому файлу

Я боюсь, что уловки сюжетных устройств ускользают от меня.

Вопрос

Как я могу сделать следующий фрагмент вывода каждого графика в цикле в отчете? В настоящее время я могу добиться наилучшего результата - это вывод окончательного графика, созданного путем сохранения его объекту и вызова этого объекта за пределы цикла.

R knitr с использованием knitr в RStudio:

```{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)  
}
```

С этого момента я надеюсь настроить дальнейшие планы.


В дополнение к превосходному ответу Хьюго, я считаю, что в 2016 году вам необходимо включить команду print :

```{r run-numeric-md, include=FALSE}
out = NULL
for (i in c(1:num_vars)) {
  out = c(out, knit_child('da-numeric.Rmd'))
}

`r paste(out, collapse = '\n')`
```

Оберните qplot в print .

knitr сделает это для вас, если qplot находится вне цикла, но (по крайней мере, версия, которую я установил) не обнаруживает этого внутри цикла (что согласуется с поведением командной строки R).


Я использую дочерние Rmd-файлы в markdown, также работает в sweave.

в Rmd используйте следующий фрагмент:

```{r run-numeric-md, include=FALSE}
out = NULL
for (i in c(1:num_vars)) {
  out = c(out, knit_child('da-numeric.Rmd'))
}
```

da-numeric.Rmd выглядит так:

Variabele `r num_var_names[i]`
------------------------------------

Missing :  `r sum(is.na(data[[num_var_names[i]]]))`  
Minimum value : `r min(na.omit(data[[num_var_names[i]]]))`  
Percentile 1 : `r quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[2]`  
Percentile 99 : `r quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[100]`  
Maximum value : `r max(na.omit(data[[num_var_names[i]]]))`  

```{r results='asis', comment="" }
warn_extreme_values=3
d1 = quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[2] > warn_extreme_values*quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[1]
d99 = quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[101] > warn_extreme_values*quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[100]
if(d1){cat('Warning : Suspect extreme values in left tail')}
if(d99){cat('Warning : Suspect extreme values in right tail')}
```

``` {r eval=TRUE,  fig.width=6, fig.height=2}
library(ggplot2)

v <- num_var_names[i]
hp <- ggplot(na.omit(data), aes_string(x=v)) + geom_histogram( colour="grey", fill="grey", binwidth=diff(range(na.omit(data[[v]]))/100))

hp + theme(axis.title.x = element_blank(),axis.text.x = element_text(size=10)) + theme(axis.title.y = element_blank(),axis.text.y = element_text(size=10))

```

см. мой пакет datamineR на github https://github.com/hugokoopmans/dataMineR





rstudio