R knitr Markdown: Output Plots within For Loop

前端 未结 4 704
小蘑菇
小蘑菇 2020-12-02 11:55

I would like to create an automated knitr report that will produce histograms for each numeric field within my dataframe. My goal is to do this without having to specify the

相关标签:
4条回答
  • 2020-12-02 12:33

    Wrap the qplot in print.

    knitr will do that for you if the qplot is outside a loop, but (at least the version I have installed) doesn't detect this inside the loop (which is consistent with the behaviour of the R command line).

    0 讨论(0)
  • 2020-12-02 12:33

    Wish to add a quick note: Somehow I googled the same question and get into this page. Now in 2018, just use print() in the loop.

    for (i in 1:n){
    ...
        f <- ggplot(.......)
        print(f)
    }
    
    0 讨论(0)
  • 2020-12-02 12:46

    I am using child Rmd files in markdown, also works in sweave.

    in Rmd use following snippet:

    ```{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 looks like:

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

    see my datamineR package on github https://github.com/hugokoopmans/dataMineR

    0 讨论(0)
  • 2020-12-02 12:57

    As an addition to Hugo's excellent answer, I believe that in 2016 you need to include a print command as well:

    ```{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')`
    ```
    
    0 讨论(0)
提交回复
热议问题