はじめに
たとえば次のような分析結果の図を作りたいと考えたとしよう.
このとき「実際の計算」と,「図の作成」は別々にコード化すると効率が良い.
ひな形の作成
上記の図のイメージができたら,「その結果を生成するようなダミーのdata.frame」を準備する.
この場合,実際のデータが
post.p <- data.frame(mean=post[1:122,1],sd=post[1:122,3], age=c(c(20:80),c(20:80)),sex=c(rep("female",61),rep("male",61)), age.group=c(rep("20-39",20),rep("40-59",20),rep("60-80",21)))
であれば,ダミーのdata.frameは
post.p <- data.frame(mean=c(4,5,6),sd=mean-3, age=c(20,30,40),sex=c("female","male"))
くらい簡単なもので良い.
data.frameを受け取った後のplotは
g <- ggplot(post.p,aes(x=age,y=mean,linetype=sex))+ geom_line(position=position_dodge(0.2))+ geom_point(position=position_dodge(0.2),size=2)+ ylim(0,1)+ geom_errorbar(aes(ymin=mean-sd,ymax=mean+sd),width=.2,position=position_dodge(0.3))+ facet_wrap(~ age.group, scales="free_x",ncol = 1) g ggsave(file = "figure.pdf", plot = g, dpi = 300, width = 8, height = 12)
といった形である.このとき,計算は実際に実行する必要はない.シンプルな結果のダミーdata.frameさえあれば,図のお化粧は別に作業できるからである.
コードの抽象化
要するにこれはコードの抽象化であり,モデルである.
コードを書くのが面倒だなと思ったら,面倒な計算の部分と,それ以外の部分の構造を抽象化して切り分けると混乱しない.
コードを書くとき,ついつい癖で具体的で一般性のない手続きを書いてしまう場合があるが,結局はコードも抽象化によって可読性と再現性が高くなる.