When writing R functions always remind yourself to think about if it can happen that you accidentally just select one column of a data.frame.
This will result in vector which might not be what you expect in the following code.
One good practice is to always use drop=FALSE when you intend to get a data.frame and use the [] notation if you expect a vector.
Lets assume cols is a vector which only sometimes has the length one, then we would do the following:
Sometimes you have to work with base::plot and to combine multiple plots the solution is e.g. par(mfrow=c(1,2), ...).
Unfortunately using par can mess up all your future plots in the active R session.
This is one handy trick to get back to the default settings for plotting: