One thing I really liked from the Dorothy Bishop guide is that she keeps a running df1
to help visualize the process. I find this super useful for both beginners and as a comprehension check for code.
For those unfamiliar, basically what she does is something like:
population <- declare_population(
N = N,
u_t1 = rnorm(N)*sd_1,
u_t2 = rnorm(N, rho * u_t1, sqrt(1 - rho^2))*sd_2
)
df1 <- population()
kable(head(df1))
and
potential_outcomes <- declare_potential_outcomes(
Y_t1_Z_0 = u_t1,
Y_t1_Z_1 = u_t1,
Y_t2_Z_0 = u_t2,
Y_t2_Z_1 = u_t2 + ate)
df1 <- potential_outcomes(df1)
kable(head(df1))
… and so forth keeping a running df1
the whole way through.
I wanted to do something similar with the %>%
but I struggled until I found out about Immediately-Invoked Function Expressions.
Here I write a the function:
prep_population <- function(population){
(population)()
}
Which I can then use as an intermediary into visualizing my working design Dorothy Bishop style e.g.,
population %>%
prep_population %>%
potential_outcomes
This serves the same purpose as keeping the running df1
, but I find this easier to write. Anyway this has been really useful for me, hopefully someone else finds it to be useful too!