Some rules of thumb for new R users (According to myself):
If you are working with data.frame
s, forget there is a function called apply
- whatever you do - don't use it. Especially with a margin of 1 (the only good usecase for this function is to operate over matrix
columns- margin of 2).
?do.call
, ?pmax/pmin
, ?max.col
, ?rowSums/rowMeans/etc
, the awesome matrixStats
packages (for matrices), ?rowsum
and many moreFor loops are not bad- don't listen to anyone who says otherwise. They are bad only in certain cases:
R is a vectorized language- meaning many operation were already written in C loops- so don't reinvent the wheel and write stuff in R loops if it was already written. With one exception- many of these functions work only with matrices. Hence, if you have a data.frame
you should think twice if you want it to be converted to a matrix
(you may experience some unexpected consequences as a result), or can you avoid it.
Learn base R before you learn any fancy packages such as dplyr
. It is a nice package and all, but it was designed for very specific things. Many many operations could be done much more efficiently using base R.
Get familiar with R classes. Learn what is factor
and how to use it. Know the difference between a matrix
(a vector with a dim
attribute) and a data.frame
(a list
of vectors). Learn how and when to work with list
s or array
s. Know the difference between numeric
and integer
. Read about floating points.
Learn how and when yo use lapply/sapply/vapply
- these could come useful many times
You must learn some ?regex
. Must.
Read ?S4groupGeneric
in order to discover which functions have data.frame
methods (a very useful to know).
Learn about ?methods
Read ?strptime
very carefully (note the Sys.setlocale("LC_TIME", "C")
part - could be a life saver).
Read the damn docs. R has awesome documentation- please use it. You won't find anything even nearly as good in any other language (I know of).
Like Barry Rowlingson once said: "This is all documented in TFM. Those who WTFM don't want to have to WTFM again on the mailing list. RTFM."