[R-pkg-devel] Absent variables and tibble

Johannes Ranke jranke at uni-bremen.de
Mon Jun 27 16:30:50 CEST 2016


Am Montag, 27. Juni 2016, 10:03:35 schrieb Duncan Murdoch:
> On 27/06/2016 9:22 AM, Lenth, Russell V wrote:
> > My package 'lsmeans' is now suddenly broken because of a new provision in
> > the 'tibble' package (loaded by 'dplyr' 0.5.0), whereby the "[[" and "$"
> > methods for 'tbl_df' objects - as documented - throw an error if a
> > variable is not found.> 
> > The problem is that my code uses tests like this:
> > 	if (is.null (x$var)) {...}
> > 
> > to see whether 'x' has a variable 'var'. Obviously, I can work around this
> > using> 
> > 	if (!("var" %in% names(x))) {...}
> > 
> > but (a) I like the first version better, in terms of the code being
> > understandable; and (b) isn't there a long history whereby we can expect
> > a NULL result when accessing an absent member of a list (and hence a
> > data.frame)? (c) the code base for 'lsmeans' has about 50 instances of
> > such tests.
> > 
> > Anyway, I wonder if a lot of other package developers test for absent
> > variables in that first way; if so, they too are in for a rude awakening
> > if their users provide a tbl_df instead of a data.frame. And what is
> > considered the best practice for testing absence of a list member?
> > Apparently, not either of the above; and because of (c), I want to do
> > these many tedious corrections only once.
> > 
> > Thanks for any light you can shed.
> 
> This is why CRAN asks that people test reverse dependencies.
> 
> I think the most defensive thing you can do is to write a small function
> 
> name_missing <- function(x, name)
>      !(name %in% names(x))
> 
> and use name_missing(x, "var") in your tests.  (Pick your own name to
> make your code understandable if you don't like my choice.)
> 
> You could suggest to the tibble maintainers that they add a function
> like this.

This is also being discussed here:

https://github.com/hadley/tibble/issues/91

Kind regards,

Johannes Ranke



More information about the R-package-devel mailing list