Ответ 1
Оберните qplot
в print
.
knitr
сделает это для вас, если qplot
находится за пределами цикла, но (по крайней мере, версия, которую я установил) не обнаруживает это внутри цикла (что согласуется с поведением команды R линия).
Я хотел бы создать автоматизированный отчет о пользователе, который будет генерировать гистограммы для каждого числового поля в моем кадре данных. Моя цель - сделать это, не указывая фактические поля (этот набор данных содержит более 70, и я также хотел бы повторно использовать script).
Я пробовал несколько разных подходов:
p
, а затем вызов p
после цикла
PLOTS <- NULL
и добавление графиков в цикле PLOTS <- append(PLOTS, p)
.png
, но скорее бы не имел дело с накладными расходами на сохранение и последующим повторным доступом к каждому файлу.Я боюсь, что запутывание сюжетных устройств ускользает от меня.
Как я могу сделать следующий фрагмент вывода каждого графика в цикле в отчете? В настоящее время я могу добиться наилучшего результата вывода конечного графика, созданного путем сохранения его объекту и вызова этого объекта за пределы цикла.
R markdown chunk с помощью 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)
}
```
С этой точки зрения, я надеюсь настроить дальнейшие планы.
Оберните 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
В качестве дополнения к Hugo отличный ответ, я считаю, что в 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')`
```