The overhead of method dispatching can be noticable, particularly if done on small objects and it adds up if doing many many times. For instance,
> add <- function(a,b) UseMethod("add")
> add.integer <- function(a,b) a+b
gives with method dispatching:
> system.time({ for (kk in 1:10e6) add(1L, 2L) })
user system elapsed
35.43 0.05 35.70
and without:
> system.time({ for (kk in 1:10e6) add.integer(1L, 2L) })
user system elapsed
7.80 0.02 7.86