bnj*_*jmn 46 r ggplot2 rstudio knitr
我想创建一个自动编织器报告,它将为我的数据帧中的每个数字字段生成直方图.我的目标是在不必指定实际字段的情况下执行此操作(此数据集包含超过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)
从这一点来说,我希望进一步定制这些图.
Yan*_*Liu 12
希望添加一个简短的说明:不知何故,我用谷歌搜索了相同的问题并进入了此页面。现在在 2018 年,只需print()在循环中使用。
for (i in 1:n){
...
f <- ggplot(.......)
print(f)
}
Run Code Online (Sandbox Code Playgroud)
Hug*_*ans 10
我在降价中使用子Rmd文件,也适用于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'))
}
```
Run Code Online (Sandbox Code Playgroud)
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))
```
Run Code Online (Sandbox Code Playgroud)
在github上查看我的datamineR包 https://github.com/hugokoopmans/dataMineR