Edited: 2020-02-28 07:00:13

# Intro

To begin posting interesting statistics tidbits and personal notes online, I first needed to find a suitable workflow to make the publication process as easy as possible. Since I work most days using R with Rstudio, this `blogdown`

-generated site format might just do. Let’s play with it a bit a see what it can do.

For installing etc: https://bookdown.org/yihui/blogdown/

I tweaked the `main.css`

after copying it to `static/css`

; also added a new logo (`/static/images/`

) and favicon (`/static/`

); and other stuff not reported here. In an attempt to be able to have a “front page” I added an `/content/index.md`

but this just messed everything up, so I decided to have this whole blog inside a “blog” folder of main my site root.

# Basic features

As far as I can tell, the thing that we can not do with Rmarkdown (rmd) document (as opposed to using md) is todos,

- [x] test maths
- [x] test R blocks
- [x] test biblio

This is of course stated in the reference guide: only `md`

-format supports this, not `rmd`

. The reason is that the formats use different renderer (BlackFriday for md, Pandoc for rmd). But I doubt there is any point making todo-lists on static posts anyway. What else do we have…

Standard lists do work

- first
- jee jee
- joo

- second
- a pina
- b anaani

as do quotations with > symbol

Oli hepokatti maantiellä poikittain.

— somebody

For TOC at the top add to YAML

```
output:
blogdown::html_page:
toc: true
```

# Maths

We are supposed to be able generate posts like we would Rmarkdown-documents, so inline \(\log \xi = a\Rightarrow \xi=e^a\) should work as well as

\[\int_U g(z)dz = G(U)\]

and

\[\begin{align} y_i &= a+ bx_i + z_i\\ z_i &= \varepsilon_i + y_{i-1} \end{align}\]

Hmm direct rendering does seem to work. For the theme `hugo-xmin`

or other similar barebones theme the file `layouts/partial/foot_custom.html`

(or similar) needs a bit of tweaking (see link), mainly need to add the relevant js-inclusions e.g.

```
<script src="//yihui.org/js/math-code.js"></script>
<script async
src="//cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML">
</script>
```

The default theme `lithium`

has the required inclusions by default, providing the `math-code.js`

locally and using MathJax server for the maths.

I decided to install MathJax locally, to avoid future breakage, e.g. here. That particular example might just be a bad copy-paste job, but I keep seeing those unrendered blocks of LaTeX often, especially when opening my own html-rendered Rmd-docs offline.

So to get MathJax working locally on my site, I

- installed mathjax, following their readme.md, by opening a terminal inside the blogdown-site root and running

```
cd static/js
npm install mathjax@3
mv node_modules/mathjax/es5 mathjax
```

- Modified
`themes/hugo-lithium/layouts/partials/footer_mathjax.html`

so that it imports the blogdown-required (or Hugo?) compiler

`<script src="/js/mathjax/tex-mml-chtml.js"></script>`

and now math works even when drafting offline :)

One thing I might need is reference formulas. It seems I can add a tag+label inside the align-environment to show something like \[\begin{align} E\sum_{x\neq y}f(x,y)&=\int f(x,y)\rho^{(2)}(x,y)dxdy \tag{tag 1 is here}\label{eq1}\\ &= Z \label{eq2}\tag{tag 2} \end{align}\] and we can refere to them \(\eqref{eq1}\) and \(\eqref{eq2}\), just put the eqref inside dollars, but it does not have autoincrease.

# R chuncks

Basic chunk, no flags

```
data(iris)
f <- lm(Petal.Width ~ Species, data = iris)
summary(f)
```

```
##
## Call:
## lm(formula = Petal.Width ~ Species, data = iris)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.626 -0.126 -0.026 0.154 0.474
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.24600 0.02894 8.50 1.96e-14 ***
## Speciesversicolor 1.08000 0.04093 26.39 < 2e-16 ***
## Speciesvirginica 1.78000 0.04093 43.49 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2047 on 147 degrees of freedom
## Multiple R-squared: 0.9289, Adjusted R-squared: 0.9279
## F-statistic: 960 on 2 and 147 DF, p-value: < 2.2e-16
```

seems to work. How about some graphics, with a caption and caching and `message=FALSE`

to avoid those package loading messages:

```
library(tidyr)
library(dplyr)
library(ggplot2)
iris %>% group_by(Species) %>%
gather(quant, value, Sepal.Length:Petal.Width) %>%
ggplot(aes( Species, value )) + geom_boxplot() + facet_wrap(~quant)
```

Works fine, even adds the “Figure 1” there. Cross-referencing works, see Figures 1 above and 2 below, as long as `fig.cap`

is set.

Try caching for longer runs:

```
library(spatstat)
pp <- rpoispp(100)
env <- envelope(pp, fun = pcf, verbose = FALSE, divisor="d")
par(mfrow=c(1,2))
plot(pp)
plot(env, ylim = c(0,3))
```

Seems to work, rendering does not spew out extra messages after the first run.

# Citations etc

Simple footnotes work^{1}, just need to write like so^{2} .

To work with the proper LaTeX-citation system (“BibTeX databases”) I needed to

- Add the bib-files to
`content/post`

, - Install
`pandoc-citeproc`

- Add to the YAML of this Rmd

```
bibliography: [testbib.bib, testbib2.bib]
link-citations: true
```

after which we can use the Rmarkdown @-syntax with []-brackets for (),

- Blaa R Core Team (2016); Hynynen et al. (2019)
- Time has come to talk of many things (R Core Team 2016, pp 3-4; also Hynynen et al. 2019 p 1)

Not particularly difficult, and looks quite nice. Just remember to add an empty section-header at the end for the references to have their own space. Note that the footnotes appear below the references. More info on here.

# Misc

## Images

Another feature that will be needed is static images import and placement. According to the bookdown-book^{3} we need to envoce the `knitr::include_graphics`

R-call for this, to get this lovely gif included:

`knitr::include_graphics("/blog/images/edml915_1232.gif")`

Just remember to store the images in `static/images`

.

## Interactive stuff

The above gif is nice visualisation, but an interactive version would be nicer so the reader can spin the data at will. There are many packages for embedding interactive plots in Rmd, e.g. plotly, ggvis, iplot. Example:

```
library(plotly)
x <- data.frame( sapply(1:3, function(...) runif (n = 1000, min =0, max =1) ),
sample(1:2, 1000, TRUE) )
colnames(x) <- c("x", "y", "z", "mark")
x %>% plot_ly(x=~x, y=~y, z=~z,
color=~factor(mark),
colors = c("black","blue"),
type = "scatter3d",
size = 0.05, alpha=1)
```

# References

Hynynen, Jari, Kalle Eerikäinen, Harri Mäkinen, and Sauli Valkonen. 2019. “Growth Response to Cuttings in Norway Spruce Stands Under Even-Aged and Uneven-Aged Management.” *Forest Ecology and Management* 437 (April): 314–23. https://doi.org/10.1016/j.foreco.2018.12.032.

R Core Team. 2016. *R: A Language and Environment for Statistical Computing*. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.