[Rd] readBin() arg check has unnecessary overhead (patch included)
Jon Clayden
jon.clayden at gmail.com
Wed Aug 12 15:57:10 CEST 2009
> > Dear all,
> > The version of readBin() in R-devel includes a use of match(), through
> > `%in%`, which can affect its performance significantly. By using
> > primitives instead of the rather expensive call to match(), I reduce
> > the time spent inside readBin() by more than 30% in some of my code
> > (part of the tractor.base package). A simple patch that does this is
> > given below. This passes "make check-devel" fine, and I don't see that
> > it could produce unexpected behaviour -- though I may, of course, be
> > wrong.
>
> actually, %in% is liked by programmeRs for its inherent
> robustness combined with "expressiveness" (<-> readability)
> inspite of its potential efficiency loss wrt to '=='
Oh, absolutely. I like it and use it widely. But my feeling was that
in core code, a small loss in expressiveness for a significant
performance improvement is a trade worth making.
> and indeed, your patch fails in one case where the original code works:
>
> readBin(., NA_character_, ...)
>
> However that case can also be checked explicitly,
> and I will implement the corresponding patch.
Many thanks.
Regards,
Jon
More information about the R-devel
mailing list