[Rd] proposal for "strict" versions of subsetting operators

Ben Bolker bolker at zoo.ufl.edu
Tue Oct 28 20:40:49 MET 2003


 
  You may think this is ridiculous, but here's the situation I'm thinking
about.

  Students are trying (e.g.) to evaluate a likelihood for a series of 
parameter values, and want to store the results in a vector, e.g.:

pvec = seq(0,10,by=0.1)
likvec = numeric(length(pvec))

  They try something like

for (p in pvec) {
   likvec[p] = likfun(p)
}

rather than

for (pctr in 1:length(pvec)) {
   p = pvec[pctr]; likvec[pctr] = likfun(p)
}

I am perfectly aware that they could just do sapply(pvec,likvec) instead,
and that they will be in trouble with other parameter vectors like
seq(1,100,by=4) which will not put the answers where they want them.  
Nevertheless, this is a trap my students fall into.

  I can imagine that implicit floor() is convenient, which is why I was
suggesting this "feature" as an option, FALSE by default -- similar to the
check.bounds option.

  Ben Bolker

On Tue, 28 Oct 2003, Prof Brian Ripley wrote:

> You would need at least a fuzz for computed indices being slightly 
> non-integer (although the calling code should do that).
> 
> I can think of several cases where the implicit floor() is convenient.
> Can you tell me of examples where users would do this by accident (or out 
> of non-RTFM)?
> 
> On Tue, 28 Oct 2003, Ben Bolker wrote:
> 
> > 
> >   On a related topic: is there any chance/any interest in a slight 
> > modification of the subsetting code that would generate a warning when the 
> > user tried to subset with a non-integer?  The current behavior is that the 
> > non-integer is coerced to an integer, which means that e.g. x[3.8] is 
> > equivalent to x[3].  I can't think of (or find in the documentation) any 
> > time when this would actually be a desired behavior.
> >   The only integer-testing behavior that I can find in the code base is in 
> > some of the discrete-distribution code ...
> 
> Yes, but then they are documented that way, and selection is documented to 
> do as.integer().
> 
> >   I might be able to hack this myself -- it looks as though ExtractSubset 
> > in subset.c might be the place to do this ...
> > 
> >    Ben Bolker
> > 
> > 
> > 
> 
> 

-- 
620B Bartram Hall                            bolker at zoo.ufl.edu
Zoology Department, University of Florida    http://www.zoo.ufl.edu/bolker
Box 118525                                   (ph)  352-392-5697
Gainesville, FL 32611-8525                   (fax) 352-392-3704



More information about the R-devel mailing list