You need to do some hacking of the code for forest.rma
. Several steps:
After displaying the current version of the code by typing the function name:
forest.rma # Copy the name and the code and paste into the console
# Add an assignment operator `<-`
# leave off the bytecode and environment notations at the bottom
Or you can do this in an editor, which would probably be the preferred method since you might then want to save this code to a .Rprofile
file.
1) Add parameters to the argument list:
forest.rma <-
function (x, annotate = TRUE, addfit = TRUE, addcred = FALSE,
showweights = FALSE, xlim, alim, clim, ylim, at, steps = 5,
level = x$level, digits = 2, refline = 0, xlab, slab, mlab,
ilab, ilab.xpos, ilab.pos, order, transf, atransf, targs,
rows, efac = 1, pch = 15, psize, col, border, lty, cex, cex.lab,
cex.axis, annosep = " , ", bkt=c("[", "]"), ...)
{ # ....not showing all the _long_ function body
# Scroll down to almost the bottom of the function body
2) Find and change arguments to the annotext
cbind
-assignment. There are several places where annotext
might get constructed, but only one of them matches your "format target". Find the one that looks like this:
# annotext <- cbind(annotext[, 1], " [ ", annotext[,
# 2], " , ", annotext[, 3], " ]")
Change to this:
annotext <- cbind(annotext[, 1], bkt[1], annotext[,
2], annosep, annotext[, 3], bkt[2] )
# hit enter to get the modification to hold in your workspace
3) Now assign the correct environment to the function so it can play well with its siblings:
environment(forest.rma) <- environment(forest.default)
# if you forget this step you see this error:
Error in forest.rma(res, slab = paste(dat$author, dat$year, sep = ", "), :
could not find function ".setlab"
And call it with the new arguments of your choosing:
png(); forest(res, slab = paste(dat$author, dat$year, sep = ", "), xlim = c(-16, 6), at = log(c(0.05, 0.25, 1, 4)), atransf = exp, ilab = cbind(dat$tpos, dat$tneg, dat$cpos, dat$cneg), ilab.xpos = c(-9.5, -8, -6, -4.5), cex = 0.75, annosep=" to ", bkt = c( "(", ")" ) )
op <- par(cex = 0.75, font = 2)
text(c(-9.5, -8, -6, -4.5), 15, c("TB+", "TB-", "TB+", "TB-"))
text(c(-8.75, -5.25), 16, c("Vaccinated", "Control"))
text(-16, 15, "Author(s) and Year", pos = 4)
text(6, 15, "Relative Risk [95% CI]", pos = 2)
dev.off()
